§
    yhþhƒ#  ã                  ó  — d Z ddlmZ ddlmZmZ ddlZddlZddlZddl	Z	ddl
mZm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 ddlZdd	lmZmZ dd
lmZ erddlm Z  ddl!m"Z"  G d„ de¦  «        Z# G d„ de¦  «        Z$d„ Z%dS )a¦  
Test extension array for storing nested data in a pandas container.

The JSONArray stores lists of dictionaries. The storage mechanism is a list,
not an ndarray.

Note
----
We currently store lists of UserDicts. Pandas has a few places
internally that specifically check for dicts, and does non-scalar things
in that case. We *want* the dictionaries to be treated as scalars, so we
hack around pandas by using UserDicts.
é    )Úannotations)ÚUserDictÚabcN)ÚTYPE_CHECKINGÚAny)Úfind_stack_level©Ú'construct_1d_object_array_from_listlike)Úis_bool_dtypeÚis_list_likeÚpandas_dtype)ÚExtensionArrayÚExtensionDtype)Úunpack_tuple_and_ellipses)ÚMapping)Útype_tc                  óX   — e Zd ZU ej        ZdZ e¦   «         Zde	d<   e
dd„¦   «         ZdS )	Ú	JSONDtypeÚjsonzMapping[str, Any]Úna_valueÚreturnútype_t[JSONArray]c                ó   — t           S )zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        )Ú	JSONArray)Úclss    úX/var/www/histauto/venv/lib/python3.11/site-packages/pandas/tests/extension/json/array.pyÚconstruct_array_typezJSONDtype.construct_array_type;   s
   € õ Ðó    N)r   r   )Ú__name__Ú
