o
    ŀgF                     @   s   d dl Z 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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ejZdd Zdd Zdd Z dS )    N)base)	JSONArray	JSONDtype	make_data
Unhashablereasonc                   C   s   t  S N)r    r
   r
   Y/var/www/html/myenv/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_sorting2   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_sorting7   s   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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	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ejjdd fddZejddg dg dfdg dg dfdg dg d fdg d!g d"fd#g dg d$fd#g dg d$fd#g dg dfd#g d!g dfg fd%d&Ze fd'd(Ze fd)d*Ze fd+d,Zejd-d.d/g fd0d1Zejd-d.d/g fd2d3Zejjd4d fd5d6Zejjd7d/ed8 fd9d: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dAdBZejdC fdDdEZ fdFdGZejjdHd fdIdJZ e fdKdLZ!e fdMdNZ"e fdOdPZ#e fdQdRZ$ fdSdTZ% fdUdVZ&ejjdWd fdXdYZ'ejjdWd fdZd[Z(ejjdWd fd\d]Z)ejjdWd fd^d_Z*ejjd`e+,g dae-j,g dadbdce-j,d.d.d.e-j.e-j.gdbdcgg ddde fdfdgZ/ fdhdiZ0ejjdjd fdkdlZ1ejjdmg dne-j,g dndodce+,g dngg dpde fdqdrZ2ejjdsdejjdtdudvdwe-j.gd/fej3dudvdwe-j.gd.ejjdxddye-j,dudvdwe-j.gdodcd/fe-j,dudvdwe-j.gdodcd/fgg dzde fd{d|Z4ejjd}d fd~dZ5 fddZ6ejjdd fddZ7ejjdjdejdddg fddZ8ejjdd fddZ9ejjdd fddZ:ejjdd fddZ;ejjdd fddZ<ejjdd fddZ=ejjdd fddZ>ejjddejdddg fddZ?  Z@S )TestJSONArrayz:comparison method not implemented for JSONArray (GH-37867)r   c                       t  | d S r	   )supertest_containsselfr   	__class__r
   r   r%   R   s   zTestJSONArray.test_containsz&not implemented constructor from dtypec                    r#   r	   )r$   test_from_dtyper&   r(   r
   r   r*   Y   r   zTestJSONArray.test_from_dtypezRecursionError, GH-33900c              	      >   t  }zt d t || W t | d S t | w Nd   )sysgetrecursionlimitsetrecursionlimitr$   *test_series_constructor_no_data_with_indexr'   r   na_value	rec_limitr(   r
   r   r1   ^   
   
z8TestJSONArray.test_series_constructor_no_data_with_indexc              	      r+   r,   )r.   r/   r0   r$   ,test_series_constructor_scalar_na_with_indexr2   r(   r
   r   r6   i   r5   z:TestJSONArray.test_series_constructor_scalar_na_with_indexzcollection as scalar, GH-33901c              	      r+   r,   )r.   r/   r0   r$   )test_series_constructor_scalar_with_index)r'   r   r   r4   r(   r
   r   r7   t   r5   z7TestJSONArray.test_series_constructor_scalar_with_indexzDifferent definitions of NAc                       t    dS )z
        The test does .astype(object).stack(future_stack=True). 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)r$   
test_stackr'   r(   r
   r   r9      s   zTestJSONArray.test_stackzdict for NAc                    s   t  ||S r	   )r$   test_unstack)r'   r   indexr(   r
   r   r;      s   zTestJSONArray.test_unstackzSetting a dict as a scalarc                    r8   z;We treat dictionaries as a mapping in fillna, not a scalar.N)r$   test_fillna_seriesr:   r(   r
   r   r>         z TestJSONArray.test_fillna_seriesc                    r8   r=   )r$   test_fillna_framer:   r(   r
   r   r@      r?   zTestJSONArray.test_fillna_framez'limit_area, input_ilocs, expected_ilocsoutside)r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   inside)r   r   r   r   r   c                    sJ   d}t jt|d t |||| W d    d S 1 sw   Y  d S )Nz'JSONArray does not implement limit_areamatch)pytestraisesNotImplementedErrorr$   test_ffill_limit_area)r'   r   
