o
    d02                     @   s  d dl Z d dl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mZ ejdd Zejdd Zejdd	 Zejd
d Zejdd Zejdd Zejdd Zejdd ZG dd dZG dd dee
jZG dd dee
jZG dd dee
jZG dd dee
jZ G dd dee
j!Z"G d d! d!ee
j#Z$G d"d# d#ee
j%Z&ej'j(d$d%Z)G d&d' d'e
j*Z+G d(d) d)ee
j,Z-G d*d+ d+ee
j.Z/G d,d- d-ee
j0Z1G d.d/ d/ee
j2Z3G d0d1 d1ee
j4Z5G d2d3 d3ee
j6Z7dS )4    N)base)	JSONArray	JSONDtype	make_datac                   C   s   t  S N)r    r   r   Y/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/extension/json/test_json.pydtype      r	   c                  C   sD   t  } t| d t| d krt  } t| d t| d kst| S )z*Length-100 PeriodArray for semantics test.r      )r   lenr   )datar   r   r   r      s
   r   c                   C   s   t i ddigS )zLength 2 array with [NA, Valid]a
   r   r   r   r   r   data_missing'      r   c                   C   s   t ddiddidddgS )Nbr   c         r   r   r   r   r   r   r   data_for_sorting-   s   r   c                   C   s   t ddii ddigS )Nr   r   r   r   r   r   r   r   r   data_missing_for_sorting2   s   r   c                 C   s   | j S r   )na_value)r	   r   r   r   r   7   r
   r   c                   C   s   t jS r   )operatoreqr   r   r   r   na_cmp<   r
   r   c                
   C   s4   t ddiddii i ddddddddiddigS )Nr   r   r   r   r   r   r   r   r   r   r   data_for_groupingA   s   r   c                   @   s$   e Zd Zedd Zedd ZdS )BaseJSONc                 O   sz   |j jdkr.|j |j ksJ tjt|jt|j|jd}tjt|jt|j|jd}t	j
||g|R i | d S )Njson)indexname)r	   r#   pdSeriesr   valuesZastypeobjectr"   tmassert_series_equal)clsleftrightargskwargsr   r   r   r)   V   s   zBaseJSON.assert_series_equalc              
   O   s   | dd}tj|j|j| dd| dd| dd| d	d| d
d |jdkj}|D ]}| j|| || g|R i | q/|j|d}|j|d}tj||g|R i | d S )NobjZ	DataFrameZcheck_column_typeequivcheck_namesTcheck_exactFcheck_categoricalz.columns)exactr1   r2   r3   r/   r!   )columns)	getr(   Zassert_index_equalr5   Zdtypesr"   r)   Zdropassert_frame_equal)r*   r+   r,   r-   r.   obj_typeZjsonscolr   r   r   r7   d   s    




$zBaseJSON.assert_frame_equalN)__name__
__module____qualname__classmethodr)   r7   r   r   r   r   r    Q   s
    
r    c                   @      e Zd ZdS )	TestDtypeNr:   r;   r<   r   r   r   r   r?   {       r?   c                       s2   e Zd Zdd Zejjdd fddZ  ZS )TestInterfacec                 C   s   t tdditdditddig}t|}| || | | |  t|g d}d}t	j
t|d	 | || W d    n1 sOw   Y  t	j
t|d	 | | |  W d    d S 1 sqw   Y  d S )
Nr   r   r   r   r   r   )r   r   r   zSeries are differentmatch)r   collectionsUserDictr$   r%   r)   r7   Zto_frameZtakepytestraisesAssertionError)selfr   r   r   msgr   r   r   test_custom_asserts   s"   
"z!TestInterface.test_custom_assertsz:comparison method not implemented for JSONArray (GH-37867)reasonc                       t  | d S r   )supertest_containsrJ   r   	__class__r   r   rQ      s   zTestInterface.test_contains)	r:   r;   r<   rL   rG   markxfailrQ   __classcell__r   r   rS   r   rB      s    rB   c                       sx   e Zd Zejjdd fddZejjdd fddZejjdd fdd	Zejjd
d fddZ	  Z
S )TestConstructorsz&not implemented constructor from dtyperM   c                    rO   r   )rP   test_from_dtyperR   rS   r   r   rY      r   z TestConstructors.test_from_dtypezRecursionError, GH-33900c              	      >   t  }zt d t || W t | d S t | w Nd   )sysgetrecursionlimitsetrecursionlimitrP   *test_series_constructor_no_data_with_indexrJ   r	   r   	rec_limitrS   r   r   r`      
   
z;TestConstructors.test_series_constructor_no_data_with_indexc              	      rZ   r[   )r]   r^   r_   rP   ,test_series_constructor_scalar_na_with_indexra   rS   r   r   rd      rc   z=TestConstructors.test_series_constructor_scalar_na_with_indexzcollection as scalar, GH-33901c              	      rZ   r[   )r]   r^   r_   rP   )test_series_constructor_scalar_with_index)rJ   r   r	   rb   rS   r   r   re      rc   z:TestConstructors.test_series_constructor_scalar_with_index)r:   r;   r<   rG   rU   rV   rY   r`   rd   re   rW   r   r   rS   r   rX      s    

