
    .i>                        d Z ddlZddlZddlmZ ddlZddlm	Z
 ddlmZ ddlmZ ddlmZ e
j"                  Zddedefd	Z ej*                  d
dg      d        Zej*                  d        Zej*                  d        Zej*                  d        Zej*                  d        Zej*                  d        Zej*                  d        Zej*                  d        Zej*                  d        Zej*                  d        Zej@                  jC                  d      Z" G d dejF                        Z$ G d dejJ                        Z&y)a  
This file contains a minimal set of tests for compliance with the extension
array interface test suite, and should contain no other tests.
The test suite for the full functionality of the array is located in
`pandas/tests/arrays/`.

The tests in this file are inherited from the BaseExtensionTests, and only
minimal tweaks should be applied to get the tests passing (by overwriting a
parent method).

Additional tests should either be added to one of the BaseExtensionTests
classes (if they are relevant for the extension interface for all dtypes), or
be added to the array-specific tests in `pandas/tests/arrays/`.

Note: we do not bother with base.BaseIndexTests because NumpyExtensionArray
will never be held in an Index.
    N)NumpyEADtype)is_object_dtype)NumpyExtensionArray)baseattrobjc                 L   | dk(  rt        |dd      }t        |dd      }t        |t              r,t        |t              s|j                  |j                        }n;t        |t              r+t        |t              s|j                  |j                        }t        | |||       y)zi
    patch tm.assert_attr_equal so NumpyEADtype("object") is closed enough to
    np.dtype("object")
    dtypeN)getattr
isinstancer   astypenumpy_dtypeorig_assert_attr_equal)r   leftrightr   lattrrattrs         _/var/www/app/trading-bot/venv/lib/python3.12/site-packages/pandas/tests/extension/test_numpy.py_assert_attr_equalr   !   s    
 wgt,w-e\*:e\3R;;u001D|,Z|5TLL!2!23E4uc2    floatobject)paramsc                 R    t        t        j                  | j                              S N)r   npr
   param)requests    r   r
   r
   1   s    /00r   c              #      K   | j                         5 }|j                  t        dd       |j                  t        j                  dt
               d ddd       y# 1 sw Y   yxY ww)a  
    A monkeypatch to tells pandas to let us in.

    By default, passing a NumpyExtensionArray to an index / series / frame
    constructor will unbox that NumpyExtensionArray to an ndarray, and treat
    it as a non-EA column. We don't want people using EAs without
    reason.

    The mechanism for this is a check against ABCNumpyExtensionArray
    in each constructor.

    But, for testing, we need to allow them in pandas. So we patch
    the _typ of NumpyExtensionArray, so that we evade the ABCNumpyExtensionArray
    check.
    _typ	extensionassert_attr_equalN)contextsetattrr   tm	assertersr   )monkeypatchms     r   allow_in_pandasr)   6   sT     " 
			 !			%v{;			",, 35GH  s   A)AA	A)A&"A)c                    |j                   dk(  rBt        j                  t        d      D cg c]  }|f c}      j                  }t        |      S t        j                  dd|j                        }t        |      S c c}w )Nr   
         r
   )	r   pdSeriesrange_valuesr   arange_dtyper   )r)   r
   iarrs       r   datar7   M   sj    H$iiuRy1!!12:: s## ii2U\\2s## 2s   
A?c                     |j                   dk(  r4t        t        j                  t        j                  dgt
                    S t        t        j                  t        j                  dg            S )Nr   r,   r.   g      ?r   r   r   arraynanr   r)   r
   s     r   data_missingr>   V   sJ    H$"288RVVTN&#IJJrxx677r   c                      d } | S )Nc                 Z    t        j                  |       xr t        j                  |      S r   )r   isnan)abs     r   cmpzna_cmp.<locals>.cmp_   s    xx{*rxx{*r    )rD   s    r   na_cmprF   ]   s    + Jr   c                     |j                   dk(  r)t        t        j                  g dt              dd       S t        t        j                  g d            S )ziLength-3 array with a known sort order.

    This should be three items [B, C, A] with
    A < B < C
    r   )rE         r9   r.   r,   N)r,   rI   r   )r   r   r   r;   r   r=   s     r   data_for_sortingrL   e   sH     H$ #288,B&#QRSRT#UVVrxx	233r   c                     |j                   dk(  r5t        t        j                  dt        j                  dgt
                    S t        t        j                  dt        j                  dg            S )zvLength-3 array with a known sort order.

    This should be three items [B, NA, A] with
    A < B and NA missing.
    r   r9   )r   r.   r,   r   r:   r=   s     r   data_missing_for_sortingrN   s   sQ     H$"288T2664,@#OPPrxxBFFA788r   c                     |j                   dk(  rd\  }}}nt        j                  d      \  }}}t        t        j                  ||t        j
                  t        j
                  ||||g|j                               S )zData for factorization, grouping, and unique tests.

    Expected to be like [B, B, NA, NA, A, A, B, C]

    Where A < B < C and NA is missing
    r   )r9   rH   rJ   rK   r.   )r   r   r3   r   r;   r<   )r)   r
   rB   rC   cs        r   data_for_groupingrQ      sj     H$"1a))A,1a