__module__Ú__qualname__r   r   ÚtypeÚnamer   r   Ú__annotations__Úclassmethodr   © r   r   r   r   6   sW   € € € € € € ØŒ;€DØ€DØ"* (¡*¤*€HÐ,Ð,Ð,Ñ,àðð ð ñ „[ðð ð r   r   c                  ó  ‡ — e Zd Z e¦   «         ZdZddd„Zedddœd„¦   «         Zed	„ ¦   «         Z	d
„ Z
dd„Zdd„Zd„ Zd„ Zd d„Zedd„¦   «         Zd„ Zd!d„Zd„ Zd"d„Zd„ Zed„ ¦   «         Zd„ Zd„ Zdddœˆ fd„
Zˆ xZS )#r   iè  NFr   ÚNonec                óÊ   — |D ]E}t          || j        j        ¦  «        s)t          dt	          | j        j        ¦  «        z   ¦  «        ‚ŒF|| _        | j        x| _        | _        d S )NzAll values must be of type )Ú
isinstanceÚdtyper"   Ú	TypeErrorÚstrÚdataÚ_itemsÚ_data)ÚselfÚvaluesr+   ÚcopyÚvals        r   Ú__init__zJSONArray.__init__K   sm   € Øð 	Vð 	VˆCÝ˜c 4¤:¤?Ñ3Ô3ð VÝÐ =ÅÀDÄJÄOÑ@TÔ@TÑ TÑUÔUÐUðVàˆŒ	ð $(¤9Ð,ˆŒ�d”j�j�jr   ©r+   r3   c               ó   —  | |¦  «        S ©Nr&   )r   Úscalarsr+   r3   s       r   Ú_from_sequencezJSONArray._from_sequenceX   s   € àˆs�7‰|Œ|Ðr   c                ó,   —  | d„ |D ¦   «         ¦  «        S )Nc                ó8   — g | ]}|d k    ¯t          |¦  «        ‘ŒS )r&   )r   ©Ú.0Úxs     r   ú
<listcomp>z.JSONArray._from_factorized.<locals>.<listcomp>^   s#   € Ð;Ð;Ð; A°1¸²7°7•H˜Q‘K”K°7°7°7r   r&   )r   r2   Úoriginals      r   Ú_from_factorizedzJSONArray._from_factorized\   s!   € àˆsÐ;Ð;¨Ð;Ñ;Ô;Ñ<Ô<Ð<r   c                ó  ‡ — t          |t          ¦  «        rt          |¦  «        }t          |t          j        ¦  «        r‰ j        |         S t          |t          ¦  «        r0|t          d ¦  «        k    r t          ‰ ¦  «        ‰ j        ¦  «        S t          |t          ¦  «        r# t          ‰ ¦  «        ‰ j        |         ¦  «        S t          |¦  «        st          d¦  «        ‚t          j        j                             ‰ |¦  «        }t          |j        ¦  «        rAt          ‰ ¦  «                             d„ t#          ‰ |¦  «        D ¦   «         ‰ j        ¬¦  «        S  t          ‰ ¦  «        ˆ fd„|D ¦   «         ¦  «        S )Nzuonly integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indicesc                ó   — g | ]	\  }}|¯|‘Œ
S r&   r&   )r>   r?   Úms      r   r@   z)JSONArray.__getitem__.<locals>.<listcomp>w   s!   € Ð8Ð8Ð8™4˜1˜a°aÐ8�QÐ8Ð8Ð8r   ©r+   c                ó*   •— g | ]}‰j         |         ‘ŒS r&   ©r.   )r>   Úir1   s     €r   r@   z)JSONArray.__getitem__.<locals>.<listcomp>z   s   ø€ Ð:Ð:Ð:°˜tœy¨œ|Ð:Ð:Ð:r   )r*   Útupler   ÚnumbersÚIntegralr.   Úslicer"   r   Ú
IndexErrorÚpdÚapiÚindexersÚcheck_array_indexerr   r+   r:   Úzip)r1   Úitems   ` r   Ú__getitem__zJSONArray.__getitem__`   so  ø€ Ý�d�EÑ"Ô"ð 	3Ý,¨TÑ2Ô2ˆDå�d�GÔ,Ñ-Ô-ð 	<Ø”9˜T”?Ð"Ý˜�eÑ$Ô$ð 	<¨µ°t±´Ò)<Ð)<à•4˜‘:”:˜dœiÑ(Ô(Ð(Ý˜�eÑ$Ô$ð 	<à•4˜‘:”:˜dœi¨œoÑ.Ô.Ð.Ý˜dÑ#Ô#ð 	<õ ðLñô ð õ
 ”6”?×6Ò6°t¸TÑBÔBˆDÝ˜TœZÑ(Ô(ð Ý˜D‘z”z×0Ò0Ø8Ð8¥3 t¨T¡?¤?Ð8Ñ8Ô8ÀÄ
ð 1ñ ô ð ð •4˜‘:”:Ð:Ð:Ð:Ð:°TÐ:Ñ:Ô:Ñ;Ô;Ð;r   c                ó0  — t          |t          j        ¦  «        r|| j        |<   d S t          |t	          | ¦  «        t
          j        f¦  «        st          j        |g¦  «        }t          |t          j
        ¦  «        r[|j        dk    rPt          t          ||¦  «        ¦  «        D ]0\  }\  }}|r&t          || j        j        ¦  «        sJ ‚|| j        |<   Œ1d S t          ||¦  «        D ]+\  }}t          || j        j        ¦  «        sJ ‚|| j        |<   Œ,d S )NÚbool)r*   rK   rL   r.   r"   r   ÚSequenceÚ	itertoolsÚcycleÚnpÚndarrayr+   Ú	enumeraterS   )r1   ÚkeyÚvaluerI   ÚkÚvs         r   Ú__setitem__zJSONArray.__setitem__|   s#  € Ý�c�7Ô+Ñ,Ô,ð 	%Ø"ˆDŒI�c‰NˆNˆNå˜e¥d¨4¡j¤jµ#´,Ð%?Ñ@Ô@ð 1å!œ¨¨Ñ0Ô0�å˜#�rœzÑ*Ô*ð 	%¨s¬y¸FÒ/BÐ/Bå!*­3¨s°E©?¬?Ñ!;Ô!;ð )ð )‘I�A‘v˜˜1Øð )Ý)¨!¨T¬Z¬_Ñ=Ô=Ð=Ð=Ð=Ø'(˜œ	 !™øð)ð )õ
    U™OœOð %ð %‘D�A�qÝ% a¨¬¬Ñ9Ô9Ð9Ð9Ð9Ø#$�D”I˜a‘L�Lð%ð %r   Úintc                ó*   — t          | j        ¦  «        S r8   )Úlenr.   ©r1   s    r   Ú__len__zJSONArray.__len__�   s   € Ý�4”9‰~Œ~Ðr   c                ó   — t           S r8   ©ÚNotImplemented©r1   Úothers     r   Ú__eq__zJSONArray.__eq__’   ó   € ÝÐr   c                ó   — t           S r8   ri   rk   s     r   Ú__ne__zJSONArray.__ne__•   rn   r   c                ó,  — |du r(t          j        dt          t          ¦   «         ¬¦  «         |€t          }|t          k    rt          t          | ¦  «        ¦  «        S |€t          j        | j	        |¬¦  «        S t          j        | j	        ||¬¦  «        S )NFaS  Starting with NumPy 2.0, the behavior of the 'copy' keyword has changed and passing 'copy=False' raises an error when returning a zero-copy NumPy array is not possible. pandas will follow this behavior starting with pandas 3.0.
