Ë
    ômxiƒ#  ã                  ó  — 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%y)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                  óT   — e Zd ZU ej                  ZdZ e«       Zde	d<   e
dd„«       Zy)Ú	JSONDtypeÚjsonzMapping[str, Any]Úna_valuec                ó   — t         S )zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        )Ú	JSONArray)Úclss    úX/home/htdocs/ttos/venv/lib/python3.12/site-packages/pandas/tests/extension/json/array.pyÚconstruct_array_typezJSONDtype.construct_array_type;   s
   € ô Ðó    N)Úreturnztype_t[JSONArray])Ú__name__Ú
__module__Ú__qualname__r   r   ÚtypeÚnamer   r   Ú__annotations__Úclassmethodr   © r   r   r   r   6   s/   … Ø�;‰;€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è  NFc                óæ   — |D ]M  }t        || j                  j                  «      rŒ$t        dt	        | j                  j                  «      z   «      ‚ || _        | j
                  x| _        | _        y )NzAll values must be of type )Ú
isinstanceÚdtyper    Ú	TypeErrorÚstrÚdataÚ_itemsÚ_data)ÚselfÚvaluesr(   ÚcopyÚvals        r   Ú__init__zJSONArray.__init__K   s`   € Øò 	VˆCÜ˜c 4§:¡:§?¡?Õ3ÜÐ =ÄÀDÇJÁJÇOÁOÓ@TÑ TÓUÐUð	Vð ˆŒ	ð $(§9¡9Ð,ˆŒ�d•jr   ©r(   r0   c               ó   —  | |«      S ©Nr$   )r   Úscalarsr(   r0   s       r   Ú_from_sequencezJSONArray._from_sequenceX   s   € á�7‹|Ðr   c                óV   —  | |D �cg c]  }|dk7  sŒ	t        |«      ‘Œ c}«      S c c}w )Nr$   )r   )r   r/   ÚoriginalÚxs       r   Ú_from_factorizedzJSONArray._from_factorized\   s%   € á¨Ö; A°1¸³7”H˜Q•KÒ;Ó<Ð<ùÒ;s   ‡
&’&c                óü  — t        |t        «      rt        |«      }t        |t        j                  «      r| j
                  |   S t        |t        «      r)|t        d «      k(  r t        | «      | j
                  «      S t        |t        «      r t        | «      | j
                  |   «      S t        |«      st        d«      ‚t        j                  j                  j                  | |«      }t        |j                  «      rFt        | «      j!                  t#        | |«      D ��cg c]
  \  }}|sŒ	|‘Œ c}}| j                  ¬«      S  t        | «      |D �cg c]  }| j
                  |   ‘Œ c}«      S c c}}w c c}w )Nzuonly integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices©r(   )r'   Útupler   ÚnumbersÚIntegralr+   Úslicer    r   Ú
IndexErrorÚpdÚapiÚindexersÚcheck_array_indexerr
   r(   r7   Úzip)r.   Úitemr:   ÚmÚis        r   Ú__getitem__zJSONArray.__getitem__`   s2  € Ü�dœEÔ"Ü,¨TÓ2ˆDä�dœG×,Ñ,Ô-Ø—9‘9˜T‘?Ð"Ü˜œeÔ$¨´°t³Ò)<à”4˜“:˜dŸi™iÓ(Ð(Ü˜œeÔ$à”4˜“:˜dŸi™i¨™oÓ.Ð.Ü˜dÔ#ô ðLóð ô
 —6‘6—?‘?×6Ñ6°t¸TÓBˆDÜ˜TŸZ™ZÔ(Ü˜D“z×0Ñ0Ü#& t¨T£?×8™4˜1˜a²a’QÓ8ÀÇ
Á
ð 1ó ð ð ”4˜“:°TÖ:°˜tŸy™y¨›|Ò:Ó;Ð;ùó 9ùò ;s   Ä$
E3
Ä/E3
ÅE9c                óT  — t        |t        j                  «      r|| j                  |<   y t        |t	        | «      t
        j                  f«      st        j                  |g«      }t        |t        j                  «      rd|j                  dk(  rUt        t        ||«      «      D ]<  \  }\  }}|sŒt        || j                  j                  «      sJ ‚|| j                  |<   Œ> y t        ||«      D ]6  \  }}t        || j                  j                  «      sJ ‚|| j                  |<   Œ8 y )NÚbool)r'   r?   r@   r+   r    r   ÚSequenceÚ	itertoolsÚcycleÚnpÚndarrayr(   Ú	enumeraterG   )r.   ÚkeyÚvaluerJ   ÚkÚvs         r   Ú__setitem__zJSONArray.__setitem__|   sé   € Ü�cœ7×+Ñ+Ô,Ø"ˆD�I‰I�cŠNä˜e¤d¨4£j´#·,±,Ð%?Ô@ä!Ÿ™¨¨Ó0�ä˜#œrŸz™zÔ*¨s¯y©y¸FÒ/Bä!*¬3¨s°E«?Ó!;ò )‘I�A‘v˜˜1ÚÜ)¨!¨T¯Z©Z¯_©_Ô=Ð=Ð=Ø'(˜Ÿ	™	 !šñ)ô
    U›Oò %‘D�A�qÜ% a¨¯©¯©Ô9Ð9Ð9Ø#$�D—I‘I˜a’Lñ%r   c                ó,   — t        | j                  «      S r5   )Úlenr+   ©r.   s    r   Ú__len__zJSONArray.__len__�   s   € Ü�4—9‘9‹~Ðr   c                ó   — t         S r5   ©ÚNotImplemented©r.   Úothers     r   Ú__eq__zJSONArray.__eq__’   ó   € ÜÐr   c                ó   — t         S r5   r^   r`   s     r   Ú__ne__zJSONArray.__ne__•   rc   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.)Ú
