o
    թZh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_dataZ
Unhashablereasonc                   C   s   t  S N)r    r	   r	   \/var/www/html/lang_env/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
   r0   ^   
   
z8TestJSONArray.test_series_constructor_no_data_with_indexc              	      r*   r+   )r-   r.   r/   r#   ,test_series_constructor_scalar_na_with_indexr1   r'   r	   r
   r5   i   r4   z:TestJSONArray.test_series_constructor_scalar_na_with_indexzcollection as scalar, GH-33901c              	      r*   r+   )r-   r.   r/   r#   )test_series_constructor_scalar_with_index)r&   r   r   r3   r'   r	   r
   r6   t   r4   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
   r8      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                    r7   z;We treat dictionaries as a mapping in fillna, not a scalar.N)r#   test_fillna_seriesr9   r'   r	   r
   r=         z TestJSONArray.test_fillna_seriesc                    r7   r<   )r#   test_fillna_framer9   r'   r	   r
   r?      r>   zTestJSONArray.test_fillna_framez'limit_area, input_ilocs, expected_ilocsZ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   Z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   Z
limit_areaZinput_ilocsZexpected_ilocsmsgr'   r	   r
   rE      s   "z#TestJSONArray.test_ffill_limit_areac                       t  || d S r   )r#   test_value_counts)r&   Zall_dataZdropnar'   r	   r
   rH         zTestJSONArray.test_value_countsc                    r"   r   )r#    test_value_counts_with_normalizer%   r'   r	   r
   rJ         z.TestJSONArray.test_value_counts_with_normalizec                    s   t    d S r   )r#   test_sort_values_framer9   r'   r	   r
   rL      r>   z$TestJSONArray.test_sort_values_frame	ascendingTFc                       t  ||| d S r   )r#   test_sort_values)r&   r   rM   sort_by_keyr'   r	   r
   rO         zTestJSONArray.test_sort_valuesc                    rN   r   )r#   test_sort_values_missing)r&   r   rM   rP   r'   r	   r
   rR      s   z&TestJSONArray.test_sort_values_missingz#combine for JSONArray not supportedc                    r"   r   )r#   test_combine_le)r&   Zdata_repeatedr'   r	   r
   rS      rK   zTestJSONArray.test_combine_lezGcombine for JSONArray not supported - may pass depending on random data)r   strictrC   c                    r"   r   )r#   test_combine_firstr%   r'   r	   r
   rU      s   z TestJSONArray.test_combine_firstzbroadcasting errorc                    rG   r   )r#   test_where_series)r&   r   r2   r'   r	   r
   rV         zTestJSONArray.test_where_serieszCan't compare dicts.c                    r"   r   )r#   test_searchsorted)r&   r   r'   r	   r
   rX      rK   zTestJSONArray.test_searchsortedc                    rN   r   )r#   test_equals)r&   r   r2   Z	as_seriesr'   r	   r
   rY      rQ   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
   rZ      rK   z$TestJSONArray.test_fillna_copy_framec                    s,   |rt jjdd}|| t | d S )NzFails with CoWr   )rB   markxfailapplymarkerr#   &test_equals_same_data_different_object)r&   r   Zusing_copy_on_writerequestr[   r'   r	   r
   r^      s   