This conversion to NumPy requires a copy, but 'copy=False' was passed. Consider using 'np.asarray(..)' instead.)Ú
stacklevelrF   r6   )
ÚwarningsÚwarnÚFutureWarningr   Úobjectr
   Úlistr[   Úasarrayr.   )r1   r+   r3   s      r   Ú	__array__zJSONArray.__array__˜   s•   € Ø�5ˆ=ˆ=ÝŒMð2õ Ý+Ñ-Ô-ð	ñ 	ô 	ð 	ð ˆ=ÝˆEØ•FŠ?ˆ?å:½4À¹:¼:ÑFÔFÐFØˆ<å”:˜dœi¨uÐ5Ñ5Ô5Ð5ÝŒz˜$œ)¨5°tÐ<Ñ<Ô<Ð<r   c                ó4   — t          j        | j        ¦  «        S r8   )ÚsysÚ	getsizeofr.   rf   s    r   ÚnbyteszJSONArray.nbytes¯   s   € åŒ}˜TœYÑ'Ô'Ð'r   c                ó\   ‡ — t          j        ˆ fd„‰ j        D ¦   «         t          ¬¦  «        S )Nc                ó0   •— g | ]}|‰j         j        k    ‘ŒS r&   )r+   r   )r>   r?   r1   s     €r   r@   z"JSONArray.isna.<locals>.<listcomp>´   s#   ø€ ÐEÐEÐE°a˜˜dœjÔ1Ò1ÐEÐEÐEr   rF   )r[   Úarrayr.   rW   rf   s   `r   ÚisnazJSONArray.isna³   s/   ø€ ÝŒxÐEÐEÐEÐE¸4¼9ÐEÑEÔEÍTÐRÑRÔRÐRr   c                ó¬  ‡ ‡— t          j        |¦  «        }d}|r`‰€‰ j        j        Š|dk                          ¦   «         rt
          ‚	 ˆˆ fd„|D ¦   «         }nT# t          $ r}t          |¦  «        |‚d }~ww xY w	 ˆ fd„|D ¦   «         }n"# t          $ r}t          |¦  «        |‚d }~ww xY wt          ‰ ¦  «                             |‰ j        ¬¦  «        S )NzIIndex is out of bounds or cannot do a non-empty take from an empty array.éÿÿÿÿc                ó:   •— g | ]}|d k    r‰j         |         n‰‘ŒS )rƒ   rH   )r>   ÚlocÚ