stacklevelr=   r3   )
ÚwarningsÚwarnÚFutureWarningr   Úobjectr	   ÚlistrQ   Úasarrayr+   )r.   r(   r0   s      r   Ú	__array__zJSONArray.__array__˜   sx   € Ø�5‰=Ü�M‰Mð2ô Ü+Ó-õ	ð ˆ=ÜˆEØ”FŠ?ä:¼4À»:ÓFÐFØˆ<ä—:‘:˜dŸi™i¨uÔ5Ð5Ü�z‰z˜$Ÿ)™)¨5°tÔ<Ð<r   c                ó@   — t        j                  | j                  «      S r5   )ÚsysÚ	getsizeofr+   r[   s    r   ÚnbyteszJSONArray.nbytes¯   s   € ä�}‰}˜TŸY™YÓ'Ð'r   c                ó    — t        j                  | j                  D �cg c]  }|| j                  j                  k(  ‘Œ c}t
        ¬«      S c c}w )Nr=   )rQ   Úarrayr+   r(   r   rM   )r.   r:   s     r   ÚisnazJSONArray.isna³   s4   € Ü�x‰x¸4¿9¹9ÖE°a˜˜dŸj™j×1Ñ1Ó1ÒEÌTÔRÐRùÒEs   ž Ac                óî  — t        j                  |«      }d}|rV|€| j                  j                  }|dk  j	                  «       rt
        ‚	 |D �cg c]  }|dk7  r| j                  |   n|‘Œ }}n	 |D �cg c]  }| j                  |   ‘Œ }}t        | «      j                  || j                  ¬«      S c c}w # t        $ r}t        |«      |‚d }~ww xY wc c}w # t        $ r}t        |«      |‚d }~ww xY w)NzIIndex is out of bounds or cannot do a non-empty take from an empty array.éÿÿÿÿr=   )
rQ   rm   r(   r   ÚanyÚ
ValueErrorr+   rB   r    r7   )r.   ÚindexerÚ
allow_fillÚ
fill_valueÚmsgÚlocÚoutputÚerrs           r   ÚtakezJSONArray.take¶   s  € ô —*‘*˜WÓ%ˆð2ð 	ñ
 ØÐ!Ø!ŸZ™Z×0Ñ0�
à˜"‘×!Ñ!Ô#Ü Ð ð/àKRöØDG c¨R¢i�D—I‘I˜c’N°ZÑ?ð�ñ ð/Ø4;Ö<¨S˜$Ÿ)™) C›.Ð<�Ð<ô �D‹z×(Ñ(¨°t·z±zÐ(ÓBÐBùòøô ò /Ü  “o¨3Ð.ûð/üò =øÜò /Ü  “o¨3Ð.ûð/úsT   ÁB8 ÁB3Á-B8 Á1C Á5CÂC Â3B8 Â8	CÃCÃCÃC Ã	C4Ã#C/Ã/C4c                ó>   —  t        | «      | j                  d d  «      S r5   )r    r+   r[   s    r   r0   zJSONArray.copyÔ   s   € ØŒt�D‹z˜$Ÿ)™)¡A˜,Ó'Ð'r   Tc                óÚ  — ddl m} t        |«      }t        |t	        | j
                  «      «      r#|| j
                  k(  r|r| j                  «       S | S t        ||«      r$|j                  «       }|j                  | |d¬«      S |s.t        j                  | D �cg c]  }t        |«      ‘Œ c}|¬«      S t        j                  | D �cg c]  }t        |«      ‘Œ c}||¬«      S c c}w c c}w )Nr   )ÚStringDtypeFr3   r=   )Úpandas.core.arrays.string_r„   r   r'   r    r(   r0   r   r7   rQ   rm   Údictrt   )r.   r(   r0   r„   Úarr_clsr:   s         r   ÚastypezJSONArray.astype×   sÀ   € õ 	;ä˜UÓ#ˆä�eœT $§*¡*Ó-Ô.°5¸D¿J¹JÒ3FÙØ—y‘y“{Ð"ØˆKÜ˜˜{Ô+Ø×0Ñ0Ó2ˆGØ×)Ñ)¨$°eÀ%Ð)ÓHÐHÙÜ—:‘:°Ö5¨1œt A�wÒ5¸UÔCÐCä—8‘8¨dÖ3¨œT !�WÒ3¸5ÀtÔLÐLùò 6ùâ3s   ÂC#ÃC(c           	     óÄ   —  t        | «      | j                  D �ch c]  }t        |j                  «       «      ’Œ c}D �cg c]  }t	        |«      ‘Œ c}«      S c c}w c c}w r5   )r    r+   r>   Úitemsr†   )r.   Údr:   s      r   ÚuniquezJSONArray.uniqueë   sD   € ð Œt�D‹zÀtÇyÁyÖ,QÀ!¬U°1·7±7³9Õ-=Ò,QÖR qœ4 �7ÒRÓSÐSùÒ,QùÒRs
   š A¿Ac                óp   — t        t        j                  j                  d„ |D «       «      «      } | |«      S )Nc              3  ó4   K  — | ]  }|j                   –— Œ y ­wr5   )r+   )Ú.0r:   s     r   ú	<genexpr>z.JSONArray._concat_same_type.<locals>.<genexpr>ò   s   è ø€ Ò1L¸Q°!·&µ&Ñ1Lùs   ‚)rl   rO   ÚchainÚfrom_iterable)r   Ú	to_concatr+   s      r   Ú_concat_same_typezJSONArray._concat_same_typeð   s+   € ä”I—O‘O×1Ñ1Ñ1LÀ)Ô1LÓLÓMˆÙ�4‹yÐr   c                óf   — | j                  «       }t        |«      dk(  r|j                  «       }|dfS )Nr   r$   )Ú_values_for_argsortrZ   Úravel)r.   Úfrozens     r   Ú_values_for_factorizezJSONArray._values_for_factorizeõ   s1   € Ø×)Ñ)Ó+ˆÜˆv‹;˜!Òà—\‘\“^ˆFØ�rˆzÐr   c                ón   — | D �cg c]  }t        |j                  «       «      ‘Œ }}t        |«      S c c}w r5   )r>   rŠ   r	   )r.   r:   r˜   s      r   r–   zJSONArray._values_for_argsortü   s0   € à,0Ö1 q”%˜Ÿ™›	Õ"Ð1ˆÐ1Ü6°vÓ>Ð>ùò 2s   … 2)Úlimitr0   c               ó(   •— t         ‰| �  |||¬«      S )N)Úmethodr›   r0   )ÚsuperÚ_pad_or_backfill)r.   r�   r›   r0   Ú	__class__s       €r   rŸ   zJSONArray._pad_or_backfill  s   ø€ ä‰wÑ'¨v¸UÈÐ'ÓNÐNr   )NF)r   ÚNone)r   Úint)NN)FN)T)r   r   r   r   r(   Ú__array_priority__r2   r#   r7   r;   rK   rX   r\   rb   re   rn   Úpropertyrr   ru   r�   r0   rˆ   rŒ   r”   r™   r–   rŸ   Ú__classcell__)r    s   @r   r   r   G   sÂ   ø„ Ù‹K€EØÐô-ð Ø.2¸ó ó ðð ñ=ó ð=ò<ó8%ó&òòó=ð. ò(ó ð(òSóCò<(óMò(Tð
 ñó ðòò?ð
 15¸4÷ Oò Or   r   c                 óV  — t         j                  j                  d«      } t        d«      D �cg c]l  }t	        t        | j                  dd«      «      D �cg c]<  }| j                  t        t        j                  «      «      | j                  dd«      f‘Œ> c}«      ‘Œn c}S c c}w c c}w )Né   éd   r   é
   )
rQ   ÚrandomÚdefault_rngÚranger   ÚintegersÚchoicerl   ÚstringÚascii_letters)ÚrngÚ_s     r   Ú	make_datar³     s”   € ä
�)‰)×
Ñ
 Ó
"€Cô �s“öð ô 	ô ˜sŸ|™|¨A¨rÓ2Ó3öàð —‘œD¤×!5Ñ!5Ó6Ó7¸¿¹ÀaÈÓ9MÒNòõ	
òð ùòùòs   ­'B&ÁAB!Â	B&Â!B&)&Ú__doc__Ú
__future__r   Úcollectionsr   r   rO   r?   r¯   rp   Útypingr   r   rh   ÚnumpyrQ   Úpandas.util._exceptionsr   Úpandas.core.dtypes.castr	   Úpandas.core.dtypes.commonr
   r   r   ÚpandasrC   Úpandas.api.extensionsr   r   Úpandas.core.indexersr   Úcollections.abcr   Úpandas._typingr   r   r   r³   r$   r   r   ú<module>rÁ      sy   ðñõ #÷ó Û Û Û 
÷ó ã å 4å K÷ñ ó ÷õ ;áÝ'å%ô�ô ô"|O�ô |Oó~r   