rX   c                       sD   e Zd Zejjdd fddZejjdd fddZ  ZS )TestReshapingzDifferent definitions of NArM   c                       t    dS )z
        The test does .astype(object).stack(). If we happen to have
        any missing values in `data`, then we'll end up with different
        rows since we consider `{}` NA, but `.astype(object)` doesn't.
        N)rP   
test_stackrJ   rS   r   r   rh      s   zTestReshaping.test_stackzdict for NAc                    s   t  ||S r   )rP   test_unstack)rJ   r   r"   rS   r   r   rj         zTestReshaping.test_unstack)	r:   r;   r<   rG   rU   rV   rh   rj   rW   r   r   rS   r   rf      s
    rf   c                   @   r>   )TestGetitemNr@   r   r   r   r   rl      rA   rl   c                   @   r>   )	TestIndexNr@   r   r   r   r   rm      rA   rm   c                       sD   e Zd Zejjdd fddZejjdd fddZ  ZS )TestMissingzSetting a dict as a scalarrM   c                    rg   z;We treat dictionaries as a mapping in fillna, not a scalar.N)rP   test_fillna_seriesri   rS   r   r   rp         zTestMissing.test_fillna_seriesc                    rg   ro   )rP   test_fillna_frameri   rS   r   r   rr      rq   zTestMissing.test_fillna_frame)	r:   r;   r<   rG   rU   rV   rp   rr   rW   r   r   rS   r   rn      s
    rn   Z
UnhashablerM   c                   @   r>   )
TestReduceNr@   r   r   r   r   rs      rA   rs   c                       sD  e Zd Ze fddZe fddZe fddZej	ddd	g fd
dZ
ej	ddd	g fddZejjdd fddZejjdd fddZejjdd	ed fddZe fddZejjdd fddZejjdd fddZejjdd fd d!Zejd" fd#d$Z  ZS )%TestMethodsc                       t  || d S r   )rP   test_value_counts)rJ   Zall_dataZdropnarS   r   r   rv         zTestMethods.test_value_countsc                    rO   r   )rP    test_value_counts_with_normalizerR   rS   r   r   rx         z,TestMethods.test_value_counts_with_normalizec                       t    d S r   )rP   test_sort_values_frameri   rS   r   r   r{      rq   z"TestMethods.test_sort_values_frame	ascendingTFc                       t  ||| d S r   )rP   test_sort_values)rJ   r   r|   sort_by_keyrS   r   r   r~         zTestMethods.test_sort_valuesc                    r}   r   )rP   test_sort_values_missing)rJ   r   r|   r   rS   r   r   r     s   z$TestMethods.test_sort_values_missingz#combine for JSONArray not supportedrM   c                    rO   r   )rP   test_combine_lerJ   Zdata_repeatedrS   r   r   r     ry   zTestMethods.test_combine_lec                    rO   r   )rP   test_combine_addr   rS   r   r   r     ry   zTestMethods.test_combine_addzGcombine for JSONArray not supported - may pass depending on random data)rN   strictrH   c                    rO   r   )rP   test_combine_firstrR   rS   r   r   r     s   zTestMethods.test_combine_firstc                    ru   r   )rP   test_hash_pandas_object_works)rJ   r   kindrS   r   r   r     rw   z)TestMethods.test_hash_pandas_object_workszbroadcasting errorc                    ru   r   )rP   test_where_series)rJ   r   r   rS   r   r   r   !  s   zTestMethods.test_where_serieszCan't compare dicts.c                    rO   r   )rP   test_searchsorted)rJ   r   rS   r   r   r   (  ry   zTestMethods.test_searchsortedc                    r}   r   )rP   test_equals)rJ   r   r   Z	as_seriesrS   r   r   r   ,  r   zTestMethods.test_equalsz-fill-value is interpreted as a dict of valuesc                    rO   r   )rP   test_fillna_copy_frame)rJ   r   rS   r   r   r   0  ry   z"TestMethods.test_fillna_copy_frame)r:   r;   r<   
unhashablerv   rx   r{   rG   rU   Zparametrizer~   r   rV   r   r   rI   r   r   r   r   r   skipr   rW   r   r   rS   r   rt      s>    
rt   c                       s*   e Zd Zejjdd fddZ  ZS )TestCastingz$failing on np.array(self, dtype=str)rM   c                    rg   )zThis currently fails in NumPy on np.array(self, dtype=str) with

        *** ValueError: setting an array element with a sequence
        N)rP   test_astype_strri   rS   r   r   r   6     zTestCasting.test_astype_str)r:   r;   r<   rG   rU   rV   r   rW   r   r   rS   r   r   5  s    r   c                       sj   e Zd Ze fddZe fddZe fddZe fddZej	j
