
    bMh	F                     v   d dl Z d dlZd dlZd dlmZ d dlmZ d dlZ	d dlm
Z
mZ d dlmZ d dlmZ ej        d             Zej        d             Zej        d             Z G d	 d
          Z G d d          Zd Zd Zej                            dg ddd fg dddfg dddfg dddfg dddfg ddfg ddd fg dddfg dddfg dddfg dd dfg dddfg          d             Zej                            dddej        ej        gdej        dej        gddej        gej        dd d ej        dgej        d d dddgg          ej                            dej        d dg          d                         Zd  Zd! Zd" Z ej                            dej        dg          d#             Z!d$ Z"d% Z#d& Z$dS )'    N)IntIndex)np_version_gt2)SparseDtypeisnaSparseArrayc                      t          j        t           j        t           j        dddt           j        ddt           j        dg
          S )z<Fixture returning numpy array with valid and missing entries                  )nparraynan     e/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/tests/arrays/sparse/test_array.pyarr_datar      s1     8RVRVQ1bfaBFAFGGGr   c                      t          |           S )z-Fixture returning SparseArray from 'arr_data'r   )r   s    r   arrr      s     x   r   c                  (    t          g dd          S )zEFixture returning SparseArray with integer entries and 'fill_value=0')
r   r   r
   r   r   r   r   r   r   r   r   
fill_valuer   r   r   r   zarrr      s     555!DDDDr   c            
          e Zd Zej                            dddej        g          d             Zd Z	ej                            dg d ej
        dd	g          dg          d
             Zd Zd Zej                            dg dddfg ddfdgddfddej        dgdefg          d             Zej                            dej        ej        ej        ej        ej        gdej        ej        dej        gdej        dddgg          ej                            dddg          d                         Zej                            dddg          d             Zd Zd Zd Zd  Zd! ZdS )"TestSparseArrayr   r   Nc           	      .   t          t          j        g d          d          }|                    d|          }t	          |          r|j        j        }t          t          j        |ddddg          d          }t          j        ||           d S )N)r
   r   r   r   r   g       @r   r
   r   r   )	r   r   r   shiftr   dtypena_valuetmassert_sp_array_equal)selfr   sparseresexps        r   test_shift_fill_valuez%TestSparseArray.test_shift_fill_value%   s     RXooo663GGGll1l44
 	,+J"(J1a#;<<MMM
 c*****r   c                    t          dt          j        dgt          j                  }d|_        |j        dk    sJ t          g ddt          j                  }d|_        |j        dk    sJ d}t          j        t          |	          5  d
|_        d d d            n# 1 swxY w Y   |j        d
k    sJ t          j        |_        t          j        |j                  sJ t          g ddt          j	                  }d|_        |j        du sJ t          j        t          |	          5  d|_        d d d            n# 1 swxY w Y   t          j        |_        t          j        |j                  sJ d S )N      ?g       @r   r   )r
   r   r   r   r   r!   zAAllowing arbitrary scalar fill_value in SparseDtype is deprecatedmatchg@TFTFT)
r   r   r   r   int64r#   assert_produces_warningFutureWarningisnanbool_)r%   r   msgs      r   test_set_fill_valuez#TestSparseArray.test_set_fill_value/   s   3,@@@~"""")))BBB~""""Q'SAAA 	! 	! CN	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!~$$$$x'''''---%rxPPP~%%%%'SAAA 	 	CN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 x'''''''s$   B  B$'B$/EE
Evalr
   r   r   r
   r   c                     t          g ddt          j                  }d}t          j        t
          |          5  ||_        d d d            d S # 1 swxY w Y   d S )Nr/   Fr,   zfill_value must be a scalarr-   )r   r   r4   pytestraises
ValueErrorr   )r%   r7   r   r5   s       r    test_set_fill_invalid_non_scalarz0TestSparseArray.test_set_fill_invalid_non_scalarJ   s    ---%rxPPP+]:S111 	! 	! CN	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   AAAc                 n    |                                 }|j        |j        usJ |j        |j        u sJ d S N)copy	sp_valuessp_index)r%   r   arr2s      r   	test_copyzTestSparseArray.test_copyR   s?    xxzz~S]2222},,,,,,r   c                 T    t          j        |                                |           d S r?   )r#   assert_almost_equalto_dense)r%   r   r   s      r   test_values_asarrayz#TestSparseArray.test_values_asarrayW   s#    
s||~~x88888r   zdata,shape,dtype)r   r   r   r   r   )r   )r   )r
   AB)r   c                 B    t          ||          }|j        |k    sJ d S )Nr!   )r   shape)r%   datarM   r!   outs        r   