fill_valuer1   s     €€r   r@   z"JSONArray.take.<locals>.<listcomp>Ç   s8   ø€ ð ð ð ØDG c¨R¢i i�D”I˜c”N�N°Zðð ð r   c                ó*   •— g | ]}‰j         |         ‘ŒS r&   rH   )r>   r…   r1   s     €r   r@   z"JSONArray.take.<locals>.<listcomp>Î   s   ø€ Ð<Ð<Ð<¨S˜$œ) Cœ.Ð<Ð<Ð<r   rF   )	r[   rx   r+   r   ÚanyÚ
ValueErrorrN   r"   r:   )r1   ÚindexerÚ
allow_fillr†   ÚmsgÚoutputÚerrs   `  `   r   ÚtakezJSONArray.take¶   s*  øø€ õ ”*˜WÑ%Ô%ˆð2ð 	ð
 ð 	/ØÐ!Ø!œZÔ0�
à˜"’×!Ò!Ñ#Ô#ð !Ý Ð ð/ðð ð ð ð ØKRðñ ô ��øõ ð /ð /ð /Ý  ‘o”o¨3Ð.øøøøð/øøøð/Ø<Ð<Ð<Ð<°GÐ<Ñ<Ô<��øÝð /ð /ð /Ý  ‘o”o¨3Ð.øøøøð/øøøõ �D‰zŒz×(Ò(¨°t´zÐ(ÑBÔBÐBs0   Á	A Á
A8Á#A3Á3A8Á<B Â
B*ÂB%Â%B*c                óL   —  t          | ¦  «        | j        d d …         ¦  «        S r8   ©r"   r.   rf   s    r   r3   zJSONArray.copyÔ   s"   € Ø�t�D‰zŒz˜$œ) A A Aœ,Ñ'Ô'Ð'r   Tc                ó´  — ddl m} t          |¦  «        }t          |t	          | j        ¦  «        ¦  «        r#|| j        k    r|r|                      ¦   «         S | S t          ||¦  «        r,|                     ¦   «         }|                     | |d¬¦  «        S |s t          j
        d„ | D ¦   «         |¬¦  «        S t          j        d„ | D ¦   «         ||¬¦  «        S )Nr   )ÚStringDtypeFr6   c                ó,   — g | ]}t          |¦  «        ‘ŒS r&   ©Údictr=   s     r   r@   z$JSONArray.astype.<locals>.<listcomp>ç   s   € Ð5Ð5Ð5¨1�t A™wœwÐ5Ð5Ð5r   rF   c                ó,   — g | ]}t          |¦  «        ‘ŒS r&   r•   r=   s     r   r@   z$JSONArray.astype.<locals>.<listcomp>é   s   € Ð3Ð3Ð3¨�T !™WœWÐ3Ð3Ð3r   )Úpandas.core.arrays.string_r“   r   r*   r"   r+   r3   r   r:   r[   rx   r€   )r1   r+   r3   r“   Úarr_clss        r   ÚastypezJSONArray.astype×   sù   € ð 	;Ð:Ð:Ð:Ð:Ð:å˜UÑ#Ô#ˆå�e�T $¤*Ñ-Ô-Ñ.Ô.ð 
	M°5¸D¼JÒ3FÐ3FØð #Ø—y’y‘{”{Ð"ØˆKÝ˜˜{Ñ+Ô+ð 	MØ×0Ò0Ñ2Ô2ˆGØ×)Ò)¨$°eÀ%Ð)ÑHÔHÐHØð 	MÝ”:Ð5Ð5°Ð5Ñ5Ô5¸UÐCÑCÔCÐCå”8Ð3Ð3¨dÐ3Ñ3Ô3¸5ÀtÐLÑLÔLÐLr   c                ód   —  t          | ¦  «        d„ d„ | j        D ¦   «         D ¦   «         ¦  «        S )Nc                ó,   — g | ]}t          |¦  «        ‘ŒS r&   r•   r=   s     r   r@   z$JSONArray.unique.<locals>.<listcomp>î   s   € ÐRÐRÐR q�4 ™7œ7ÐRÐRÐRr   c                óP   — h | ]#}t          |                     ¦   «         ¦  «        ’Œ$S r&   ©rJ   Úitems)r>   Úds     r   ú	<setcomp>z#JSONArray.unique.<locals>.<setcomp>î   s(   € Ð,QÐ,QÐ,QÀ!­U°1·7²7±9´9Ñ-=Ô-=Ð,QÐ,QÐ,Qr   r‘   rf   s    r   ÚuniquezJSONArray.uniqueë   s:   € ð �t�D‰zŒzÐRÐRÐ,QÐ,QÀtÄyÐ,QÑ,QÔ,QÐRÑRÔRÑSÔSÐSr   c                ó„   — t          t          j                             d„ |D ¦   «         ¦  «        ¦  «        } | |¦  «        S )Nc              3  ó$   K  — | ]}|j         V — Œd S r8   rH   r=   s     r   ú	<genexpr>z.JSONArray._concat_same_type.<locals>.<genexpr>ò   s$   è è € Ð1LÐ1L¸Q°!´&Ð1LÐ1LÐ1LÐ1LÐ1LÐ1Lr   )rw   rY   ÚchainÚfrom_iterable)r   Ú	to_concatr.   s      r   Ú_concat_same_typezJSONArray._concat_same_typeð   s<   € å•I”O×1Ò1Ð1LÐ1LÀ)Ð1LÑ1LÔ1LÑLÔLÑMÔMˆØˆs�4‰yŒyÐr   c                ó€   — |                       ¦   «         }t          |¦  «        dk    r|                     ¦   «         }|dfS )Nr   r&   )Ú_values_for_argsortre   Úravel©r1   Úfrozens     r   Ú_values_for_factorizezJSONArray._values_for_factorizeõ   s;   € Ø×)Ò)Ñ+Ô+ˆÝˆv‰;Œ;˜!ÒÐà—\’\‘^”^ˆFØ�rˆzÐr   c                ó8   — d„ | D ¦   «         }t          |¦  «        S )Nc                óP   — g | ]#}t          |                     ¦   «         ¦  «        ‘Œ$S r&   rž   r=   s     r   r@   z1JSONArray._values_for_argsort.<locals>.<listcomp>þ   s(   € Ð1Ð1Ð1 q•%˜Ÿš™	œ	Ñ"Ô"Ð1Ð1Ð1r   r	   r­   s     r   r«   zJSONArray._values_for_argsortü   s#   € à1Ð1¨DÐ1Ñ1Ô1ˆÝ6°vÑ>Ô>Ð>r   )Úlimitr3   c               óL   •— t          ¦   «                              |||¬¦  «        S )N)Úmethodr²   r3   )ÚsuperÚ_pad_or_backfill)r1   r´   r²   r3   Ú	__class__s       €r   r¶   zJSONArray._pad_or_backfill  s"   ø€ å‰wŒw×'Ò'¨v¸UÈÐ'ÑNÔNÐNr   )NF)r   r(   )r   rc   )NN)FN)T)r   r    r!   r   r+   Ú__array_priority__r5   r%   r:   rB   rU   rb   rg   rm   rp   ry   Úpropertyr}   r�   r�   r3   rš   r¢   r©   r¯   r«   r¶   Ú__classcell__)r·   s   @r   r   r   G   sè  ø€ € € € € ØˆI‰KŒK€EØÐð-ð -ð -ð -ð -ð Ø.2¸ð ð ð ð ñ „[ðð ð=ð =ñ „[ð=ð<ð <ð <ð8%ð %ð %ð %ð&ð ð ð ðð ð ðð ð ð=ð =ð =ð =ð. ð(ð (ð (ñ „Xð(ðSð Sð SðCð Cð Cð Cð<(ð (ð (ðMð Mð Mð Mð(Tð Tð Tð
 ðð ñ „[ððð ð ð?ð ?ð ?ð
 15¸4ð Oð Oð Oð Oð Oð Oð Oð Oð Oð Oð Or   r   c                 óx   ‡ — t           j                             d¦  «        Š ˆ fd„t          d¦  «        D ¦   «         S )Né   c                óˆ   •— g | ]>}t          ˆfd „t          ‰                     dd¦  «        ¦  «        D ¦   «         ¦  «        ‘Œ?S )c                ó”   •— g | ]D}‰                      t          t          j        ¦  «        ¦  «        ‰                     d d¦  «        f‘ŒES )r   éd   )Úchoicerw   ÚstringÚascii_lettersÚintegers©r>   Ú_Úrngs     €r   r@   z(make_data.<locals>.<listcomp>.<listcomp>  sS   ø€ ð ð ð àð —’�D¥Ô!5Ñ6Ô6Ñ7Ô7¸¿ºÀaÈÑ9MÔ9MÐNðð ð r   r   é
   )r   ÚrangerÃ   rÄ   s     €r   r@   zmake_data.<locals>.<listcomp>	  sq   ø€ ð ð ð ð õ 	ðð ð ð å˜sŸ|š|¨A¨rÑ2Ô2Ñ3Ô3ðñ ô ñ	
