
    .iG                        d Z ddlmZmZ 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mZmZ ddlZddlmZmZmZmZ ddlmZ  G d d	      Zej0                  j3                  d
      ej0                  j5                  dddg      d               Zej0                  j3                  d
      ej0                  j5                  dddg      d               Zd Zd Zd Zd Z d Z!d Z"y)z
Collection of tests asserting things that should be true for
any index subclass except for MultiIndex. Makes use of the `index_flat`
fixture defined in pandas/conftest.py.
    )copydeepcopyN)IS64)Pandas4Warning)is_integer_dtypeis_numeric_dtype)CategoricalIndex
MultiIndexPeriodIndex
RangeIndexc                   `   e Zd Zej                  j                  dddg      d        Zd Zd Zd Z	d Z
d	 Zej                  j                  d
        Zd Zd Zd Zd Zd Zej                  j'                  d      ej                  j'                  d      d               Zej                  j'                  d      d        Zej                  j'                  d      d        Zd Zej                  j'                  d      d        Zej                  j                  dg d      d        Zd Zy)
TestCommonnameNnew_namec                    |}|r|}n|j                   xs d}|j                  |      }|j                  |u sJ t        |j                        dk(  sJ |j                  d   |k(  sJ |j                  d|      }|j                  |usJ y )Nr   r      F)indexr   )r   to_framer   lencolumns)selfr   
index_flatidxidx_namedfs         ^/var/www/app/trading-bot/venv/lib/python3.12/site-packages/pandas/tests/indexes/test_common.pytest_to_framezTestCommon.test_to_frame#   s     Hxx}1H\\x\(xx32::!###zz!}(((\\H\5xxs"""    c                    |}|j                  g       j                  |      sJ |j                  |j                  gfD ]b  }t        |j                  t              r||j                  u r,d}t        j                  t        |      5  |j                  |       d d d        d ddgfD ]7  }t        j                  t        d      5  |j                  |       d d d        9 y # 1 sw Y   xY w# 1 sw Y   PxY w)NzTCannot remove 1 levels from an index with 1 levels: at least one level must be left.matchwrongz>'Requested level \(wrong\) does not match index name \(None\)')		droplevelequalsr   
isinstancetuplepytestraises
ValueErrorKeyError)r   r   r   levelmsgs        r   test_droplevelzTestCommon.test_droplevel6   s     r"))%000jj5::,/ 		'E%**e,%**1D&  z5 '&' '		' wi' 	'EW ' &	' '	'' '' 's   C#C/#C,	/C8	c                    |}d}dgg}t        j                  t        |      5  |j                  |       d d d        t        j                  t        |      5  |j	                  |       d d d        y # 1 sw Y   @xY w# 1 sw Y   y xY w)Nz"Index.name must be a hashable type1r!   r   )names)r(   r)   	TypeErrorrename	set_names)r   r   r   messagerenameds        r   "test_constructor_non_hashable_namez-TestCommon.test_constructor_non_hashable_nameO   s    65' ]]9G4 	'LLgL&	' ]]9G4 	+OO'O*	+ 	+		' 	'	+ 	+s   A6B6A?Bc                     |} t        |      ||j                        }t        j                  |j                  |j                         y )Ndtype)typer:   tmassert_equal_data)r   r   abs       r   test_constructor_unwraps_indexz)TestCommon.test_constructor_unwraps_index^   s5     DGAQWW%
)r   c                 T    |}|j                         }t        j                  ||       y N)to_flat_indexr<   assert_index_equal)r   r   r   results       r   test_to_flat_indexzTestCommon.test_to_flat_indexe   s%    $$&
fe,r   c                    |}d}|j                   }|j                  |g      }|j                   |k(  sJ |j                   |k(  sJ |j                  |d      }|J |j                   |k(  sJ |j                  |gk(  sJ t	        j
                  t        d      5  |j                  dd       d d d        d	}|j                  |d       |j                   |k(  sJ |j                  |gk(  sJ y # 1 sw Y   BxY w)
Nz#This is the new name for this indexTinplacezLevel must be Noner!   r?   r   r,   )AB)r   r4   r3   r1   r(   r)   r*   )r   r   r   r   original_namenew_indresr   s           r   test_set_name_methodsz TestCommon.test_set_name_methodsl   s    8

//8*-||x'''zz]***ll8Tl2 {{zzX%%%{{xj(((]]:-AB 	*OOCqO)	* T4(zzT!!!{{tf$$$	* 	*s   C//C8c                     t        j                  t        d      5  |j                  d       d d d        y # 1 sw Y   y xY w)Nz	list-liker!   r?   )r(   r)   r2   r4   )r   r   s     r   $test_set_names_single_label_no_levelz/TestCommon.test_set_names_single_label_no_level   s3    ]]9K8 	&  %	& 	& 	&s	   7A c                     |}t         t        fD ]#  } ||      }||usJ |j                  |      r#J  |j                  dd      }|j                  dk(  sJ y )NTbanana)deepr   )r   r   r%   r   )r   r   r   funcidx_copynew_copys         r   test_copy_and_deepcopyz!TestCommon.test_copy_and_deepcopy   sj    8$ 	*DE{H5(((??5)))	*
 ::4h:7}}(((r   c                    |} t        |      |dd      } t        |      |d      }||usJ t        j                  ||       |j                  |      sJ |j                  dk(  sJ |j                  dk(  sJ t        j                  d|      }t        j                  d|d d	       }||z  }|j                  j                  dk(  sJ y )
NTmario)r   r   F)r      )r      )r;   r<   rE   r%   r   pdSeriesr   )r   r   r   firstseconds1s2s3s           r   test_copy_namezTestCommon.test_copy_name   s     UE7;eU/ F"""
eV, ||E"""zzW$$${{g%%% YYq&YYqs,"Wxx}}'''r   c                    |}|j                  d      j                  dk(  sJ t        j                  t        d      5  |j                  ddg       d d d        t        |      j                   d}t        j                  t        |      5  |j                  dgg       d d d        y # 1 sw Y   ZxY w# 1 sw Y   y xY w)Nr\   r   z$Length of new names must be 1, got 2r!   luigiz.name must be a hashable type)r   r   r(   r)   r*   r;   __name__r2   )r   r   r   r-   s       r   test_copy_name2zTestCommon.test_copy_name2   s    zzwz',,777]]:-ST 	0JJWg.J/	0 e%%&&CD]]9C0 	)JJgYKJ(	) 	)		0 	0	) 	)s   B-B9-B69Cc                    |}|j                         }d|j                  d fD ]*  }|j                  |      }t        j                  ||       , d}t        j                  t        |      5  |j                  d       d d d        dt        j                  |j                  j                                d}t        j                  t        |      5  |j                  d       d d d        y # 1 sw Y   qxY w# 1 sw Y   y xY w)	Nr   rK   z.Too many levels: Index has only 1 level, not 4r!   r^   z6Requested level \(wrong\) does not match index name \(z\)r#   )drop_duplicatesr   uniquer<   rE   r(   r)   
IndexErrorreescape__repr__r+   )r   r   r   expectedr,   rF   r-   s          r   test_unique_levelzTestCommon.test_unique_level   s     ((*T* 	4E\\\.F!!&(3	4 ?]]:S1 	"LLqL!	"))EJJ//12327 	 ]]83/ 	(LLwL'	( 	(	" 	"	( 	(s   ,C/C;/C8;Dc                 6   |}t        |      st        j                  d       |dgdz     }|dg   }|j                  du sJ 	 |j                  du sJ 	 |j                         }t        j                  ||t        |t                      |j                  st        j                  d       |j                  j                         dgdz     }t        j                  |d<   |d d }|j!                  |      }|j!                  |      }	|	j                  du sJ |j"                  |j"                  k(  sJ |	j"                  |j"                  k(  sJ |	}
t%        ||	g      D ]+  \  }}|j                         }t        j                  ||
       - y # t
        $ r Y Cw xY w)	Nz)Skip check for empty Index and MultiIndexr      TFexactz%Skip na-check if index cannot hold nar]   )r   r(   skip	is_uniquehasnansNotImplementedErrorrn   r<   rE   r&   r   _can_hold_na_valuesr   npnan_shallow_copyr:   	enumerate)r   r   r   r   
idx_uniquerF   valsvals_uniqueidx_nanidx_unique_nanrs   posis                r   test_uniquezTestCommon.test_unique   s   5zKKCDQC!GnA3Z
 ##t+++	%%... 
J*UJ*G&G	

 !!KK?@}}!!#QC!G,&&Q2Ah%%d+,,[9''4///}}+++##u{{222!. 9: 	4FCXXZF!!&(3	41 # 		s   F 	FFz*ignore:Period with BDay freq:FutureWarning3ignore:PeriodDtype\[B\] is deprecated:FutureWarningc                    |}t        |t        j                        r6t        j                  j                  dt              }|j                  |       |j                  rt        j                  d       |d   }d||k(  j                         }}|dk(  rt        |      }|j                  s|j                  ri|j                  |d      }||k(  sJ |j                  |d      }	||	k(  sJ |j                  |d      }
||
k(  sJ |j                  |d      }||k(  sJ y d}t        j                   t"        |	      5  |j                  |d       d d d        y # 1 sw Y   y xY w)
Nz8IntervalIndex.searchsorted does not support Interval arg)reasonr)   zSkip check for empty Indexr   left)siderightz0index must be monotonic increasing or decreasingr!   )r&   r`   IntervalIndexr(   markxfailr|   applymarkeremptyry   argminr   is_monotonic_increasingis_monotonic_decreasing_searchsorted_monotonicsearchsortedr)   r*   )r   r   requestr   r   valueexpected_leftexpected_rightssm_left	ssm_rightss_leftss_rightr-   s                r   test_searchsorted_monotonicz&TestCommon.test_searchsorted_monotonic   sq     eR--.;;$$Q* % D % ;;KK45a )*EUN+B+B+D~Q ZN((E,I,I44U4HH H,,,55e'5JI!Y...((V(<G G+++))%g)>H!X--- ECz5 B--e&-AB B Bs   <EE"c                    |}t        |t              rt        j                  d       t	        |      dk(  rt        j                  d       t        |      }t        t        |            }t        |      r|j                  nd } |||      }t	        |      }t        j                  j                  d      j                  |t        |dz              }	 ||j                  |	         }
t!        j"                  |	      j%                  |      j                  }t'        j(                  |
j%                  |      |        |t!        j"                  |
      j+                  |            }t'        j,                  |
j+                  |      |       y )NzWRangeIndex is tested in test_drop_duplicates_no_duplicates as it cannot hold duplicatesr   zXempty index is tested in test_drop_duplicates_no_duplicates as it cannot hold duplicatesr9   r]   g      ?)keep)r&   r   r(   ry   r   r;   listsetr   r:   r   randomdefault_rngchoiceintvaluesr`   ra   
duplicatedr<   assert_numpy_array_equalrm   rE   )r   r   r   r   holderunique_valuesr:   
unique_idxnduplicated_selectionr   expected_duplicatedexpected_droppeds                r   test_drop_duplicateszTestCommon.test_drop_duplicates%  sL    eZ(KK/ u:?KK/ eSZ(/6DM7
 
O!yy44Q7>>q#a#g,OZ&&';<= II*+66D6AHH 	 	##CNNN$=?RS ""))C."@"@d"@"KL
c11t1<>NOr   c                    |}t        |t              r|}nBt        |      }t        t	        |            }t        |      r|j                  nd } |||      }t        j                  dgt        |      z  d      }t        j                  |j                         |       |j                         }t        j                  ||       ||usJ y )Nr9   Fbool)r&   r   r;   r   r   r   r:   r   arrayr   r<   r   r   rm   rE   )	r   r   r   r   r   r   r:   r   result_droppeds	            r   "test_drop_duplicates_no_duplicatesz-TestCommon.test_drop_duplicates_no_duplicatesI  s      eZ(J%[F U,M#3E#:EKKEU;J !hhwZ'@O
##J$9$9$;=PQ#335
nj9Z///r   c                     d}t        j                  t        |      5  |j                  d       d d d        y # 1 sw Y   y xY w)Nz6drop_duplicates\(\) got an unexpected keyword argumentr!   TrI   )r(   r)   r2   rm   )r   r   r-   s      r   test_drop_duplicates_inplacez'TestCommon.test_drop_duplicates_inplace`  s;    G]]9C0 	0!!$!/	0 	0 	0s	   :Ac                     |}t        |      }t        |      rt        |t              rt	        j
                  d        ||d   gdz        }|j                  du sJ |j                  du sJ y )Nz6Skip check for empty Index, MultiIndex, and RangeIndexr   rv   FT)r;   r   r&   r   r(   ry   rz   has_duplicates)r   r   r   r   r   s        r   test_has_duplicateszTestCommon.test_has_duplicatese  sk     e5zZz: KKPQeAhZ!^$}}%%%!!T)))r   r:   )int64uint64float64categoryzdatetime64[ns]ztimedelta64[ns]c                    t        |t              r5t        |j                        D cg c]  }dt	        |      z    c}|_        nd|_        |j                  j                  dk(  r|dv rt        j                  j                  nd }t	        |j                        dk(  xr |dk(  }	 t        j                  ||d      5  |j                  |      }d d d        t        |t              rj
                  |j
                  k(  sJ y j                  |j                  k(  sJ y c c}w # 1 sw Y   VxY w# t        t         t"        t$        f$ r Y y w xY w)Nr   c)r   r   r   zstring[pyarrow]r   F)raise_on_extra_warningscheck_stacklevel)r&   r
   rangenlevelsstrr1   r   r:   kindr   
exceptionsComplexWarningr<   assert_produces_warningastyper*   r2   r|   SystemError)r   r   r:   r   warnis_pyarrow_strrF   s          r   test_astype_preserves_namez%TestCommon.test_astype_preserves_nameu  s'    eZ(383GHa53q6>HEKEJ {{3&54R+R MM(( 	 U[[)->>V5JCV		++(6!& -
 e,- eZ(<<5;;...;;%**,,,3 I- - I':KH 		s/   D &D1 >D%D1 %D.*D1 1EEc                    |}|j                  d      }t        j                  dgt        |      z  t              }t        j                  |j                  |       |j                  du sJ |j                  d      }|j                  }t        |      dk(  ry t        |j                        ry |j                  t        k(  ry t        j                  |d<    t        |      |      }t        j                  dgt        |      z  t              }d|d<   t        j                  |j                  |       |j                  du sJ y )NT)rV   Fr9   r   r   )r   r   r   r   r   r<   r   _isnanr{   r~   r   r:   r   r;   )r   r   r   r   rs   r   s         r   test_hasnans_isnanszTestCommon.test_hasnans_isnans  s    jjdj#88UGc#h.d;
##CJJ9{{e###jjdj#u:?ekk*[[D FFq	d5k&!88UGc#h.d;
##CJJ9{{d"""r   )rj   
__module____qualname__r(   r   parametrizer   r.   r7   rA   rG   rQ   r   rS   rZ   rg   rk   rt   r   filterwarningsr   r   r   r   r   r   r    r   r   r   r   "   sa   [[VdJ%78# 9#$'2+*-%0 [[& &
	)(2)(*(4T [[ LM[[ VW'B X N'BR [[ VW!P X!PF [[ VW0 X0,0
 [[ VW* X* [[W-	-<#r   r   r   na_positionmiddlec                     t        j                  t        d|       5  | j                  |       d d d        y # 1 sw Y   y xY w)Nzinvalid na_position: r!   r   )r(   r)   r*   sort_values)index_with_missingr   s     r   $test_sort_values_invalid_na_positionr     sD     
z+@)N	O @&&;&?@ @ @s	   ;Arb   lastc                 0   t        | t              r0|j                  t        j                  j                  dd             t        j                  | j                               }| | j                            j                  }t        j                  |      }|dk(  rt        j                  d g|z  |g      }nt        j                  |d g|z  g      } t        |       || j                        }| j                  |      }t!        j"                  ||       y )Nz,missing value sorting order not well-definedF)r   strictrb   r9   r   )r&   r	   r   r(   r   r   r   sumisnanotnar   sortconcatenater;   r:   r   r<   rE   )r   r   r   missing_countnot_na_valssorted_valuesrs   rF   s           r   test_sort_values_with_missingr     s     $&67KKEe  	
 FF-2245M$%7%=%=%?@GGKGGK(Mg(>'NOv7M'NO (t&'=O=U=UVH+++DF&(+r   c                      d t        j                  g d      } t        j                  g d      }| j                  fd      }t        j                  ||       y )Nc                 D    t        d | j                  d      D              S )Nc              3   2   K   | ]  }t        |        y wrC   )r   ).0xs     r   	<genexpr>zFtest_sort_values_natsort_key.<locals>.split_convert.<locals>.<genexpr>  s     2SV2s   .)r'   split)ss    r   split_convertz3test_sort_values_natsort_key.<locals>.split_convert  s    2QWWS\222r   )1.92.01.111.10)r   r   r   r   c                 .    t        t        |             S rC   )r'   map)r   r   s    r   <lambda>z.test_sort_values_natsort_key.<locals>.<lambda>  s    5]A1F+G r   )key)r`   Indexr   r<   rE   )r   rs   rF   r   s      @r   test_sort_values_natsort_keyr    sI    3 ((1
2Cxx67H__!G_HF&(+r   c                 :   t        | t              rt        st        j                  d       | }|j
                  j                  |      sJ |j                         j                  |      sJ |j                  }|j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ t        | t        t        f      s|j                  |j                  k(  sJ |j                   |j                  j                   y )NOverflow)r&   r   r   r(   ry   Tr%   	transposer   shapendimsizer   r
   nbytes)r   r   r   s      r   test_ndarray_compat_propertiesr    s    %%dJ
C55<<==?!!#&&&ZZF99$$$88v{{"""88v{{"""ej*56zzV]]*** JJJJr   c                      t        j                  g t              } d| j                  _        t        j                  |       }|dkD  }|j                  t        k(  sJ y )Nr9   FE   )	r   r   objectflags	writeabler`   r  r:   r   )arrr   rF   s      r   test_compare_read_only_arrayr    sF    
((2V
$CCII
((3-C2XF<<4r   c                      t        j                  dg      } | j                         j                  }t	        d      }t        j                  ||d       y )Nr   Trw   )r`   r  r   r   r   r<   rE   r   rF   rs   s      r   test_to_frame_column_rangeindexr    s=    
((A3-C\\^##F!}H&($7r   c                      t        j                  dg      } | j                  d      }t        j                  dgt	        j
                  dgdgg      |       }t        j                  ||       y )Nr   )r   r]   r   r]   )r   r   )r`   r  r   	DataFramer
   from_arraysr<   assert_frame_equalr  s      r   #test_to_frame_name_tuple_multiindexr  
  sY    
((A3-C\\v\&F||QC)?)?!qc
)KSVWH&(+r   c                      t        j                  ddg      } t        j                  g d      }t        j                  t
        d      5  | j                  |       d d d        y # 1 sw Y   y xY w)Nr   r]   )r   r]   r]   zPassing .* to .* is deprecatedr!   )r`   r  ra   r<   r   r   join)r   sers     r   test_join_series_deprecatedr    sX    
((Aq6
C
))I
C		#	#>
  	  s   
A%%A.)#__doc__r   r   rp   numpyr   r(   pandas.compatr   pandas.errorsr   pandas.core.dtypes.commonr   r   pandasr`   r	   r
   r   r   pandas._testing_testingr<   r   r   r   r   r   r   r  r  r  r  r  r  r   r   r   <module>r(     s    
    (
   Q# Q#h RSx(89@ : T@
 RS&(9:, ; T,4,, 8,r   