!Q1a35;L;LM r   c                     | j                   dk(  rt        j                  |  d       t        j                  d      dz  }t        j                  ||       S )NOz is not a numeric dtyper+   rI   r.   )kindpytestskipr   onesr   _from_sequence)r
   r6   s     r   data_for_twosrY      sF    zzSug456
''"+/C--c??r   c                 r    | dk(  r2t         j                  j                  d      }|j                  |       yy)a  
    Tests for NumpyExtensionArray with nested data. Users typically won't create
    these objects via `pd.array`, but they can show up through `.array`
    on a Series with nested data. Many of the base tests fail, as they aren't
    appropriate for nested data.

    This fixture allows these tests to be skipped when used as a usefixtures
    marker to either an individual test or a test class.
    r   zFails for object dtypereasonN)rU   markxfailapplymarker)r
   r   r]   s      r   skip_numpy_objectr`      s7     {{  (@ AD! r   r`   c            
           e Zd Zej                  j                  d      d        Ze fd       Z fdZ	 fdZ
e fd       Ze fd       Ze fd	       Ze fd
       Ze fd       Ze fd       Ze fd       Zej                  j%                  d       fd       Z fdZe fd       ZdZdZdZdZ fdZd Z fdZ fdZ fdZdej@                  de!de"fdZ#dej@                  de!de"fdZ$ej                  j                  d      ej                  jK                  ddd g      d!               Z&e fd"       Z'e fd#       Z(e fd$       Z)e fd%       Z*e fd&       Z+eej                  jK                  d'd(dg       fd)              Z,e fd*       Z-eej                  jK                  d+ e.j^                  g d,       ej^                  g d,d-.      gd/d0g1       fd2              Z0eej                  jK                  d3g d4 ej^                  g d4d5.       e.j^                  g d4      gg d61       fd7              Z1e fd8       Z2e fd9       Z3d: Z4ej                  j%                  d;       fd<       Z5eej                  jK                  d=d>d?g       fd@              Z6 fdAZ7 xZ8S )BTestNumpyExtensionArrayzWe don't register our dtyper[   c                      y r   rE   )selfr7   s     r   test_from_dtypez'TestNumpyExtensionArray.test_from_dtype        	r   c                 &    t         |   ||       y r   )super)test_series_constructor_scalar_with_index)rd   r7   r
   	__class__s      r   ri   zATestNumpyExtensionArray.test_series_constructor_scalar_with_index   s     	9$Fr   c                     |j                   j                  dk(  rF|j                  t        j                  j                  d|j                   j                                t        |   |       y )Nr   z:NumpyExtensionArray expectedly clashes with a NumPy name: r[   )r
   r   r_   rU   r]   r^   rh   test_check_dtype)rd   r7   r   using_infer_stringrj   s       r   rl   z(TestNumpyExtensionArray.test_check_dtype   sc    ::!!X-!!##'::#9#9":< "  	 &r   c                 ^    |j                   dk(  rt        |      sJ y t        |   |       y )Nr   )r   r   rh   test_is_not_object_type)rd   r
   r   rj   s      r   ro   z/TestNumpyExtensionArray.test_is_not_object_type   s.    ( #5)))G+E2r   c                 $    t         |   |       y r   )rh   test_getitem_scalarrd   r7   rj   s     r   rq   z+TestNumpyExtensionArray.test_getitem_scalar   s     	#D)r   c                 $    t         |   |       y r   )rh   test_shift_fill_valuerr   s     r   rt   z-TestNumpyExtensionArray.test_shift_fill_value   s     	%d+r   c                 $    t         |   |       y r   )rh   test_fillna_limit_framerd   r>   rj   s     r   rv   z/TestNumpyExtensionArray.test_fillna_limit_frame   s     	'5r   c                 $    t         |   |       y r   )rh   test_fillna_limit_seriesrw   s     r   ry   z0TestNumpyExtensionArray.test_fillna_limit_series   s     	(6r   c                 $    t         |   |       y r   )rh   test_fillna_copy_framerw   s     r   r{   z.TestNumpyExtensionArray.test_fillna_copy_frame   s     	&|4r   c                 $    t         |   |       y r   )rh   test_fillna_copy_seriesrw   s     r   r}   z/TestNumpyExtensionArray.test_fillna_copy_series   s     	'5r   c                 &    t         |   ||       y r   )rh   test_searchsorted)rd   rL   	as_seriesrj   s      r   r   z)TestNumpyExtensionArray.test_searchsorted   s    
 	!"2I>r   z*NumpyExtensionArray.diff may fail on dtypec                 $    t         |   ||      S r   )rh   	test_diff)rd   r7   periodsrj   s      r   r   z!TestNumpyExtensionArray.test_diff   s    w w//r   c                     |j                   j                  t        k(  r1t        j                  j                  d      }|j                  |       t        | !  |       y )Nz$Dimension mismatch in np.concatenater[   )	r
   r   r   rU   r]   r^   r_   rh   test_insertrd   r7   r   r]   rj   s       r   r   z#TestNumpyExtensionArray.test_insert   sH    ::!!V+;;$$,R$SD%D!r   c                 &    t         |   ||       y r   )rh   test_insert_invalidrd   r7   invalid_scalarrj   s      r   r   z+TestNumpyExtensionArray.test_insert_invalid   s     	#D.9r   Nc                 t    d }|j                   j                  dk(  rt        }|| _        t        |   |       y NrS   )r
   rT   	TypeError
