a
    Pf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/ai-form-bot/venv/lib/python3.9/site-packages/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_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<   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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                    s   t  | d S r   )supertest_containsselfr   	__class__r	   r
   r!   R   s    zTestJSONArray.test_containsz&not implemented constructor from dtypec                    s   t  | d S r   )r    test_from_dtyper"   r$   r	   r
   r&   Y   s    zTestJSONArray.test_from_dtypezRecursionError, GH-33900c              	      s@   t  }z&t d t || W t | nt | 0 d S Nd   )sysgetrecursionlimitsetrecursionlimitr    *test_series_constructor_no_data_with_indexr#   r   na_value	rec_limitr$   r	   r
   r,   ^   s
    
z8TestJSONArray.test_series_constructor_no_data_with_indexc              	      s@   t  }z&t d t || W t | nt | 0 d S r'   )r)   r*   r+   r    ,test_series_constructor_scalar_na_with_indexr-   r$   r	   r
   r0   i   s
    
z:TestJSONArray.test_series_constructor_scalar_na_with_indexzcollection as scalar, GH-33901c              	      s@   t  }z&t d t || W t | nt | 0 d S r'   )r)   r*   r+   r    )test_series_constructor_scalar_with_index)r#   r   r   r/   r$   r	   r
   r1   t   s
    
z7TestJSONArray.test_series_constructor_scalar_with_indexzDifferent definitions of NAc                    s   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
   r2      s    zTestJSONArray.test_stackzdict for NAc                    s   t  ||S r   )r    test_unstack)r#   r   indexr$   r	   r
   r4      s    zTestJSONArray.test_unstackzSetting a dict as a scalarc                    s   t    dS z;We treat dictionaries as a mapping in fillna, not a scalar.N)r    test_fillna_seriesr3   r$   r	   r
   r7      s    z TestJSONArray.test_fillna_seriesc                    s   t    dS r6   )r    test_fillna_framer3   r$   r	   r
   r8      s    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                    sH   d}t jt|d" t |||| W d    n1 s:0    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
   r>      s
    z#TestJSONArray.test_ffill_limit_areac                    s   t  || d S r   )r    test_value_counts)r#   Zall_dataZdropnar$   r	   r
   r@      s    zTestJSONArray.test_value_countsc                    s   t  | d S r   )r     test_value_counts_with_normalizer"   r$   r	   r
   rA      s    z.TestJSONArray.test_value_counts_with_normalizec                    s   t    d S r   )r    test_sort_values_framer3   r$   r	   r
   rB      s    z$TestJSONArray.test_sort_values_frame	ascendingTFc                    s   t  ||| d S r   )r    test_sort_values)r#   r   rC   sort_by_keyr$   r	   r
   rD      s    zTestJSONArray.test_sort_valuesc                    s   t  ||| d S r   )r    test_sort_values_missing)r#   r   rC   rE   r$   r	   r
   rF      s    z&TestJSONArray.test_sort_values_missingz#combine for JSONArray not supportedc                    s   t  | d S r   )r    test_combine_le)r#   Zdata_repeatedr$   r	   r
   rG      s    zTestJSONArray.test_combine_lezGcombine for JSONArray not supported - may pass depending on random data)r   strictr<   c                    s   t  | d S r   )r    test_combine_firstr"   r$   r	   r
   rI      s    z TestJSONArray.test_combine_firstzbroadcasting errorc                    s   t  || d S r   )r    test_where_series)r#   r   r.   r$   r	   r
   rJ      s    zTestJSONArray.test_where_serieszCan't compare dicts.c                    s   t  | d S r   )r    test_searchsorted)r#   r   r$   r	   r
   rK      s    zTestJSONArray.test_searchsortedc                    s   t  ||| d S r   )r    test_equals)r#   r   r.   Z	as_seriesr$   r	   r
   rL      s    zTestJSONArray.test_equalsz-fill-value is interpreted as a dict of valuesc                    s   t  | d S r   )r    test_fillna_copy_frame)r#   r   r$   r	   r
   rM      s    z$TestJSONArray.test_fillna_copy_framec                    s,   |rt jjdd}|| t | d S )NzFails with CoWr   )r;   markxfailapplymarkerr    &test_equals_same_data_different_object)r#   r   Zusing_copy_on_writerequestrN   r$   r	   r
   rQ      s    
z4TestJSONArray.test_equals_same_data_different_objectz$failing on np.array(self, dtype=str)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)r    test_astype_strr3   r$   r	   r
   rS      s    zTestJSONArray.test_astype_strc                    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)r     test_groupby_extension_transformr3   r$   r	   r
   rT      s    z.TestJSONArray.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)r    test_groupby_extension_applyr3   r$   r	   r
   rU     s    z*TestJSONArray.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)r    test_groupby_extension_aggr3   r$   r	   r
   rW     s    z(TestJSONArray.test_groupby_extension_aggc                    s   t    dS rV   )r    test_groupby_extension_no_sortr3   r$   r	   r
   rX     s    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   r;   rN   rO   rP   r    test_arith_frame_with_scalar)r#   r   Zall_arithmetic_operatorsrR   rN   r$   r	   r
   rY     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__r;   rN   rO   rP   r    test_compare_array)r#   r   Zcomparison_oprR   rN   r$   r	   r
   r\   %  s    