d	d
 fddZ  ZS )TestGroupbyc                    rg   )a  
        This currently fails in Series.name.setter, since the
        name must be hashable, but the value is a dictionary.
        I think this is what we want, i.e. `.name` should be the original
        values, and not the values for factorization.
        N)rP    test_groupby_extension_transformri   rS   r   r   r   D  s   z,TestGroupby.test_groupby_extension_transformc                    rg   )z
        This fails in Index._do_unique_check with

        >   hash(val)
        E   TypeError: unhashable type: 'UserDict' with

        I suspect that once we support Index[ExtensionArray],
        we'll be able to dispatch unique.
        N)rP   test_groupby_extension_applyri   rS   r   r   r   N  s   z(TestGroupby.test_groupby_extension_applyc                    rg   z
        This fails when we get to tm.assert_series_equal when left.index
        contains dictionaries, which are not hashable.
        N)rP   test_groupby_extension_aggri   rS   r   r   r   [  r   z&TestGroupby.test_groupby_extension_aggc                    rg   r   )rP   test_groupby_extension_no_sortri   rS   r   r   r   c  r   z*TestGroupby.test_groupby_extension_no_sortz'GH#39098: Converts agg result to objectrM   c                    rO   r   )rP   test_groupby_agg_extension)rJ   r   rS   r   r   r   k  ry   z&TestGroupby.test_groupby_agg_extension)r:   r;   r<   r   r   r   r   r   rG   rU   rV   r   rW   r   r   rS   r   r   C  s    	r   c                       sN   e Zd Z fddZdd Zejjdd fddZe	f fd	d
	Z
  ZS )TestArithmeticOpsc                    s<   t |d dkrtjjdd}|j| t || d S )Nr   r   zraises in coercing to SeriesrM   )r   rG   rU   rV   nodeZ
add_markerrP   test_arith_frame_with_scalar)rJ   r   Zall_arithmetic_operatorsrequestrU   rS   r   r   r   q  s   z.TestArithmeticOps.test_arith_frame_with_scalarc                 C   sF   t |}tjtdd ||  W d    d S 1 sw   Y  d S )NunsupportedrC   )r$   r%   rG   rH   	TypeError)rJ   r   Zserr   r   r   $test_add_series_with_extension_arrayw  s   

"z6TestArithmeticOps.test_add_series_with_extension_arrayznot implementedrM   c                    rz   r   )rP   test_divmod_series_arrayri   rS   r   r   r   |  rk   z*TestArithmeticOps.test_divmod_series_arrayc                    s   t  j|||tdS )N)exc)rP   _check_divmod_opr   )rJ   sopotherr   rS   r   r   r     s   z"TestArithmeticOps._check_divmod_op)r:   r;   r<   r   r   rG   rU   rV   r   NotImplementedErrorr   rW   r   r   rS   r   r   p  s    r   c                   @   r>   )TestComparisonOpsNr@   r   r   r   r   r     rA   r   c                   @   r>   )TestPrintingNr@   r   r   r   r   r     rA   r   )8rE   r   r]   rG   Zpandasr$   Zpandas._testingZ_testingr(   Zpandas.tests.extensionr   Z!pandas.tests.extension.json.arrayr   r   r   Zfixturer	   r   r   r   r   r   r   r   r    ZBaseDtypeTestsr?   ZBaseInterfaceTestsrB   ZBaseConstructorsTestsrX   ZBaseReshapingTestsrf   ZBaseGetitemTestsrl   ZBaseIndexTestsrm   ZBaseMissingTestsrn   rU   rV   r   ZBaseNoReduceTestsrs   ZBaseMethodsTestsrt   ZBaseCastingTestsr   ZBaseGroupbyTestsr   ZBaseArithmeticOpsTestsr   ZBaseComparisonOpsTestsr   ZBasePrintingTestsr   r   r   r   r   <module>   sP    







*(C-