divmod_excrh   test_divmod)rd   r7   r   rj   s      r   r   z#TestNumpyExtensionArray.test_divmod  s1    
::??c!"J$D!r   c                     t        j                  |      }d }|j                  j                  dk(  rt        }|| _        | j                  |t        |       y r   )r/   r0   r
   rT   r   r   _check_divmod_opdivmod)rd   r7   serexcs       r   test_divmod_series_arrayz0TestNumpyExtensionArray.test_divmod_series_array  sB    iio::??c!C!DOc640r   c                     |}d }|j                   j                  t        k(  rE|dv r;t        j                  j                  d      }|j                  j                  |       t        }|| _	        t        | -  ||       y N)__mul____rmul__z9the Series.combine step raises but not the Series method.r[   )r
   r   r   rU   r]   r^   node
add_markerr   series_scalar_excrh   test_arith_series_with_scalar)rd   r7   all_arithmetic_operatorsr   opnamer   r]   rj   s          r   r   z5TestNumpyExtensionArray.test_arith_series_with_scalar  sw    ) ::!!V+00{{((V )  ''- )!2-d4LMr   c                     |}d }|j                   j                  t        k(  r
|dvrt        }|| _        t
        |   ||       y )N)__add____radd__)r
   r   r   r   series_array_excrh   test_arith_series_with_array)rd   r7   r   r   r   rj   s        r   r   z4TestNumpyExtensionArray.test_arith_series_with_array   sF    )::!!V+>U0U( 0,T3KLr   c                     |}d }|j                   j                  t        k(  rE|dv r;t        j                  j                  d      }|j                  j                  |       t        }|| _	        t        | -  ||       y r   )r
   r   r   rU   r]   r^   r   r   r   frame_scalar_excrh   test_arith_frame_with_scalar)rd   r7   r   r   r   r   r]   rj   s          r   r   z4TestNumpyExtensionArray.test_arith_frame_with_scalar(  sw    )::!!V+00{{((V )  ''-( 0,T3KLr   r   op_namereturnc                 >    |j                   j                  dk(  r|dv S y)NrS   )summinmaxanyallT)r
   rT   )rd   r   r   s      r   _supports_reductionz+TestNumpyExtensionArray._supports_reduction5  s!    99>>S AAAr   skipnac                     t        ||      }|j                  j                  }|j                  |      }t        ||      }|dk(  r |       } |       }	n ||      } ||      }	t	        j
                  ||	       y )Ncount)r   )r   r
   r   r   r%   assert_almost_equal)
rd   r   r   r   res_op	cmp_dtypealtexp_opresultexpecteds
             r   check_reducez$TestNumpyExtensionArray.check_reduce:  ss    g& II))	jj#g&gXFxH6*FV,H
