U
    sVcl1                     @   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   I/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/extension/json/test_json.pydtype   s    r	   c                  C   s.   t  } t| d t| d kr&t  } q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'   s    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   s    r   c                   C   s   t jS r   )operatoreqr   r   r   r   na_cmp<   s    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   st   |j jdkr\|j |j ksttjt|jt|j	|jd}tjt|jt|j	|jd}t
j||f|| d S )Njson)indexname)r	   r!   AssertionError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|| || f|| q^|j|d}|j|d}tj||f|| d S )NobjZ	DataFrameZcheck_column_typeequivcheck_namesTcheck_exactFcheck_categoricalz.columns)exactr0   r1   r2   r.   r   )columns)	getr'   Zassert_index_equalr4   Zdtypesr    r(   Zdropassert_frame_equal)r)   r*   r+   r,   r-   Zobj_typeZjsonscolr   r   r   r6   d   s     




zBaseJSON.assert_frame_equalN)__name__
__module____qualname__classmethodr(   r6   r   r   r   r   r   Q   s   
r   c                   @   s   e Zd ZdS )	TestDtypeNr8   r9   r:   r   r   r   r   r<   {   s   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|dddg}d}t	j
t|d	 | || W 5 Q R X t	j
t|d	 | | |  W 5 Q R X d S )
Nr   r
   r   r   r   r   r   zExtensionArray are differentmatch)r   collectionsUserDictr#   r$   r(   r6   Zto_frameZtakepytestraisesr"   )selfr   r   r   msgr   r   r   test_custom_asserts   s    
z!TestInterface.test_custom_assertsz:comparison method not implemented for JSONArray (GH-37867)reasonc                    s   t  | d S r   )supertest_containsrE   r   	__class__r   r   rK      s    zTestInterface.test_contains)	r8   r9   r:   rG   rC   markxfailrK   __classcell__r   r   rM   r   r>      s
   r>   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 dtyperH   c                    s   t | | d S r   )rJ   test_from_dtyperL   rM   r   r   rS      s    z TestConstructors.test_from_dtypezRecursionError, GH-33900c              	      s6   t  }zt d t || W 5 t | X d S Nd   )sysgetrecursionlimitsetrecursionlimitrJ   *test_series_constructor_no_data_with_indexrE   r	   r   	rec_limitrM   r   r   rY      s
    
z;TestConstructors.test_series_constructor_no_data_with_indexc              	      s6   t  }zt d t || W 5 t | X d S rT   )rV   rW   rX   rJ   ,test_series_constructor_scalar_na_with_indexrZ   rM   r   r   r\      s
    
z=TestConstructors.test_series_constructor_scalar_na_with_indexzcollection as scalar, GH-33901c              	      s6   t  }zt d t || W 5 t | X d S rT   )rV   rW   rX   rJ   )test_series_constructor_scalar_with_index)rE   r   r	   r[   rM   r   r   r]      s
    
z:TestConstructors.test_series_constructor_scalar_with_index)r8   r9   r:   rC   rO   rP   rS   rY   r\   r]   rQ   r   r   rM   r   rR      s   

rR   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 NArH   c                    s   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)rJ   
test_stackrE   rM   r   r   r_      s    zTestReshaping.test_stackzdict for NAc                    s   t  ||S r   )rJ   test_unstack)rE   r   r    rM   r   r   ra      s    zTestReshaping.test_unstack)	r8   r9   r:   rC   rO   rP   r_   ra   rQ   r   r   rM   r   r^      s   r^   c                   @   s   e Zd ZdS )TestGetitemNr=   r   r   r   r   rb      s   rb   c                   @   s   e Zd ZdS )	TestIndexNr=   r   r   r   r   rc      s   rc   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 scalarrH   c                    s   t    dS z;We treat dictionaries as a mapping in fillna, not a scalar.N)rJ   test_fillna_seriesr`   rM   r   r   rf      s    zTestMissing.test_fillna_seriesc                    s   t    dS re   )rJ   test_fillna_framer`   rM   r   r   rg      s    zTestMissing.test_fillna_frame)	r8   r9   r:   rC   rO   rP   rf   rg   rQ   r   r   rM   r   rd      s   rd   Z
UnhashablerH   c                   @   s   e Zd ZdS )
TestReduceNr=   r   r   r   r   rh      s   rh   c                       s*  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	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  ZS )"TestMethodsc                    s   t  || d S r   )rJ   test_value_counts)rE   Zall_dataZdropnarM   r   r   rj      s    zTestMethods.test_value_countsc                    s   t  | d S r   )rJ    test_value_counts_with_normalizerL   rM   r   r   rk      s    z,TestMethods.test_value_counts_with_normalizec                    s   t    d S r   )rJ   test_sort_values_framer`   rM   r   r   rl      s    z"TestMethods.test_sort_values_frame	ascendingTFc                    s   t  ||| d S r   )rJ   test_sort_values)rE   r   rm   sort_by_keyrM   r   r   rn      s    zTestMethods.test_sort_valuesc                    s   t  ||| d S r   )rJ   test_sort_values_missing)rE   r   rm   ro   rM   r   r   rp     s
      z$TestMethods.test_sort_values_missingz#combine for JSONArray not supportedrH   c                    s   t  | d S r   )rJ   test_combine_lerE   Zdata_repeatedrM   r   r   rq     s    zTestMethods.test_combine_lec                    s   t  | d S r   )rJ   test_combine_addrr   rM   r   r   rs     s    zTestMethods.test_combine_addzGcombine for JSONArray not supported - may pass depending on random data)rI   strictc                    s   t  | d S r   )rJ   test_combine_firstrL   rM   r   r   ru     s    zTestMethods.test_combine_firstc                    s   t  || d S r   )rJ   test_hash_pandas_object_works)rE   r   kindrM   r   r   rv     s    z)TestMethods.test_hash_pandas_object_workszbroadcasting errorc                    s   t  || d S r   )rJ   test_where_series)rE   r   r   rM   r   r   rx      s    zTestMethods.test_where_serieszCan't compare dicts.c                    s   t  | d S r   )rJ   test_searchsorted)rE   r   rM   r   r   ry   '  s    zTestMethods.test_searchsortedc                    s   t  ||| d S r   )rJ   test_equals)rE   r   r   Z	as_seriesrM   r   r   rz   +  s    zTestMethods.test_equals)r8   r9   r:   