ô 	
ðð ð r   r¿   )r[   ÚrandomÚdefault_rngrÈ   )rÆ   s   @r   Ú	make_datarË     sK   ø€ å
Œ)×
Ò
 Ñ
"Ô
"€Cðð ð ð õ �s‘”ðñ ô ð r   )&Ú__doc__Ú
__future__r   Úcollectionsr   r   rY   rK   rÁ   r{   Útypingr   r   rs   Únumpyr[   Úpandas.util._exceptionsr   Úpandas.core.dtypes.castr
   Úpandas.core.dtypes.commonr   r   r   ÚpandasrO   Úpandas.api.extensionsr   r   Úpandas.core.indexersr   Úcollections.abcr   Úpandas._typingr   r   r   rË   r&   r   r   ú<module>rÙ      sý  ððð ð #Ð "Ð "Ð "Ð "Ð "ðð ð ð ð ð ð ð ð Ð Ð Ð Ø €€€Ø €€€Ø 
€
€
€
ðð ð ð ð ð ð ð ð €€€à Ð Ð Ð à 4Ð 4Ð 4Ð 4Ð 4Ð 4à KÐ KÐ KÐ KÐ KÐ Kðð ð ð ð ð ð ð ð ð ð Ð Ð Ð ðð ð ð ð ð ð ð ð ;Ð :Ð :Ð :Ð :Ð :àð &Ø'Ð'Ð'Ð'Ð'Ð'à%Ð%Ð%Ð%Ð%Ð%ðð ð ð ð �ñ ô ð ð"|Oð |Oð |Oð |Oð |O�ñ |Oô |Oð |Oð~ð ð ð ð r   