Ë
    ž…jV$  ã                  óô   — 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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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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)Ú'construct_1d_object_array_from_listlike)Úis_bool_dtypeÚis_list_likeÚpandas_dtype)ÚExtensionArrayÚExtensionDtype)Úgetitem_returns_viewÚunpack_tuple_and_ellipses)ÚMapping)Útype_tc                  óJ   — e Zd ZU ej                  ZdZ e«       Zde	d<   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©Úselfs    úb/root/aria/tools/markitdown-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__r   © r   r   r   r   7   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	„ 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)r   Ú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(   r/   c               ó   —  | |«      S ©Nr$   )ÚclsÚscalarsr(   r/   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   )r5   r.   ÚoriginalÚxs       r   Ú_from_factorizedzJSONArray._from_factorized\   s%   € á¨Ö; A°1¸³7”H˜Q•KÒ;Ó<Ð<ùÒ;s   ‡
&’&c                óâ   — 	 t        | «      j                  || j                  ¬«      S # t        t        f$ r7 ddlm} t        j                  |t        ¬«      }|j                  |d¬«      cY S w xY w)N©r(   r   )ÚlibT)Úconvert_non_numeric)r!   r7   r(   Ú
ValueErrorr)   Úpandas._libsr>   ÚnpÚasarrayÚobjectÚmaybe_convert_objects)r   r.   r>   s      r   Ú_cast_pointwise_resultz JSONArray._cast_pointwise_result`   se   € ð	OÜ˜“:×,Ñ,¨V¸4¿:¹:Ð,ÓFÐFøÜœIÐ&ò 	Oå(ä—Z‘Z ¬fÔ5ˆFØ×,Ñ,¨VÈÐ,ÓNÒNð	Oús   ‚%( ¨AA.Á-A.c                ód  — t        |t        «      rt        |«      }t        |t        j                  «      r| j
                  |   S t        |t        «      r<|t        d «      k(  r. t        | «      | j
                  «      }| j                  |_        |S t        |t        «      r= t        | «      | j
                  |   «      }t        | |«      r| j                  |_        |S t        |«      st        d«      ‚t        j                  j                  j                  | |«      }t!        |j"                  «      rHt        | «      j%                  t'        | |d¬«      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 indicesT©Ústrictr=   )r'   Útupler   ÚnumbersÚIntegralr+   Úslicer!   Ú	_readonlyr   r
   Ú
IndexErrorÚpdÚapiÚindexersÚcheck_array_indexerr	   r(   r7   Úzip)r   ÚitemÚresultr:   ÚmÚis         r   Ú__getitem__zJSONArray.__getitem__j   s`  € Ü�dœEÔ"Ü,¨TÓ2ˆDä�dœG×,Ñ,Ô-Ø—9‘9˜T‘?Ð"Ü˜œeÔ$¨´°t³Ò)<à”T˜$“Z §	¡	Ó*ˆFØ#Ÿ~™~ˆFÔØˆMÜ˜œeÔ$à”T˜$“Z §	¡	¨$¡Ó0ˆFÜ# D¨$Ô/Ø#'§>¡>�Ô ØˆMÜ˜dÔ#ô ðLóð ô
 —6‘6—?‘?×6Ñ6°t¸TÓBˆDÜ˜TŸZ™ZÔ(Ü˜D“z×0Ñ0Ü#& t¨T¸$Ô#?×E™4˜1˜aÂ1’QÓEÈTÏZÉZð 1ó ð ð ”4˜“:°TÖ:°˜tŸy™y¨›|Ò:Ó;Ð;ùó Fùò ;s   Å
F'
Å#F'
Æ
F-c                óŠ  — | j                   rt        d«      ‚t        |t        j                  «      r|| j
                  |<   y t        |t        | «      t        j                  f«      st        j                  |g«      }t        |t        j                  «      rf|j                  dk(  rWt        t        ||d¬«      «      D ]<  \  }\  }}|sŒt        || j                  j                  «      sJ ‚|| j
                  |<   Œ> y t        ||d¬«      D ]6  \  }}t        || j                  j                  «      sJ ‚|| j
                  |<   Œ8 y )NzCannot modify read-only arrayÚboolFrH   )rN   r@   r'   rK   rL   r+   r!   r   ÚSequenceÚ	itertoolsÚcyclerB   Úndarrayr(   Ú	enumeraterT   )r   ÚkeyÚvaluerX   Ú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À%Ô+HÓ!Iò )‘I�A‘v˜˜1ÚÜ)¨!¨T¯Z©Z¯_©_Ô=Ð=Ð=Ø'(˜Ÿ	™	 !šñ)ô
    U°5Ô9ò %‘D�A�qÜ% a¨¯©¯©Ô9Ð9Ð9Ø#$�D—I‘I˜a’Lñ%r   c                ó,   — t        | j                  «      S r4   )Úlenr+   r   s    r   Ú__len__zJSONArray.__len__¡   s   € Ü�4—9‘9‹~Ðr   c                ó   — t         S r4   ©ÚNotImplemented©r   Úothers     r   Ú__eq__zJSONArray.__eq__¤   ó   € ÜÐr   c                ó   — t         S r4   rj   rl   s     r   Ú__ne__zJSONArray.__ne__§   ro   r   c                óô   — |du rt        d«      ‚|€t        }|t        k(  rt        t        | «      «      S |€!t	        j
                  | j                  |¬«      S t	        j
                  | j                  ||¬«      S )NFz:Unable to avoid copy while creating an array as requested.r=   r2   )r@   rD   r   ÚlistrB   rC   r+   )r   r(   r/   s      r   Ú	__array__zJSONArray.__array__ª   sl   € Ø�5‰=ÜØLóð ð ˆ=ÜˆEØ”FŠ?ä:¼4À»:ÓFÐFØˆ<ä—:‘:˜dŸi™i¨uÔ5Ð5Ü�z‰z˜$Ÿ)™)¨5°tÔ<Ð<r   c                ó@   — t        j                  | j                  «      S r4   )Ú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=   )rB   Úarrayr+   r(   r   r[   )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=   )
