o
    Û­j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
   úb/var/www/html/CropPilot/venv/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d€d�„Z6ejjd‚d�‡ fdƒd„„ƒZ7ejjdjd�ej d…d†d‡g¡‡ fdˆd‰„ƒƒZ8ejjdŠd�‡ fd‹dŒ„ƒZ9e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�ej d›dœd�g¡‡ fdždŸ„ƒƒ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 ©Néd   )Ú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   )zŠThis 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<    






  _