limit_areainput_ilocsexpected_ilocsmsgr(   r
   r   rH      s   "z#TestJSONArray.test_ffill_limit_areac                       t  || d S r	   )r$   test_value_counts)r'   all_datadropnar(   r
   r   rN         zTestJSONArray.test_value_countsc                    r#   r	   )r$    test_value_counts_with_normalizer&   r(   r
   r   rR         z.TestJSONArray.test_value_counts_with_normalizec                    s   t    d S r	   )r$   test_sort_values_framer:   r(   r
   r   rT      r?   z$TestJSONArray.test_sort_values_frame	ascendingTFc                       t  ||| d S r	   )r$   test_sort_values)r'   r   rU   sort_by_keyr(   r
   r   rW         zTestJSONArray.test_sort_valuesc                    rV   r	   )r$   test_sort_values_missing)r'   r   rU   rX   r(   r
   r   rZ      s   z&TestJSONArray.test_sort_values_missingz#combine for JSONArray not supportedc                    r#   r	   )r$   test_combine_le)r'   data_repeatedr(   r
   r   r[      rS   zTestJSONArray.test_combine_lezGcombine for JSONArray not supported - may pass depending on random data)r   strictrF   c                    r#   r	   )r$   test_combine_firstr&   r(   r
   r   r^      s   z TestJSONArray.test_combine_firstzbroadcasting errorc                    rM   r	   )r$   test_where_series)r'   r   r3   r(   r
   r   r_         zTestJSONArray.test_where_serieszCan't compare dicts.c                    r#   r	   )r$   test_searchsorted)r'   r   r(   r
   r   ra      rS   zTestJSONArray.test_searchsortedc                    rV   r	   )r$   test_equals)r'   r   r3   	as_seriesr(   r
   r   rb      rY   zTestJSONArray.test_equalsz-fill-value is interpreted as a dict of valuesc                    r#   r	   )r$   test_fillna_copy_frame)r'   r   r(   r
   r   rd      rS   z$TestJSONArray.test_fillna_copy_framec                    s,   |rt jjdd}|| t | d S )NzFails with CoWr   )rE   markxfailapplymarkerr$   &test_equals_same_data_different_object)r'   r   using_copy_on_writerequestre   r(   r
   r   rh      s   
z4TestJSONArray.test_equals_same_data_different_objectz$failing on np.array(self, dtype=str)c                    r8   )zThis currently fails in NumPy on np.array(self, dtype=str) with

        *** ValueError: setting an array element with a sequence
        N)r$   test_astype_strr:   r(   r
   r   rk         zTestJSONArray.test_astype_strc                    r8   )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)r$    test_groupby_extension_transformr:   r(   r
   r   rm      s   z.TestJSONArray.test_groupby_extension_transformc                    r8   )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)r$   test_groupby_extension_applyr:   r(   r
   r   rn     s   z*TestJSONArray.test_groupby_extension_applyc                    r8   z
        This fails when we get to tm.assert_series_equal when left.index
        contains dictionaries, which are not hashable.
        N)r$   test_groupby_extension_aggr:   r(   r
   r   rp     rl   z(TestJSONArray.test_groupby_extension_aggc                    r8   ro   )r$   test_groupby_extension_no_sortr:   r(   r
   r   rq     rl   z,TestJSONArray.test_groupby_extension_no_sortc                    s:   t |d dkrtjjdd}|| t || d S )Nr   r   zraises in coercing to Seriesr   )r   rE   re   rf   rg   r$   test_arith_frame_with_scalar)r'   r   all_arithmetic_operatorsrj   re   r(   r
   r   rr     s   
z*TestJSONArray.test_arith_frame_with_scalarc                    s4   |j dv rtjjdd}|| t || d S )N)r   nez"Comparison methods not implementedr   )__name__rE   re   rf   rg   r$   test_compare_array)r'   r   comparison_oprj   re   r(   r
   r   rv   %  s   

z TestJSONArray.test_compare_arrayz.ValueError: Must have equal len keys and valuec                    r#   r	   )r$   test_setitem_loc_scalar_mixedr&   r(   r
   r   rx   +  rS   z+TestJSONArray.test_setitem_loc_scalar_mixedc                    r#   r	   )r$   ,test_setitem_loc_scalar_multiple_homogoneousr&   r(   r
   r   ry   /  rS   z:TestJSONArray.test_setitem_loc_scalar_multiple_homogoneousc                    r#   r	   )r$   test_setitem_iloc_scalar_mixedr&   r(   r
   r   rz   3  rS   z,TestJSONArray.test_setitem_iloc_scalar_mixedc                    r#   r	   )r$   -test_setitem_iloc_scalar_multiple_homogoneousr&   r(   r
   r   r{   7  rS   z;TestJSONArray.test_setitem_iloc_scalar_multiple_homogoneousmask)TTTFFboolean)r   )numpy-arrayzboolean-arrayzboolean-array-na)idsc                    sV   |rt jjdd}|| nt|tjs!t jjdd}|| t ||| d S )N<cannot set using a list-like indexer with a different lengthr   z"Issues unwanted DeprecationWarning)	rE   re   rf   rg   
isinstancenpndarrayr$   test_setitem_mask)r'   r   r|   box_in_seriesrj   re   r(   r
   r   r   ;  s   

zTestJSONArray.test_setitem_maskc                    s.   |st jjdd}|| t || d S )NFails to raiser   )rE   re   rf   rg   r$   test_setitem_mask_raises)r'   r   r   rj   re   r(   r
   r   r   O  s   
z&TestJSONArray.test_setitem_mask_raisesr   c                    rM   r	   )r$   'test_setitem_mask_boolean_array_with_nar'   r   r   r(   r
   r   r   V     z5TestJSONArray.test_setitem_mask_boolean_array_with_naidx)r   r   r   Int64)listzinteger-arrayr~   c                    s0   |rt jjdd}|| t ||| d S )Nr   r   )rE   re   rf   rg   r$   test_setitem_integer_array)r'   r   r   r   rj   re   r(   r
   r   r   \  s   