z4TestJSONArray.test_equals_same_data_different_objectz$failing on np.array(self, dtype=str)c                    r7   )zThis currently fails in NumPy on np.array(self, dtype=str) with

        *** ValueError: setting an array element with a sequence
        N)r#   test_astype_strr9   r'   r	   r
   r`         zTestJSONArray.test_astype_strc                    r7   )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_transformr9   r'   r	   r
   rb      s   z.TestJSONArray.test_groupby_extension_transformc                    r7   )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_applyr9   r'   r	   r
   rc     s   z*TestJSONArray.test_groupby_extension_applyc                    r7   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_aggr9   r'   r	   r
   re     ra   z(TestJSONArray.test_groupby_extension_aggc                    r7   rd   )r#   test_groupby_extension_no_sortr9   r'   r	   r
   rf     ra   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   rB   r[   r\   r]   r#   test_arith_frame_with_scalar)r&   r   Zall_arithmetic_operatorsr_   r[   r'   r	   r
   rg     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__rB   r[   r\   r]   r#   test_compare_array)r&   r   Zcomparison_opr_   r[   r'   r	   r
   rj   %  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
   rk   +  rK   z+TestJSONArray.test_setitem_loc_scalar_mixedc                    r"   r   )r#   ,test_setitem_loc_scalar_multiple_homogoneousr%   r'   r	   r
   rl   /  rK   z:TestJSONArray.test_setitem_loc_scalar_multiple_homogoneousc                    r"   r   )r#   test_setitem_iloc_scalar_mixedr%   r'   r	   r
   rm   3  rK   z,TestJSONArray.test_setitem_iloc_scalar_mixedc                    r"   r   )r#   -test_setitem_iloc_scalar_multiple_homogoneousr%   r'   r	   r
   rn   7  rK   z;TestJSONArray.test_setitem_iloc_scalar_multiple_homogoneousmask)TTTFFboolean)r   )numpy-arrayzboolean-arrayzboolean-array-na)Z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)	rB   r[   r\   r]   
isinstancenpZndarrayr#   test_setitem_mask)r&   r   ro   box_in_seriesr_   r[   r'   r	   r
   ru   ;  s   

zTestJSONArray.test_setitem_maskc                    s.   |st jjdd}|| t || d S )NFails to raiser   )rB   r[   r\   r]   r#   test_setitem_mask_raises)r&   r   rv   r_   r[   r'   r	   r
   rx   O  s   
z&TestJSONArray.test_setitem_mask_raisesrr   c                    rG   r   )r#   'test_setitem_mask_boolean_array_with_nar&   r   rv   r'   r	   r
   ry   V     z5TestJSONArray.test_setitem_mask_boolean_array_with_naidx)r   r   r   ZInt64)listzinteger-arrayrq   c                    s0   |rt jjdd}|| t ||| d S )Nrr   r   )rB   r[   r\   r]   r#   test_setitem_integer_array)r&   r   r|   rv   r_   r[   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)Zmarks)z
list-Falsez	list-Truezinteger-array-Falsezinteger-array-Truec                    rN   r   )r#   (test_setitem_integer_with_missing_raises)r&   r   r|   rv   r'   r	   r
   r   i  s   z6TestJSONArray.test_setitem_integer_with_missing_raisesrw   c                    r"   r   )r#   &test_setitem_scalar_key_sequence_raiser%   r'   r	   r
   r   y  rK   z4TestJSONArray.test_setitem_scalar_key_sequence_raisec                    s6   d|j jv rtjjdd}|| t || d S )NZ
full_sliceslice is not iterabler   )nodenamerB   r[   r\   r]   r#   ,test_setitem_with_expansion_dataframe_column)r&   r   Zfull_indexerr_   r[   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     rK   z*TestJSONArray.test_setitem_frame_2d_valuessetterlocNc                    rG   r   )r#   test_setitem_mask_broadcast)r&   r   r   r'   r	   r
   r     rW   z)TestJSONArray.test_setitem_mask_broadcastz8cannot set using a slice indexer with a different lengthc                    rG   r   )r#   test_setitem_slicerz   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     rK   z)TestJSONArray.test_setitem_loc_iloc_slicec                    r"   r   )r#   )test_setitem_slice_mismatch_length_raisesr%   r'   r	   r
   r     rK   z7TestJSONArray.test_setitem_slice_mismatch_length_raisesc                    r"   r   )r#   test_setitem_slice_arrayr%   r'   r	   r
   r     rK   z&TestJSONArray.test_setitem_slice_arrayzFail to raisec                    rG   r   )r#   test_setitem_invalid)r&   r   Zinvalid_scalarr'   r	   r
   r     rI   z"TestJSONArray.test_setitem_invalidz+only integer scalar arrays can be convertedc                    r"   r   )r#   test_setitem_2d_valuesr%   r'   r	   r
   r     rK   z$TestJSONArray.test_setitem_2d_valueszdata type 'json' not understoodenginer   pythonc                    rN   r   )r#   test_EA_types)r&   r   r   r_   r'   r	   r
   r     s   zTestJSONArray.test_EA_types)Ari   
__module____qualname__rB   r[   r\   r$   r)   r0   r5   r6   r8   r:   r=   r?   ZparametrizerE   
unhashablerH   rJ   rL   rO   rR   rS   AssertionErrorrU   rV   rX   rY   skiprZ   r^   r`   rb   rc   re   rf   rg   rj   rk   rl   rm   rn   rt   arraypdZNAru   rx   ry   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   valuesZastypeobjectr;   tmZ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objZ	DataFrameZcheck_column_typeequivcheck_namesTcheck_exactFcheck_categoricalz.columns)exactr   r   r   r   r   )columns)	getr   Zassert_index_equalr   Zdtypesr;   r   ZdropZassert_frame_equal)r   r   r   r   obj_typeZ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 differentr@   )r   collectionsUserDictr   r   r   r   Zto_frameZtakerB   rC   r   )r   r   r   rF   r	   r	   r
   test_custom_asserts  s"   

"r   )!r   r   r-   numpyrt   rB   Zpandasr   Zpandas._testingZ_testingr   Zpandas.tests.extensionr   Z!pandas.tests.extension.json.arrayr   r   r   r[   r\   r   Zfixturer   r   r   r   r   r   r    ZExtensionTestsr!   r   r   r   r	   r	   r	   r
   <module>   s<    






  _