unhashablerj   rk   rl   rC   rO   Zparametrizern   rp   rP   rq   rs   ru   rv   rx   ry   rz   rQ   r   r   rM   r   ri      s6   ri   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)rH   c                    s   t    dS )zThis currently fails in NumPy on np.array(self, dtype=str) with

        *** ValueError: setting an array element with a sequence
        N)rJ   test_astype_strr`   rM   r   r   r}   1  s    zTestCasting.test_astype_str)r8   r9   r:   rC   rO   rP   r}   rQ   r   r   rM   r   r|   0  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                    s   t    dS )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)rJ    test_groupby_extension_transformr`   rM   r   r   r   ?  s    z,TestGroupby.test_groupby_extension_transformc                    s   t    dS )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)rJ   test_groupby_extension_applyr`   rM   r   r   r   I  s    z(TestGroupby.test_groupby_extension_applyc                    s   t    dS z
        This fails when we get to tm.assert_series_equal when left.index
        contains dictionaries, which are not hashable.
        N)rJ   test_groupby_extension_aggr`   rM   r   r   r   V  s    z&TestGroupby.test_groupby_extension_aggc                    s   t    dS r   )rJ   test_groupby_extension_no_sortr`   rM   r   r   r   ^  s    z*TestGroupby.test_groupby_extension_no_sortz'GH#39098: Converts agg result to objectrH   c                    s   t  | d S r   )rJ   test_groupby_agg_extension)rE   r   rM   r   r   r   f  s    z&TestGroupby.test_groupby_agg_extension)r8   r9   r:   r{   r   r   r   r   rC   rO   rP   r   rQ   r   r   rM   r   r~   >  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 SeriesrH   )r   rC   rO   rP   nodeZ
add_markerrJ   test_arith_frame_with_scalar)rE   r   Zall_arithmetic_operatorsrequestrO   rM   r   r   r   l  s    z.TestArithmeticOps.test_arith_frame_with_scalarc              	   C   s0   t |}tjtdd ||  W 5 Q R X d S )Nunsupportedr?   )r#   r$   rC   rD   	TypeError)rE   r   Zserr   r   r   $test_add_series_with_extension_arrayr  s    
z6TestArithmeticOps.test_add_series_with_extension_arrayznot implementedrH   c                    s   t    d S r   )rJ   test_divmod_series_arrayr`   rM   r   r   r   w  s    z*TestArithmeticOps.test_divmod_series_arrayc                    s   t  j|||tdS )N)exc)rJ   _check_divmod_opr   )rE   sopotherr   rM   r   r   r   }  s    z"TestArithmeticOps._check_divmod_op)r8   r9   r:   r   r   rC   rO   rP   r   NotImplementedErrorr   rQ   r   r   rM   r   r   k  s
   r   c                   @   s   e Zd ZdS )TestComparisonOpsNr=   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )TestPrintingNr=   r   r   r   r   r     s   r   )8rA   r   rV   rC   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BaseInterfaceTestsr>   ZBaseConstructorsTestsrR   ZBaseReshapingTestsr^   ZBaseGetitemTestsrb   ZBaseIndexTestsrc   ZBaseMissingTestsrd   rO   rP   r{   ZBaseNoReduceTestsrh   ZBaseMethodsTestsri   ZBaseCastingTestsr|   ZBaseGroupbyTestsr~   ZBaseArithmeticOpsTestsr   ZBaseComparisonOpsTestsr   ZBasePrintingTestsr   r   r   r   r   <module>   sN   







*(>-