vx0r   zTODO: tests not written yetTFc                      y r   rE   )rd   r7   all_numeric_reductionsr   s       r   test_reduce_framez)TestNumpyExtensionArray.test_reduce_frameJ  rf   r   c                 $    t         |   |       y r   )rh   test_fillna_seriesrw   s     r   r   z*TestNumpyExtensionArray.test_fillna_seriesO  s     	"<0r   c                 $    t         |   |       y r   )rh   test_fillna_framerw   s     r   r   z)TestNumpyExtensionArray.test_fillna_frameT  s     	!,/r   c                 $    t         |   |       y r   )rh   test_fillna_readonlyrw   s     r   r   z,TestNumpyExtensionArray.test_fillna_readonlyY  s     	$\2r   c                 &    t         |   ||       y r   )rh   test_setitem_invalidr   s      r   r   z,TestNumpyExtensionArray.test_setitem_invalid^  s     	$T>:r   c                 &    t         |   ||       y r   )rh    test_setitem_sequence_broadcastsrd   r7   box_in_seriesrj   s      r   r   z8TestNumpyExtensionArray.test_setitem_sequence_broadcastsc  s     	0}Er   setterlocc                 &    t         |   ||       y r   )rh   test_setitem_mask_broadcast)rd   r7   r   rj   s      r   r   z3TestNumpyExtensionArray.test_setitem_mask_broadcasti  s    
 	+D&9r   c                 $    t         |   |       y r   )rh   &test_setitem_scalar_key_sequence_raiserr   s     r   r   z>TestNumpyExtensionArray.test_setitem_scalar_key_sequence_raisep  s     	6t<r   mask)TTTFFbooleanr.   numpy-arrayzboolean-array)idsc                 (    t         |   |||       y r   )rh   test_setitem_mask)rd   r7   r   r   rj   s       r   r   z)TestNumpyExtensionArray.test_setitem_maskx  s     	!$m<r   idx)r   r,   rI   Int64)listzinteger-arrayr   c                 (    t         |   |||       y r   )rh   test_setitem_integer_array)rd   r7   r   r   rj   s       r   r   z2TestNumpyExtensionArray.test_setitem_integer_array  s     	*4mDr   c                 &    t         |   ||       y r   )rh   test_setitem_slicer   s      r   r   z*TestNumpyExtensionArray.test_setitem_slice  s    "47r   c                 $    t         |   |       y r   )rh   test_setitem_loc_iloc_slicerr   s     r   r   z3TestNumpyExtensionArray.test_setitem_loc_iloc_slice  s    +D1r   c                    t        j                  dt        j                  |      i      x}}t        j                  |j                        } ||      }|d   |j                  |df<   |j
                  j                  t        k7  rCt        |t              r|t        d       k7  r%t        j                  d|j                         i      }t        j                  ||d       y )Nr7   )indexF)check_column_type)r/   	DataFramer0   r   r   r
   r   r   r   sliceto_numpyr%   assert_frame_equal)rd   r7   full_indexerdfr   r   keys          r   ,test_setitem_with_expansion_dataframe_columnzDTestNumpyExtensionArray.test_setitem_with_expansion_dataframe_column  s    fbiio%>??XBHH- 2"$V*

3; ::!!V+c5)SE$K-?<<(AB
fh%Hr   zNumpyEADtype is unpackedc                 $    t         |   |       y r   )rh   #test_index_from_listlike_with_dtyperr   s     r   r   z;TestNumpyExtensionArray.test_index_from_listlike_with_dtype  s    3D9r   enginerP   pythonc                 (    t         |   |||       y r   )rh   test_EA_types)rd   r   r7   r   rj   s       r   r   z%TestNumpyExtensionArray.test_EA_types  s     	fdG4r   c                     t        |d   t              r1t        j                  j	                  d      }|j                  |       t        |   |       y )NzUnpacks tupler[   )r   tuplerU   r]   r^   r_   rh   8test_loc_setitem_with_expansion_preserves_ea_index_dtyper   s       r   r   zPTestNumpyExtensionArray.test_loc_setitem_with_expansion_preserves_ea_index_dtype  sC    d2h&;;$$O$<D%HNr   )9__name__
__module____qualname__rU   r]   rV   re   skip_nestedri   rl   ro   rq   rt   rv   ry   r{   r}   r   r^   r   r   r   r   r   r   r   r   r   r   r   r   r/   r0   strboolr   r   parametrizer   r   r   r   r   r   r   r   r   r;   r   r   r   r   r   r   r   r   __classcell__)rj   s   @r   rb   rb      s   [[:; < G G'3 * * , , 6 6
 7 7
 5 5 6 6 ? ? [[JK0 L0" : : J"1NMMryy 3 4 
1		 1C 1 1  [[34[[Xe}5 6 5 1 1 0 0 3 3 ; ; F F
 [[Xt}5: 6 :
 = = [[BHH56BHH5YG	
 O,  = = [[	HBHHYg68KL4  
E E 8 8 2 2I" [[89: :: [[XX75 8 5O Or   rb   c                       e Zd Zy)Test2DCompatN)r   r   r   rE   r   r   r   r     s    r   r   )
Attributes)'__doc__numpyr   rU   pandas.core.dtypes.dtypesr   pandasr/   pandas._testing_testingr%   pandas.api.typesr   pandas.core.arrays.numpy_r   pandas.tests.extensionr   r"   r   r   r   fixturer
   r)   r7   r>   rF   rL   rN   rQ   rY   r`   r]   usefixturesr   ExtensionTestsrb   NDArrayBacked2DTestsr   rE   r   r   <module>r     s  $   2   , 9 '-- 3S 3C 3  *+1 ,1  , $ $ 8 8   
4 
4 9 9    @ @ " " kk%%&9:HOd11 HOV	4,, 	r   