test_shapezTestSparseArray.test_shapeZ   s/     $e,,,yE!!!!!!r   valsr   c                     t          j        |          }t          ||          }|                                }t	          j        ||           d S Nr   )r   r   r   rG   r#   assert_numpy_array_equal)r%   rQ   r   r   r'   s        r   test_dense_reprzTestSparseArray.test_dense_reprh   sI     x~~$:666llnn
#C.....r   fixr   r   c                     |                     |          }t          j        |          }t          j        ||           d S r?   )getfixturevaluer#   round_trip_pickler$   )r%   rV   requestobj	unpickleds        r   test_picklezTestSparseArray.test_picklex   s>    %%c**(--	
 C00000r   c                     t          g d          }t          j        d           5  |D ]}	 d d d            d S # 1 swxY w Y   d S )Nr8   )r   r#   r1   )r%   sp_arr_s      r   test_generator_warningsz'TestSparseArray.test_generator_warnings~   s    YYY'''-- 	 	  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   :>>c                    t          t          j        dgd          }t          j        ddg          }|                    | d          }t          ddgd          }t          j        ||           t          j        |          }|	                    | d          }t          j
        |t          j        |                     d S )Nr+   r   r   TFr
   )r   r   r   r   _wherer#   r$   pdSerieswhereassert_series_equal)r%   r   maskr'   r(   sers         r   test_where_retain_fill_valuez,TestSparseArray.test_where_retain_fill_value   s    263-A666xu&&jj$""1c(q111
 c***inniiq!!
sBIcNN33333r   c                 ^	   t          dt          j        t          j        dt          j        g          }|                    d          }t          g ddt          j                  }t          j        ||           t          dt          j        t          j        dt          j        gd          }|                    d          }t          g ddt          j                  }t          j        ||           t          dt          j        dddg          }|                    d          }t          g ddt          j                  }t          j        ||           t          dt          j        dddgd          }|                    d          }t          g ddt          j                  }t          j        ||           t          t          j        t          j        t          j        t          j        g          }|                    d          }t          g d	dt          j                  }t          j        ||           t          t          j        t          j        t          j        t          j        gd          }|                    d          }t          g d	dt          j                  }t          j        ||           t          g d
          }|                    d          }t          g d
d          }t          j        ||           t          g d          }|j        t          t          j	                  k    sJ |j
        dk    sJ |                    d          }t          j        ||           t          g dd          }|j        t          t          j	                  k    sJ |j
        dk    sJ |                    d          }t          g dd          }t          j        ||           t          g dt          j                  }|j        t          t          j	        t          j                  k    sJ t          j        |j
                  sJ |                    d          }t          g dd          }t          j        ||           d S )Nr
   r   )r
   rl   rl   r   rl   r,   r   r   )r
   rl   r   r   r   )rl   rl   rl   rl   )        rm   rm   rm   )r   r   r   r   )r   r   r   fillnafloat64r#   r$   r!   r   r0   r   r3   r%   sr'   r(   s       r   test_fillnazTestSparseArray.test_fillna   s   BFBFArv677hhrll,,,2:NNN
 c***BFBFArv61EEEhhrll,,,"*MMM
 c***BFAq!,--hhrll***rLLL
 c***BFAq!,;;;hhrll***q
KKK
 c***899hhrll***rLLL
 c***8QGGGhhrll***q
KKK
 c*** ,,,--hhrll...2>>>
 c*** %%w+bh//////|q    hhrll
 a(((333w+bh//////|q    hhrll,,,1555
 c*** 888w+bh26BBBBBBBx%%%%%hhrll,,,2666
 c*****r   c                    t          dt          j        t          j        dt          j        g          }|                    d          }t          j        g dt          j                  }t          j        |                                |           t          dt          j        t          j        dt          j        gd          }|                    d          }t          g ddt          j                  }t          j	        ||           d S )Nr
   r   )r
   r   r   r   r   rL   r   r   r,   )