z TestJSONArray.test_compare_arrayz.ValueError: Must have equal len keys and valuec                    s   t  | d S r   )r    test_setitem_loc_scalar_mixedr"   r$   r	   r
   r]   +  s    z+TestJSONArray.test_setitem_loc_scalar_mixedc                    s   t  | d S r   )r    ,test_setitem_loc_scalar_multiple_homogoneousr"   r$   r	   r
   r^   /  s    z:TestJSONArray.test_setitem_loc_scalar_multiple_homogoneousc                    s   t  | d S r   )r    test_setitem_iloc_scalar_mixedr"   r$   r	   r
   r_   3  s    z,TestJSONArray.test_setitem_iloc_scalar_mixedc                    s   t  | d S r   )r    -test_setitem_iloc_scalar_multiple_homogoneousr"   r$   r	   r
   r`   7  s    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sBt jjdd}|| t ||| d S )N<cannot set using a list-like indexer with a different lengthr   z"Issues unwanted DeprecationWarning)	r;   rN   rO   rP   
isinstancenpZndarrayr    test_setitem_mask)r#   r   ra   box_in_seriesrR   rN   r$   r	   r
   rg   ;  s    

zTestJSONArray.test_setitem_maskc                    s.   |st jjdd}|| t || d S )NFails to raiser   )r;   rN   rO   rP   r    test_setitem_mask_raises)r#   r   rh   rR   rN   r$   r	   r
   rj   O  s    
z&TestJSONArray.test_setitem_mask_raisesrd   c                    s   t  || d S r   )r    'test_setitem_mask_boolean_array_with_nar#   r   rh   r$   r	   r
   rk   V  s    z5TestJSONArray.test_setitem_mask_boolean_array_with_naidx)r   r   r   ZInt64)listzinteger-arrayrc   c                    s0   |rt jjdd}|| t ||| d S )Nrd   r   )r;   rN   rO   rP   r    test_setitem_integer_array)r#   r   rm   rh   rR   rN   r$   r	   r
   ro   \  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                    s   t  ||| d S r   )r    (test_setitem_integer_with_missing_raises)r#   r   rm   rh   r$   r	   r
   rp   i  s    z6TestJSONArray.test_setitem_integer_with_missing_raisesri   c                    s   t  | d S r   )r    &test_setitem_scalar_key_sequence_raiser"   r$   r	   r
   rq   y  s    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namer;   rN   rO   rP   r    ,test_setitem_with_expansion_dataframe_column)r#   r   Zfull_indexerrR   rN   r$   r	   r
   ru   }  s    
z:TestJSONArray.test_setitem_with_expansion_dataframe_columnrr   c                    s   t  | d S r   )r    test_setitem_frame_2d_valuesr"   r$   r	   r
   rv     s    z*TestJSONArray.test_setitem_frame_2d_valuessetterlocNc                    s   t  || d S r   )r    test_setitem_mask_broadcast)r#   r   rw   r$   r	   r
   ry     s    z)TestJSONArray.test_setitem_mask_broadcastz8cannot set using a slice indexer with a different lengthc                    s   t  || d S r   )r    test_setitem_slicerl   r$   r	   r
   rz     s    z TestJSONArray.test_setitem_slicezslice object is not iterablec                    s   t  | d S r   )r    test_setitem_loc_iloc_slicer"   r$   r	   r
   r{     s    z)TestJSONArray.test_setitem_loc_iloc_slicec                    s   t  | d S r   )r    )test_setitem_slice_mismatch_length_raisesr"   r$   r	   r
   r|     s    z7TestJSONArray.test_setitem_slice_mismatch_length_raisesc                    s   t  | d S r   )r    test_setitem_slice_arrayr"   r$   r	   r
   r}     s    z&TestJSONArray.test_setitem_slice_arrayzFail to raisec                    s   t  || d S r   )r    test_setitem_invalid)r#   r   Zinvalid_scalarr$   r	   r
   r~     s    z"TestJSONArray.test_setitem_invalidz+only integer scalar arrays can be convertedc                    s   t  | d S r   )r    test_setitem_2d_valuesr"   r$   r	   r
   r     s    z$TestJSONArray.test_setitem_2d_valueszdata type 'json' not understoodenginer   pythonc                    s   t  ||| d S r   )r    test_EA_types)r#   r   r   rR   r$   r	   r
   r     s    zTestJSONArray.test_EA_types)Ar[   
__module____qualname__r;   rN   rO   r!   r&   r,   r0   r1   r2   r4   r7   r8   Zparametrizer>   
unhashabler@   rA   rB   rD   rF   rG   AssertionErrorrI   rJ   rK   rL   skiprM   rQ   rS   rT   rU   rW   rX   rY   r\   r]   r^   r_   r`   rf   arraypdZNArg   rj   rk   ro   paramrp   rq   ru   rv   ry   rz   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)r5   rt   )r   rt   r   Seriesr   valuesZastypeobjectr5   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dtypesr5   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 s0    Y  t	j
t|d	" t| |  W d    n1 s0    Y  d S )
Nr   r   r   r   r   r   )r   r   r   zSeries are differentr9   )r   collectionsUserDictr   r   r   r   Zto_frameZtaker;   r<   r   )r   r   r   r?   r	   r	   r
   test_custom_asserts  s    

(r   )!r   r   r)   numpyrf   r;   Zpandasr   Zpandas._testingZ_testingr   Zpandas.tests.extensionr   Z!pandas.tests.extension.json.arrayr   r   r   rN   rO   r   Zfixturer   r   r   r   r   r   r   ZExtensionTestsr   r   r   r   r	   r	   r	   r
   <module>   s:   






  _