z(TestJSONArray.test_setitem_integer_arrayz3list indices must be integers or slices, not NATypezidx, box_in_seriesr   r   r   zGH-31948)marks)z
list-Falsez	list-Truezinteger-array-Falsezinteger-array-Truec                    rV   r	   )r$   (test_setitem_integer_with_missing_raises)r'   r   r   r   r(   r
   r   r   i  s   z6TestJSONArray.test_setitem_integer_with_missing_raisesr   c                    r#   r	   )r$   &test_setitem_scalar_key_sequence_raiser&   r(   r
   r   r   y  rS   z4TestJSONArray.test_setitem_scalar_key_sequence_raisec                    s6   d|j jv rtjjdd}|| t || d S )N
full_sliceslice is not iterabler   )nodenamerE   re   rf   rg   r$   ,test_setitem_with_expansion_dataframe_column)r'   r   full_indexerrj   re   r(   r
   r   r   }  s   
z:TestJSONArray.test_setitem_with_expansion_dataframe_columnr   c                    r#   r	   )r$   test_setitem_frame_2d_valuesr&   r(   r
   r   r     rS   z*TestJSONArray.test_setitem_frame_2d_valuessetterlocNc                    rM   r	   )r$   test_setitem_mask_broadcast)r'   r   r   r(   r
   r   r     r`   z)TestJSONArray.test_setitem_mask_broadcastz8cannot set using a slice indexer with a different lengthc                    rM   r	   )r$   test_setitem_slicer   r(   r
   r   r     r   z TestJSONArray.test_setitem_slicezslice object is not iterablec                    r#   r	   )r$   test_setitem_loc_iloc_slicer&   r(   r
   r   r     rS   z)TestJSONArray.test_setitem_loc_iloc_slicec                    r#   r	   )r$   )test_setitem_slice_mismatch_length_raisesr&   r(   r
   r   r     rS   z7TestJSONArray.test_setitem_slice_mismatch_length_raisesc                    r#   r	   )r$   test_setitem_slice_arrayr&   r(   r
   r   r     rS   z&TestJSONArray.test_setitem_slice_arrayzFail to raisec                    rM   r	   )r$   test_setitem_invalid)r'   r   invalid_scalarr(   r
   r   r     rQ   z"TestJSONArray.test_setitem_invalidz+only integer scalar arrays can be convertedc                    r#   r	   )r$   test_setitem_2d_valuesr&   r(   r
   r   r     rS   z$TestJSONArray.test_setitem_2d_valueszdata type 'json' not understoodenginer   pythonc                    rV   r	   )r$   test_EA_types)r'   r   r   rj   r(   r
   r   r     s   zTestJSONArray.test_EA_types)Aru   
__module____qualname__rE   re   rf   r%   r*   r1   r6   r7   r9   r;   r>   r@   parametrizerH   
unhashablerN   rR   rT   rW   rZ   r[   AssertionErrorr^   r_   ra   rb   skiprd   rh   rk   rm   rn   rp   rq   rr   rv   rx   ry   rz   r{   r   arraypdNAr   r   r   r   paramr   r   r   r   r   r   r   r   r   r   r   r   __classcell__r
   r
   r(   r   r"   Q   s   




		$r"   c                 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)r<   r   )r   r   r   Seriesr   valuesastypeobjectr<   tmassert_series_equal)leftrightargskwargsr
   r
   r   custom_assert_series_equal  s   r   c              
   O   s   | dd}tj| j|j| dd| dd| dd| d	d| d
d | jdkj}|D ]}t| | || g|R i | q/| j|d} |j|d}tj| |g|R i | d S )Nobj	DataFramecheck_column_typeequivcheck_namesTcheck_exactFcheck_categoricalz.columns)exactr   r   r   r   r   )columns)	getr   assert_index_equalr   dtypesr<   r   dropassert_frame_equal)r   r   r   r   obj_typejsonscolr
   r
   r   custom_assert_frame_equal  s    




"r   c                  C   s   t tdditdditddig} t| }t|| t| |  t| g d}d}t	j
t|d	 t|| W d    n1 sLw   Y  t	j
t|d	 t| |  W d    d S 1 smw   Y  d S )
Nr   r   r   r   r   r   )r   r   r   zSeries are differentrC   )r   collectionsUserDictr   r   r   r   to_frametakerE   rF   r   )r   r   r   rL   r
   r
   r   test_custom_asserts  s"   

"r   )!r   r   r.   numpyr   rE   pandasr   pandas._testing_testingr   pandas.tests.extensionr   !pandas.tests.extension.json.arrayr   r   r   re   rf   r   fixturer   r   r   r   r   r    r!   ExtensionTestsr"   r   r   r   r
   r
   r
   r   <module>   s<    






  _