r   r   r   rn   r   ro   r#   rT   rG   r$   rp   s       r   test_fillna_overlapz#TestSparseArray.test_fillna_overlap   s    BFBFArv677 hhqkkhbj999
#CLLNNC888BFBFArv61EEEhhqkk///arzJJJ
 c*****r   c                    t          t          d          t          d          ddddddddddg          }t          j        g dt          j                  }|                                \  }t          j        ||           t          g d          }|                                \  }t          j        ||           d S )	Nr   r
   r   r   r   )r   r   	   rL   )r   r   r
   r   r   r   r   r   r   r   r   r   )r   floatr   r   int32nonzeror#   rT   )r%   saexpectedresults       r   test_nonzerozTestSparseArray.test_nonzero   s    %,,eaAq!Q1aQRSTT8IIIRX666JJLL	
#Hf555===>>JJLL	
#Hf55555r   )__name__
__module____qualname__r:   markparametrizer   r   r)   r6   r   r=   rD   rH   objectrP   rU   r]   ra   rj   rr   rt   r}   r   r   r   r   r   $   sF       [\AtRV+<==+ + >=+( ( (6 [UYYY!Q0@0@)$LMM! ! NM!- - -
9 9 9 [__dD)tS$3$dF3		
 " " "
 [VRVRVRVRV426*1a 	
  [\D!955/ / 65 / [UUFO441 1 541
  4 4 4:+ :+ :+x+ + +	6 	6 	6 	6 	6r   r   c                      e Zd Zej                            d ej        g de           e	 ej        g d                    f ej        ddej
        ddge           e	 ej        d	d
ej
        ddg                    fg          ej                            dddg          d                         Zd Zd Zej                            ddej
        g          d             Zd Zd Zd Zd Zd ZdS )TestSparseArrayAnalyticszdata,expected)r
   r   r   r   r   rL   )r+         @g      @g      $@g      .@r
   r   r   r   r+   r   g      @g      (@numpyTFc                    |rt           j        nd } |t          |                    }t          j        ||            |t          |t           j                            }t          j        ||            |t          |d                    }t          j        ||           |rd}t          j        t          |          5  t          j        t          |          t           j	                   d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        t          |          |           d d d            d S # 1 swxY w Y   d S d	}t          j        d
| d          }t          j        t          |          5  t          |                              |           d d d            d S # 1 swxY w Y   d S )Nc                 *    |                                  S r?   )cumsum)rq   s    r   <lambda>z6TestSparseArrayAnalytics.test_cumsum.<locals>.<lambda>   s    188:: r   r   r   z&the 'dtype' parameter is not supportedr-   rL   z$the 'out' parameter is not supported)rO   r
   zaxis(=z) out of bounds)axis)r   r   r   r#   r$   r   r:   r;   r<   r0   reescape)r%   rN   r{   r   r   rO   r5   r   s           r   test_cumsumz$TestSparseArrayAnalytics.test_cumsum   s    $=)=)=f[&&''
 h///f["&999::
 h///f[!44455
 h/// 	4:Cz555 = =	+d++28<<<<= = = = = = = = = = = = = = = 9Cz555 6 6	+d++55556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 D):T:::;;Cz555 4 4D!!((d(3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s6   .D  DD($EE E$GGGc           	         t          dt          j        dt          j        dg          }t          dt          j        dt          j        dg          }t          j        t          |          |           t          j        t          j        |          |           t          g dd          }t          g d|j        d          }t          j        t          |          |           t          j        t          j        |          |           t          g dd          }t          g d	d          }t          j        t          |          |           t          j        t          j        |          |           t          dt          j        dt          j        dg          }t          t          j        dt          j        dt          j        dg                    }t          j        t          j        |          |           t          g dd          }t          t          j        g d          t          j        d                    }t          j        t          j        |          |           t          g d
d          }t          t          j        g d
          t          j        d                    }t          j        t          j        |          |           d S )Nr
   r   r
   rl   r   r   r   )r
   r   r   )sparse_indexr   rl   )r
   r
   r   r   r
   rl   r   r   r   )r   r   r   r#   r$   absrB   sin)r%   r&   r|   r(   s       r   