rB   rC   r(   r   Úanyr@   r+   rO   r!   r7   )r   ÚindexerÚ
allow_fillÚ
fill_valueÚmsgÚlocÚoutputÚerrs           r   ÚtakezJSONArray.takeÀ   sÿ   € ô —*‘*˜WÓ%ˆàWð 	ñ ØÐ!Ø!Ÿ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 r4   )r!   r+   r   s    r   r/   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   )ÚStringDtypeFr2   r=   )Úpandas.core.arrays.string_r‰   r   r'   r!   r(   r/   r   r7   rB   rC   Údictrz   )r   r(   r/   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 r4   )r!   r+   rJ   Ú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r4   )r+   )Ú.0r:   s     r   ú	<genexpr>z.JSONArray._concat_same_type.<locals>.<genexpr>û   s   è ø€ Ò1L¸Q°!·&µ&Ñ1Lùs   ‚)rs   r]   ÚchainÚfrom_iterable)r5   Ú	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_argsortrg   Ú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 r4   )rJ   r�   r   )r   r:   r�   s      r   r›   zJSONArray._values_for_argsort  s0   € à,0Ö1 q”%˜Ÿ™›	Õ"Ð1ˆÐ1Ü6°vÓ>Ð>ùò 2s   … 2)Úlimitr/   c               ó(   •— t         ‰| �  |||¬«      S )N)Úmethodr    r/   )ÚsuperÚ_pad_or_backfill)r   r¢   r    r/   Ú	__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__r1   Úclassmethodr7   r;   rF   rY   re   rh   rn   rq   rt   Úpropertyrx   r{   r†   r/   r�   r‘   r™   rž   r›   r¤   Ú__classcell__)r¥   s   @r   r   r   G   sÉ   ø„ Ù‹K€EØÐô-ð Ø.2¸ó ó ðð ñ=ó ð=òOò<óB%ó,òòó=ð ò(ó ð(òSóCò:(óMò(Tð
 ñó ðòò?ð
 15¸4÷ Oò Or   r   c                óV  — t         j                  j                  d«      }t        | «      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é   r   é
   éd   )
rB   ÚrandomÚdefault_rngÚranger   ÚintegersÚchoicers   ÚstringÚascii_letters)ÚnÚrngÚ_s      r   Ú	make_datarº     s”   € ä
�)‰)×
Ñ
 Ó
"€Cô �q“öð ô 	ô ˜sŸ|™|¨A¨rÓ2Ó3öàð —‘œD¤×!5Ñ!5Ó6Ó7¸¿¹ÀaÈÓ9MÒNòõ	
òð ùòùòs   ­'B&ÁAB!Â	B&Â!B&)r·   r§   )$Ú__doc__Ú
__future__r   Úcollectionsr   r   r]   rK   rµ   rv   Útypingr   r   ÚnumpyrB   Úpandas.core.dtypes.castr   Úpandas.core.dtypes.commonr	   r
   r   ÚpandasrP   Úpandas.api.extensionsr   r   Úpandas.core.indexersr   r   Úcollections.abcr   Úpandas._typingr   r   r   rº   r$   r   r   ú<module>rÇ      su   ðñõ #÷ó Û Û Û 
÷ó
 å K÷ñ ó ÷÷ñ
 Ý'å%ô�ô ô EO�ô EOôPr   