test_ufuncz#TestSparseArrayAnalytics.test_ufunc  sH   aBFB788aBFA677
 Vf555
 888^^^:::YYYV_QRSSS
 Vf555
 888^^^;;;,,,1555
 Vc222
 555aBFB788RVQ262$>??@@
 888^^^:::RVNNN33q		JJJ
 888^^^:::RVNNN33q		JJJ
 88888r   c                 .   t          dt          j        dt          j        dg          }t          dt          j        dt          j        dg          }t          j        t          j        |d          |           t          g dd          }t          g dd          }t          j        t          j        |d          |           t          g d	d
          }t          g dd          }t          j        t          j        |d          |           d S )Nr
   r   r   r   rl   r   r   )r   r   r   rl   r   r   )r   r   r
   rl   )r   r   r   r#   r$   add)r%   r&   r|   s      r   test_ufunc_argsz(TestSparseArrayAnalytics.test_ufunc_args-  s    aBFB788aBFB788
 !2!2F;;;^^^:::]]]q999
 !2!2F;;;^^^:::]]]q999
 !2!2F;;;;;r   r   rm   c                 J   t          |gdz  ddgz   |          }t          j        |          \  }}t          j        t          j        |                    \  }}t	          j        |t          ||                     t	          j        |t          ||                     d S )N
   g?g@r   )r   r   modfasarrayr#   r$   )r%   r   r&   r1r2e1e2s          r   	test_modfz"TestSparseArrayAnalytics.test_modf;  s     j\B.#s;
SSSBF++,,B
 [
%K%K%KLLL
 [
%K%K%KLLLLLr   c                 J    t          g dd          }|j        }|dk    sJ d S )N)r
   r   r   r   r   integerkind   r   nbytesr%   r   r|   s      r   test_nbytes_integerz,TestSparseArrayAnalytics.test_nbytes_integerD  s0    ///	:::||||||r   c                 J    t          g dd          }|j        }|dk    sJ d S )N)r
   r   r   r   r   blockr   r   r   r   s      r   test_nbytes_blockz*TestSparseArrayAnalytics.test_nbytes_blockJ  s2    ///888 ||||||r   c                 t    t          t          j        g d                    }t          j        |           d S )N)2012NN2013)r   rd   to_datetimer   r   )r%   rq   s     r   test_asarray_datetime64z0TestSparseArrayAnalytics.test_asarray_datetime64Q  s1    'C'C'CDDEE

1r   c                 B    t          ddg          }|j        dk    sJ d S )Nr   r
   g      ?)r   densityr%   r   s     r   test_densityz%TestSparseArrayAnalytics.test_densityU  s,    1a&!!{c!!!!!!r   c                 B    t          ddg          }|j        dk    sJ d S )Nr   r
   )r   npointsr   s     r   test_npointsz%TestSparseArrayAnalytics.test_npointsY  s,    1a&!!{ar   N)r~   r   r   r:   r   r   r   r   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s       [ 666HBH%@%@%@AABB
 !Q1-U;;;HBHc3T%BCCDD		
  [WtUm444 4 54 449 9 9:< < < [\C=99M M :9M      " " "         r   r   c                  
   t          dt          j        dgd          } t          j        | _        |                                 }t          j        |          }t          j        g d          }t          j        ||           d S )Nr+   rm   r   )FTF)	r   r   r   r   r   r   r   r#   rT   r   r|   r{   s      r   *test_setting_fill_value_fillna_still_worksr   ^  su     sBFC(S
9
9
9CVCNXXZZF ZFx,,,--H11111r   c                  L   t          dt          j        gd          } t          j        | _        t          j        t          j        t          j        g          t          ddg          t          t          t          j                            }t          j
        | |           d S )Nrm   r   r   r   r
   )sparse_arrayr   r!   )r   r   r   r   _simple_newr   r   r   rw   r#   r$   )r   r{   s     r   test_setting_fill_value_updatesr   l  s    
sBFm
2
2
2CVCN &Xrvh''a!%%%((  H
 S(+++++r   zarr,fill_value,loc)Nr
   r   )r   Nr   r
   )r   r
   Nr   )r   r
   r
   NNr   )r
   r
   r
   r   rl   )Nr
   r   r   Nr   r   )Nr   r   r
   r   r
   c                 \    t          | |                                          }||k    sJ d S rS   )r   _first_fill_value_loc)r   r   locr|   s       r   test_first_fill_value_locr   y  s3    $ 444JJLLFS======r   r   r   c                    t          | |                                          }t          j        |                                           }t	          |t                     sJ t          j        |          }t          j        ||           d S rS   )	r   uniquerd   re   
isinstancer   r   r#   rT   )r   r   abs       r   test_unique_na_fillr     sw     	CJ///6688A
	#Aa%%%%%

1A1%%%%%r   c                      t          ddg          } |                                 }t          dg          }t          j        ||           d S )Nr   )r   r   r#   r$   r   s      r   test_unique_all_sparser     sH    
q!f

CZZ\\FA3HVX.....r   c                     t          g d          } t          g dd          }|                     dddd          }t          j        ||           |                     t	          j        dddd                    }t          j        ||           |                     t	          j        dddd                    }t          g dd          }t          j        ||           d S )Nr   r
   r   )r         r   r   r   r   )r   mapr#   r$   rd   re   r   r{   r|   s      r   test_mapr     s    
iii
 
 C<<<B777H WWr**++FVX... WWRY2"445566FVX... WWRY2"445566F<<<B777HVX.....r   c                      t          g d          } t          g dd          }|                     ddd          }t          j        ||           d S )Nr   )r   r   Nr   r   r   )r   r
   )r   r   r#   r$   r   s      r   test_map_missingr     sY    
iii
 
 C>>>b999HWW^^$$FVX.....r   c                    t          t          j        dg|           }t          dg|           }t          j        |                                |           t          j        ddg|d          }t          j        dg|dt          j        dg                    }t          j	        |                                |           d S )Nr
   r   r+   r   )r   r   index)
r   r   r   r#   r$   dropnard   	DataFrameIndexassert_equal)r   r   r(   dfexpected_dfs        r   test_dropnar     s     rvqkj
9
9
9C
se

3
3
3CSZZ\\3///	QF--	.	.B,aSs3328QC==IIIKOBIIKK-----r   c                  "   t          j        t          j        d                                        d           } |                                 }t          j        d t          d          D                       }t          j        ||           d S )N)r   r   c                 $    t          | d          S )Nr   r   r   )xs    r   r   z1test_drop_duplicates_fill_value.<locals>.<lambda>  s    ARS8T8T8T r   c                 4    i | ]}|t          d gd          S )rm   r   r   r   ).0is     r   
<dictcomp>z3test_drop_duplicates_fill_value.<locals>.<dictcomp>  s)    SSSQQSEa @ @ @SSSr   r   )	rd   r   r   zerosapplydrop_duplicatesranger#   assert_frame_equal)r   r|   r{   s      r   test_drop_duplicates_fill_valuer     s|    	bhv&&	'	'	-	-.T.T	U	UB!!F|SS%PQ((SSSTTH&(+++++r   c                     t          j        t          g d          g dd          } t          j        t          g d          g dd          }| j        | d         dk             }|j        |d         dk             }t	          j        ||           t          j        t          ddg          dd	gdddg
          }t	          j        ||           d S )N)r   r   r   r8   )rI   rJ   )r   r
   r   rJ   r   r   r
   r   r   )rd   r   r   r   r#   r   )df1df2r|   r{   s       r   test_zero_sparse_columnr     s    
,[33)))DD
E
EC
,[33)))DD
E
ECWSX]#Fws3x1}%H&(+++|+q!f"5"5QFCCAq6RRRH&(+++++r   c                    t          j        |          }t          j        ||            t          j        |          }t          j        |          }t          j        ||          rJ t          j        |d          }t          j        |d          }t          j        ||          rJ t          sd S d}t          j        t          |          5  t          j        |d           d d d            n# 1 swxY w Y   t          t          j        g d                    }t          j        |d          }t          j        |d          }t          j        ||          sJ d S )NT)r@   zGStarting with NumPy 2.0, the behavior of the 'copy' keyword has changedr-   Fr8   )
r   r   r#   rT   may_share_memoryr   r   r1   r2   r   )	r   r   r|   result_copy1result_copy2r5   rC   result_nocopy1result_nocopy2s	            r   test_array_interfacer     s   Z__F111 :c??L:c??L"<>>>>> 8Cd+++L8Cd+++L"<>>>>> 
SC		#M	=	=	= " "
5!!!!" " " " " " " " " " " " " " " rx			**++DXd///NXd///N~~>>>>>>>s   C55C9<C9)%r   r   r   r:   pandas._libs.sparser   pandas.compat.numpyr   pandasrd   r   r   pandas._testing_testingr#   pandas.core.arrays.sparser   fixturer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r     s   				      ( ( ( ( ( ( . . . . . .                  1 1 1 1 1 1 H H H
 ! ! !
 E E E
@6 @6 @6 @6 @6 @6 @6 @6Ft  t  t  t  t  t  t  t n2 2 2
, 
, 
, 	tQ	tQ	tQ			a(	tR 	T2	!	!	!4+	!	!	!1a(	!	!	!1a(	!	!	!1b)			1%			1% " # "
 		
Arvrv	
BFArv	
Arv	Aq"&!$	Aq!Q	 	 1~66& & 76	 	&/ / // / /$/ / / {33. . 43., , ,	, 	, 	,? ? ? ? ?r   