Ë
    u™ãj|ã  ã                   óŽ  — d Z ddlZddlmZ ddlm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mZmZ ddlmZ ddlmc mZ ddlZddlmZ  dd	l!m"Z" dd
l#m$Z$m%Z%m&Z&m'Z'm(Z( 	 ddl)Z)dZ*	 ddl,Z,dZ- e"e,j\                  «       e"d«      k  Z/ej`                  jc                  d«      gZ2 ejf                   ejh                  dej`                  jk                  e- d¬«      ¬«       ejh                  dej`                  jk                  e* d¬«      ¬«      g¬«      d„ «       Z6ejf                  d„ «       Z7ejf                  d„ «       Z8ejf                  d„ «       Z9ejf                  d„ «       Z:ejf                  d„ «       Z; ejf                   ej                  ddddd d!ejx                  ¬"«       ej                  ddddd d!ejz                  j|                  ¬"«       ej                  ddddd d!ejz                  j~                  ¬"«      ej                  j�                  d#d$«      ej                  j�                  d%d$«      ej                  j�                  d&d$«      ej                  j�                  d'd$«      g¬«      d(„ «       ZA	 	 	 	 	 	 	 	 	 dCd)„ZBd*„ ZCd+„ ZDd,„ ZEd-„ ZFej`                  j�                   e«       d.¬«      d/„ «       ZHd0„ ZId1„ ZJd2„ ZKej`                  j�                   e«       d.¬«      d3„ «       ZLej`                  j�                   e«       xr e*xr e/d4¬«      d5„ «       ZM G d6„ d7«      ZN G d8„ d9eN«      ZO G d:„ d;eN«      ZPej`                  jc                  d<«       G d=„ d>eN«      «       ZQej`                  j�                  ed?¬«       ej¤                  dd@¬A«      dB„ «       «       ZSy# e+$ r dZ*Y �Œ>w xY w# e+$ r dZ-dZ/Y �Œ,w xY w)Dztest parquet compaté    N)ÚDecimal)ÚBytesIO)Úusing_string_dtype)ÚWASM)Úpa_version_under17p0Úpa_version_under18p0Úpa_version_under19p0Úpa_version_under20p0Úpa_version_under26p0)ÚPandas4Warning)ÚVersion)ÚFastParquetImplÚPyArrowImplÚ
get_engineÚread_parquetÚ
to_parquetTFz2026.5.0z@ignore:The 'fastparquet' engine is deprecated:DeprecationWarningÚfastparquetúfastparquet is not installed©Úreason©ÚmarksÚpyarrowúpyarrow is not installed)Úparamsc                 ó   — | j                   S ©N©Úparam©Úrequests    úg/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/pandas/tests/io/test_parquet.pyÚenginer#   ?   s   € ð$ �=‰=Ðó    c                  ó:   — t         st        j                  d«       y)Nr   r   )Ú_HAVE_PYARROWÚpytestÚskip© r$   r"   Úpar*   T   s   € åÜ�‰Ð.Ô/Ør$   c                  ó:   — t         st        j                  d«       y)Nr   r   )Ú_HAVE_FASTPARQUETr'   r(   r)   r$   r"   Úfpr-   [   s   € åÜ�‰Ð2Ô3Ør$   c                  ód   — t        j                  g d¢ddœt        j                  ddg«      ¬«      S )N©é   é   é   Úfoo©ÚAÚBr5   r6   ©Úcolumns)ÚpdÚ	DataFrameÚIndexr)   r$   r"   Ú	df_compatr<   b   s%   € ä�<‰<ši¨eÑ4¼b¿h¹hÈÈSÀzÓ>RÔSÐSr$   c            
      óÎ   — t        j                  t        d«      t        t        dd«      «      t	        j
                  ddd¬«      g d¢t        j                  d	d
¬«      dœ«      } | S )NÚabcr0   é   ç      @ç      @Úfloat64©Údtype©TFTÚ20130101r2   ©Úperiods)ÚaÚbÚdÚeÚf)r9   r:   ÚlistÚrangeÚnpÚarangeÚ
date_range)Údfs    r"   Údf_cross_compatrT   g   sR   € ä	�‰ä�e“Ü”e˜A˜q“kÓ"ä—‘˜3 ¨9Ô5Ú$Ü—‘˜z°1Ô5ñ
	
ó
€Bð €Ir$   c                  óÞ  — t        j                  t        d«      dt        j                  dgg d¢g d¢g d¢t        t        dd«      «      t        j                  d	d
«      j                  d«      t        j                  ddd¬«      dt        j                  dgg d¢t        j                  dd	d¬«      t        j                  d«      t         j                  t        j                  d«      gdœ«      S )Nr>   rI   Úc©rI   NrV   )ó   fooó   bars   baz©r3   ÚbarÚbazr0   r?   r2   é   Úu1r@   rA   rB   rC   ç       @ç      @rE   rF   Úns©rH   ÚunitÚ20130103)ÚstringÚstring_with_nanÚstring_with_noneÚbytesÚunicodeÚintÚuintÚfloatÚfloat_with_nanÚboolÚdatetimeÚdatetime_with_nat)r9   r:   rN   rP   ÚnanrO   rQ   ÚastyperR   Ú	TimestampÚNaTr)   r$   r"   Údf_fullru   y   s±   € ä�<‰<ä˜5“kØ #¤R§V¡V¨SÐ1Ú 0Ú-Ú,Üœ˜a ›Ó$Ü—I‘I˜a “O×*Ñ*¨4Ó0Ü—Y‘Y˜s C¨yÔ9Ø"¤B§F¡F¨CÐ0Ú'ÜŸ™ j¸!À$ÔGä—‘˜ZÓ(Ü—‘Ü—‘˜ZÓ(ð"ñ	
óð r$   iã  r0   r?   é   é)   é   )Útzinfoz2019-01-04T16:41:24+0200z%Y-%m-%dT%H:%M:%S%zz2019-01-04T16:41:24+0215z2019-01-04T16:41:24-0200z2019-01-04T16:41:24-0215c                 ó   — | j                   S r   r   r    s    r"   Útimezone_aware_date_listr{   ‘   s   € ð �=‰=Ðr$   c                 óÜ   ‡ ‡‡‡‡‡‡‡	— t        |t        j                  «      st        d«      ‚‰xs ddiŠ‰xs i Š‰€‰ Š|r
|‰d<   |‰d<   ˆ	ˆˆˆ ˆˆˆˆfd„}‰€|Š ||
«       y ||
«       y)a  Verify parquet serializer and deserializer produce the same results.

    Performs a pandas to disk and disk to pandas round trip,
    then compares the 2 resulting DataFrames to verify equality.

    Parameters
    ----------
    df: Dataframe
    engine: str, optional
        'pyarrow' or 'fastparquet'
    path: str, optional
    write_kwargs: dict of str:str, optional
    read_kwargs: dict of str:str, optional
    expected: DataFrame, optional
        Expected deserialization result, otherwise will be equal to `df`
    check_names: list of str, optional
        Closed set of column names to be compared
    check_like: bool, optional
        If True, ignore the order of index & columns.
    repeat: int, optional
        How many times to repeat the test
    z temp_file must be a pathlib.PathÚcompressionNr#   c                 ó¾   •— t        | «      D ]N  } ‰j                  ‰fi ‰
¤Ž t        ‰fi ‰	¤Ž}d‰v rd ‰j                  d<   t	        j
                  |‰‰‰‰¬«       ŒP y )Nrf   ©r0   rf   )Úcheck_namesÚ
check_likeÚcheck_dtype)rO   r   r   ÚlocÚtmÚassert_frame_equal)ÚrepeatÚ_Úactualr‚   r�   r€   rS   ÚexpectedÚpathÚread_kwargsÚwrite_kwargss      €€€€€€€€r"   Úcomparez!check_round_trip.<locals>.compareÏ   sl   ø€ Ü�v“ò 	ˆAØˆB�M‰M˜$Ñ/ ,Ò/Ü! $Ñ6¨+Ñ6ˆFà  HÑ,Ø59�—‘Ð1Ñ2Ü×!Ñ!ØØØ'Ø%Ø'öñ	r$   )Ú
isinstanceÚpathlibÚPathÚ
ValueError)rS   Ú	temp_filer#   rŠ   rŒ   r‹   r‰   r€   r�   r‚   r†   r�   s   `  ```````  r"   Úcheck_round_tripr“       s   ÿ€ ôF �i¤§¡Ô.ÜÐ;Ó<Ð<ØÒ8 M°4Ð#8€LØÒ# €KàÐØˆáØ!'ˆ�XÑØ &ˆ�HÑ÷ó ð €|ØˆÙ��á��r$   c                 ó€   — ddl m} |j                  | d¬«      }|j                  j                  j                  |k(  sJ ‚y)zÂCheck partitions of a parquet file are as expected.

    Parameters
    ----------
    path: str
        Path of the dataset.
    expected: iterable of str
        Expected partition names.
    r   NÚhive)Úpartitioning)Úpyarrow.datasetÚdatasetr–   ÚschemaÚnames)rŠ   r‰   Údsr˜   s       r"   Úcheck_partition_namesrœ   å   s9   € õ !à�j‰j˜¨FˆjÓ3€GØ×Ñ×&Ñ&×,Ñ,°Ò8Ð8Ñ8r$   c                 ó„   — d}t        j                  t        |¬«      5  t        | |dd«       d d d «       y # 1 sw Y   y xY w)Nz.engine must be one of 'pyarrow', 'fastparquet'©Úmatchr3   r[   )r'   Úraisesr‘   r“   )r<   r’   Úmsgs      r"   Útest_invalid_enginer¢   õ   s8   € Ø
:€CÜ	�‰”z¨Ô	-ñ =Ü˜ I¨u°eÔ<÷=÷ =ñ =ús   ž6¶?c                 ó  — d}|}t        j                  t        |dd¬«      5  | j                  |d¬«       d d d «       t        j                  t        |dd¬«      5  t	        |d¬«       d d d «       y # 1 sw Y   Œ=xY w# 1 sw Y   y xY w)Nzengine='auto' is deprecatedF)rŸ   Úraise_on_extra_warningsÚcheck_stacklevelÚauto©r#   )r„   Úassert_produces_warningr   r   r   )r<   r*   r’   r¡   rŠ   s        r"   Útest_engine_auto_deprecationr©   û   s’   € à
'€CØ€DÜ	×	#Ñ	#ÜØØ %Øô	
ñ 2ð 	×Ñ˜T¨&ÐÔ1÷2ô 
×	#Ñ	#ÜØØ %Øô	
ñ *ô 	�T &Õ)÷*ð *÷2ð 2ú÷*ð *ús   ¢A2ÁA>Á2A;Á>Bc                 óÂ   — |r&t         s | j                  j                  d«      | _        t        j                  dd«      5  t        | |«       d d d «       y # 1 sw Y   y xY w)NÚstrúio.parquet.enginer   )r	   r8   rr   r9   Úoption_contextr“   )r<   r*   Úusing_infer_stringr’   s       r"   Útest_options_pyr¯     sQ   € áÕ"6Ø%×-Ñ-×4Ñ4°UÓ;ˆ	Ôä	×	Ñ	Ð.°	Ó	:ñ /Ü˜ IÔ.÷/÷ /ñ /ús   ¿AÁAúTODO(infer_string) fastparquetc                 óÖ   — d}t        j                  dd«      5  t        j                  t        |¬«      5  t        | |«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nú&The 'fastparquet' engine is deprecatedr¬   r   rž   )r9   r­   r„   r¨   r   r“   )r<   r-   r’   r¡   s       r"   Útest_options_fpr³     sc   € ð 3€CÜ	×	Ñ	Ð.°Ó	>ñ 3Ü×'Ñ'¬¸cÔBñ 	3Ü˜Y¨	Ô2÷	3÷3ð 3÷	3ð 	3ú÷3ð 3ús"   ™AµAÁAÁA	ÁAÁA(c                 ór   — t        j                  dd«      5  t        | |«       d d d «       y # 1 sw Y   y xY w)Nr¬   r¦   )r9   r­   r“   )r<   r-   r*   r’   s       r"   Útest_options_autorµ   !  s4   € ô 
×	Ñ	Ð.°Ó	7ñ /Ü˜ IÔ.÷/÷ /ñ /ús   —-­6c                 óN  — d}t        t        d«      t        «      sJ ‚t        j                  t
        |¬«      5  t        t        d«      t        «      sJ ‚	 d d d «       t        j                  dd«      5  t        t        d«      t        «      sJ ‚t        t        d«      t        «      sJ ‚t        j                  t
        |¬«      5  t        t        d«      t        «      sJ ‚	 d d d «       d d d «       t        j                  dd«      5  t        j                  t
        |¬«      5  t        t        d«      t        «      sJ ‚	 d d d «       t        t        d«      t        «      sJ ‚t        j                  t
        |¬«      5  t        t        d«      t        «      sJ ‚	 d d d «       d d d «       t        j                  dd«      5  t        t        d«      t        «      sJ ‚t        t        d«      t        «      sJ ‚t        j                  t
        |¬«      5  t        t        d«      t        «      sJ ‚	 d d d «       d d d «       y # 1 sw Y   �ŒïxY w# 1 sw Y   �ŒoxY w# 1 sw Y   �ŒtxY w# 1 sw Y   �Œ*xY w# 1 sw Y   ŒÛxY w# 1 sw Y   ŒßxY w# 1 sw Y   Œ^xY w# 1 sw Y   y xY w)Nr²   r   rž   r   r¬   r¦   )	rŽ   r   r   r„   r¨   r   r   r9   r­   )r-   r*   r¡   s      r"   Útest_options_get_enginer·   (  sE  € Ø
2€Cä”j Ó+¬[Ô9Ð9Ð9Ü	×	#Ñ	#¤N¸#Ô	>ñ FÜœ* ]Ó3´_ÔEÐEÑE÷Fô 
×	Ñ	Ð.°	Ó	:ñ JÜœ* VÓ,¬kÔ:Ð:Ð:Üœ* YÓ/´Ô=Ð=Ð=Ü×'Ñ'¬¸cÔBñ 	JÜœj¨Ó7¼ÔIÐIÑI÷	J÷Jô 
×	Ñ	Ð.°Ó	>ñ JÜ×'Ñ'¬¸cÔBñ 	CÜœj¨Ó0´/ÔBÐBÑB÷	Cäœ* YÓ/´Ô=Ð=Ð=Ü×'Ñ'¬¸cÔBñ 	JÜœj¨Ó7¼ÔIÐIÑI÷	J÷	Jô 
×	Ñ	Ð.°Ó	7ñ JÜœ* VÓ,¬kÔ:Ð:Ð:Üœ* YÓ/´Ô=Ð=Ð=Ü×'Ñ'¬¸cÔBñ 	JÜœj¨Ó7¼ÔIÐIÑI÷	J÷Jð J÷!Fñ Fú÷	Jñ 	Jú÷Jñ Jú÷	Cñ 	Cú÷	Jð 	Jú÷	Jð Jú÷	Jð 	Jú÷Jð Jús‘   ¹IÁ4AIÃIÃ#IÄ	JÄ%I*Å>JÆ I7ÆJÇAJÈJÈ2JÉIÉI	ÉIÉI'É*I4	É/JÉ7J 	É<JÊJÊJ	ÊJÊJ$c                  óD  — ddl m}  | j                  d«      }| j                  d«      }t        sdn$t	        t
        j                  «      t	        |«      k  }t        sdn$t	        t        j                  «      t	        |«      k  }t        xr | }t        xr | }|sÖ|sÓ|r6d|› d�}t        j                  t        |¬«      5  t        d	«       d d d «       n1d
}t        j                  t        |¬«      5  t        d	«       d d d «       |r6d|› d�}t        j                  t        |¬«      5  t        d	«       d d d «       y d}t        j                  t        |¬«      5  t        d	«       d d d «       y y y # 1 sw Y   ŒuxY w# 1 sw Y   Œ�xY w# 1 sw Y   y xY w# 1 sw Y   y xY w)Nr   )ÚVERSIONSr   r   FzPandas requires version .z. or newer of .pyarrow.rž   r¦   z6Unable to find a usable engine; tried using: 'pyarrow'z. or newer of .fastparquet.z\Use pip, conda, or your preferred package management tool to install the fastparquet package)Úpandas.compat._optionalr¹   Úgetr&   r   r   Ú__version__r,   r   r'   r    ÚImportErrorr   )r¹   Ú
pa_min_verÚ
fp_min_verÚhave_pa_bad_versionÚhave_fp_bad_versionÚhave_usable_paÚhave_usable_fprŸ   s           r"   Ú"test_get_engine_auto_error_messagerÄ   C  s’  € õ 1ð —‘˜iÓ(€JØ—‘˜mÓ,€Jõ ñ 	ä”W×(Ñ(Ó)¬G°JÓ,?Ñ?ð õ !ñ 	ä”[×,Ñ,Ó-´¸
Ó0CÑCð ô #Ò>Ð+>Ð'>€NÜ&ÒBÐ/BÐ+B€Ná¡.áØ/°
¨|Ð;RÐSˆEÜ—‘œ{°%Ô8ñ #Ü˜6Ô"÷#ð #ð MˆEÜ—‘œ{°%Ô8ñ #Ü˜6Ô"÷#ñ Ø/°
¨|Ð;VÐWˆEÜ—‘œ{°%Ô8ñ #Ü˜6Ô"÷#ð #ð5ð ô —‘œ{°%Ô8ñ #Ü˜6Ô"÷#ð #ð) #1ˆ>÷#ð #ú÷#ð #ú÷
#ð #ú÷#ð #ús0   Ã E2Ã2E>Ä)F
ÅFÅ2E;Å>FÆ
FÆFc                 ó�  — d}| }|j                  ||d ¬«       t        j                  t        |¬«      5  t	        ||¬«      }d d d «       t        j
                  |«       t        j                  t        |¬«      5  t	        ||ddg¬«      }d d d «       t        j
                  ||ddg   «       y # 1 sw Y   ŒoxY w# 1 sw Y   Œ1xY w)Nr²   ©r#   r}   rž   r§   rI   rK   ©r#   r8   )r   r„   r¨   r   r   r…   ©rT   r*   r-   r’   r¡   rS   Úresults          r"   Útest_cross_engine_pa_fprÊ   q  s´   € ð 3€Cà	€BØ‡M�M�) B°D€MÔ9ä	×	#Ñ	#¤N¸#Ô	>ñ 4Ü˜i°Ô3ˆ÷4ä×Ñ˜& "Ô%ä	×	#Ñ	#¤N¸#Ô	>ñ HÜ˜i°¸SÀ#¸JÔGˆ÷Hä×Ñ˜& " c¨3 Z¡.Õ1÷4ð 4ú÷Hð Hús   ´B0Á;B<Â0B9Â<Cú3fastparquet < 2026.5.0 can't write ArrowStringArrayc                 ó0  — d}| }t        j                  t        |¬«      5  |j                  ||d ¬«       d d d «       t	        ||¬«      }t        j
                  ||«       t	        ||ddg¬«      }t        j
                  ||ddg   «       y # 1 sw Y   ŒXxY w)Nr²   rž   rÆ   r§   rI   rK   rÇ   )r„   r¨   r   r   r   r…   rÈ   s          r"   Útest_cross_engine_fp_parÍ   ‚  s�   € ð 3€CØ	€Bä	×	#Ñ	#¤N¸#Ô	>ñ >Ø
�‰�i¨¸ˆÔ=÷>ô ˜)¨BÔ/€FÜ×Ñ˜& "Ô%ä˜)¨B¸¸c¸
ÔC€FÜ×Ñ˜& " c¨3 Z¡.Õ1÷>ð >ús    BÂBc                   ó   — e Zd Zd„ Zd„ Zy)ÚBasec                 óz   — t        j                  ||¬«      5  t        |||d ¬«       d d d «       y # 1 sw Y   y xY w)Nrž   ©r}   )r'   r    r   )ÚselfrS   r#   ÚexcÚerr_msgÚtemp_file_paths         r"   Úcheck_error_on_writezBase.check_error_on_write–  s7   € ä�]‰]˜3 gÔ.ñ 	EÜ�r˜>¨6¸tÕD÷	E÷ 	Eñ 	Eús   ˜1±:c                 óv   — t        j                  |«      5  t        |||d ¬«       d d d «       y # 1 sw Y   y xY w)NrÑ   )r„   Úexternal_error_raisedr   )rÒ   rS   r#   rÓ   rÕ   s        r"   Úcheck_external_error_on_writez"Base.check_external_error_on_write›  s7   € ä×%Ñ% cÓ*ñ 	EÜ�r˜>¨6¸tÕD÷	E÷ 	Eñ 	Eús   –/¯8N)Ú__name__Ú
__module__Ú__qualname__rÖ   rÙ   r)   r$   r"   rÏ   rÏ   •  s   „ òEó
Er$   rÏ   c                   óô  — e Zd Zd„ Zd„ Zej                  j                  dg d¢«      d„ «       Zd„ Z	d„ Z
d„ Zd	„ Zej                  j                   e«       xr ed
¬«      ej                  j                  dddg«      d„ «       «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zej                  j                  dg d¢«      d„ «       Zej                  j4                  ej                  j6                  d„ «       «       Zy)Ú	TestBasicc                 óÌ   — t        j                  g d¢«      ddt        j                  d«      t        j                  g d¢«      fD ]  }d}| j                  ||t        ||«       Œ y )Nr/   r0   r3   rF   z+to_parquet only supports IO with DataFrames)r9   ÚSeriesrs   rP   ÚarrayrÖ   r‘   )rÒ   r#   r’   Úobjr¡   s        r"   Ú
test_errorzTestBasic.test_error¢  s]   € ä�I‰I’iÓ ØØÜ�L‰L˜Ó$Ü�H‰H’YÓð
ò 	OˆCð @ˆCØ×%Ñ% c¨6´:¸sÀIÕNñ	Or$   c           	      ó  — |dk(  r9t        «       r/|j                  t        j                  j	                  d¬«      «       t        j                  t        d«      t        t        dd«      «      dœ«      }dd	g|_	        t        |||«       y )
Nr   r°   r   r>   r0   r?   ©re   rj   r3   r[   )r   Úapplymarkerr'   ÚmarkÚxfailr9   r:   rN   rO   r8   r“   )rÒ   r#   r!   r’   rS   s        r"   Útest_columns_dtypeszTestBasic.test_columns_dtypes­  sq   € Ø�]Ò"Ô'9Ô';Ø×ÑÜ—‘×!Ñ!Ð)IÐ!ÓJôô �\‰\¤T¨%£[¼¼eÀAÀq»kÓ9JÑKÓLˆð ˜U�^ˆŒ
Ü˜˜Y¨Õ/r$   r}   )NÚgzipÚsnappyÚbrotlic                 óX   — t        j                  dg d¢i«      }t        |||d|i¬«       y )Nr5   r/   r}   ©rŒ   ©r9   r:   r“   )rÒ   r#   r}   r’   rS   s        r"   Útest_compressionzTestBasic.test_compression¸  s+   € ä�\‰\˜3¢	Ð*Ó+ˆÜØ�	˜6°ÀÐ0Lö	
r$   c           	      óN  — |dk(  r9t        «       r/|j                  t        j                  j	                  d¬«      «       t        j                  t        d«      t        t        dd«      «      dœ«      }t        j                  dt        d«      i«      }t        ||||d	dgi¬
«       y )Nr   r°   r   r>   r0   r?   rå   re   r8   ©r‰   r‹   )
r   ræ   r'   rç   rè   r9   r:   rN   rO   r“   )rÒ   r#   r!   r’   rS   r‰   s         r"   Útest_read_columnszTestBasic.test_read_columns¿  s�   € Ø�]Ò"Ô'9Ô';Ø×ÑÜ—‘×!Ñ!Ð)IÐ!ÓJôô �\‰\¤T¨%£[¼¼eÀAÀq»kÓ9JÑKÓLˆä—<‘< ¬4°«;Ð 7Ó8ˆÜØØØØØ" X JÐ/ö	
r$   c           
      óÐ   — t        j                  t        t        d«      «      t        d«      dœ«      }t        j                  dddgi«      }t	        ||||ddgid	gdgd
œd¬«       y )Nr?   Úaabb)rj   Úpartrj   r   r0   Úpartition_colsrö   )rö   ú==rI   )Úfiltersr8   )r‰   rŒ   r‹   r†   )r9   r:   rN   rO   r“   )rÒ   r#   Útmp_pathrS   r‰   s        r"   Útest_read_filterszTestBasic.test_read_filtersÐ  sm   € Ü�\‰\äœE !›H“~Ü˜V›ñó
ˆô —<‘< ¨¨A¨ Ó0ˆÜØØØØØ*¨V¨HÐ5Ø%8Ð$9ÀuÀgÑNØö	
r$   c                 óÄ  — t        j                  d«       t        j                  dg d¢i«      }t	        ||d«       g d¢t        j
                  ddd¬«      t        d	«      g d
¢g}|D ]P  }||_        t        |t        j                  «      r |j                  j                  d «      |_        t	        ||d«       ŒR g d¢|_        d|j                  _        t	        ||d«       y )Nr   r5   r/   )r1   r2   r?   rF   r2   ra   rb   r>   )r0   r2   r?   )r   r0   r1   r3   )r'   Úimportorskipr9   r:   r“   rR   rN   ÚindexrŽ   ÚDatetimeIndexÚ
_with_freqÚname)rÒ   r’   rS   Úindexesrþ   s        r"   Útest_write_indexzTestBasic.test_write_indexã  s¿   € Ü×Ñ˜IÔ&Ü�\‰\˜3¢	Ð*Ó+ˆÜ˜˜Y¨	Ô2ò Ü�M‰M˜*¨a°dÔ;Ü�‹KÚð	
ˆð ò 	7ˆEØˆBŒHÜ˜%¤×!1Ñ!1Ô2ØŸ8™8×.Ñ.¨tÓ4�”Ü˜R ¨IÕ6ð		7ò ˆŒØˆ�‰ŒÜ˜˜Y¨	Õ2r$   c                 ó¤   — |}t        j                  dg d¢i«      }t         j                  j                  g d¢«      }||_        t        |||«       y )Nr5   r/   ©)rI   r0   )rI   r1   )rJ   r0   )r9   r:   Ú
MultiIndexÚfrom_tuplesrþ   r“   )rÒ   r*   r’   r#   rS   rþ   s         r"   Útest_write_multiindexzTestBasic.test_write_multiindexú  sB   € àˆä�\‰\˜3¢	Ð*Ó+ˆÜ—‘×)Ñ)Ò*HÓIˆØˆŒÜ˜˜Y¨Õ/r$   z|With pyarrow<19 we pass a types_mapper to Table.to_pandas, which makes pyarrow drop the extension dtype of MultiIndex levelsr   ÚfreqÚDÚMc                 óØ   — t        j                  dg d¢i«      }t        j                  dd|¬«      }t         j                  j	                  g d¢|gddg¬	«      |_        t        |||«       y )
NÚVALUE)é   é   é!   z
2020-01-01r2   ©rH   r	  )r5   r6   ÚCÚIDÚDATE©rš   )r9   r:   Úperiod_ranger  Úfrom_arraysrþ   r“   )rÒ   r*   r’   r	  rS   rH   s         r"   Ú"test_write_multiindex_period_levelz,TestBasic.test_write_multiindex_period_level  s`   € ô �\‰\˜7¢LÐ1Ó2ˆÜ—/‘/ ,¸ÀÔEˆÜ—=‘=×,Ñ,Ú˜gÐ&¨t°V¨nð -ó 
ˆŒô 	˜˜Y¨Õ+r$   c           
      óÌ  — |}t        j                  dddd¬«      }t        j                  t        j                  j                  d«      j                  dt        |«      z  df«      t        d«      ¬	«      }t         j                  j                  d
dg|gddg¬«      }|j                  d ¬«      }||fD ]/  }||_        t        |||«       t        |||dddgi|ddg   ¬«       Œ1 y )Nz01-Jan-2018z01-Dec-2018ÚMSra   )r	  rc   r1   r2   ÚABCr7   ÚLevel1ÚLevel2ÚlevelÚdater  r8   r5   r6   ©r‹   r‰   )r9   rR   r:   rP   ÚrandomÚdefault_rngÚstandard_normalÚlenrN   r  Úfrom_productÚcopyrþ   r“   )	rÒ   r*   r’   r#   ÚdatesrS   Úindex1Úindex2rþ   s	            r"   Útest_multiindex_with_columnsz&TestBasic.test_multiindex_with_columns  sê   € ØˆÜ—‘˜m¨]ÀÈDÔQˆÜ�\‰\Ü�I‰I×!Ñ! !Ó$×4Ñ4°a¼#¸e»*±nÀaÐ5HÓIÜ˜“Kô
ˆô —‘×+Ñ+Ø˜Ð! 5Ð)°'¸6Ð1Bð ,ó 
ˆð —‘ 4�Ó(ˆØ˜fÐ%ò 
	ˆEØˆBŒHä˜R ¨FÔ3ÜØØØØ&¨¨c¨
Ð3Ø˜S #˜J™öñ	
	r$   c                 óL  — |dk(  r9t        «       r/|j                  t        j                  j	                  d¬«      «       t        j                  g d¢g d¢dœ«      }d ddœ}|j                  d	¬
«      }t        |||||¬«       t        j                  g d¢g d¢dœg d¢¬«      }t        |||||¬«       g d¢g d¢g}t        j                  t        t        d«      «      t        d«      D �cg c]  }| ‘Œ c}dœ|¬«      }|j                  d	¬
«      }t        |||||¬«       y c c}w )Nr   r°   r   r/   )ÚqÚrÚs)rI   rJ   F)r}   rþ   T)Údrop©rŒ   r‰   )ÚzyxÚwvuÚtsr©rþ   ©r[   r[   r\   r\   r3   r3   Úquxr6  ©ÚoneÚtwor8  r9  r8  r9  r8  r9  é   )r8  r9  )r   ræ   r'   rç   rè   r9   r:   Úreset_indexr“   rN   rO   )	rÒ   r#   r!   r’   rS   rŒ   r‰   ÚarraysÚis	            r"   Útest_write_ignoring_indexz#TestBasic.test_write_ignoring_index*  s  € Ø�]Ò"Ô'9Ô';Ø×ÑÜ—‘×!Ñ!Ð)IÐ!ÓJôô
 �\‰\¢	²Ñ@ÓAˆà'+°eÑ<ˆð —>‘> t�>Ó,ˆäØ�	˜6°Àxõ	
ô
 �\‰\Ú¢/Ñ2Ò:Oô
ˆô 	Ø�	˜6°Àxõ	
ò EÚDð
ˆô �\‰\Üœ˜q›“N¼¸a»Ö+A°1¨QªBÒ+AÑBÈ&ô
ˆð —>‘> t�>Ó,ˆÜØ�	˜6°Àxö	
ùò	 ,Bs   Ã)
D!
c                 ó0  — t         j                  j                  g d¢«      }t        j                  t        j
                  j                  d«      j                  d«      |¬«      }|dk(  r| j                  ||t        d|«       y |dk(  rt        |||«       y y )Nr  r1   )r?   r2   r7   r   úColumn name must be a stringr   )r9   r  r  r:   rP   r!  r"  r#  rÖ   Ú	TypeErrorr“   )rÒ   r#   r’   Ú
mi_columnsrS   s        r"   Útest_write_column_multiindexz&TestBasic.test_write_column_multiindexT  sƒ   € ä—]‘]×.Ñ.Ò/MÓNˆ
Ü�\‰\Ü�I‰I×!Ñ! !Ó$×4Ñ4°VÓ<Àjô
ˆð �]Ò"Ø×%Ñ%Ø�FœIÐ'EÀyõð �yÒ Ü˜R ¨FÕ3ð !r$   c                 ó$  — g d¢g d¢g}t        j                  t        j                  j	                  d«      j                  d«      |¬«      }ddg|j                  _        |dk(  r| j                  ||t        d	|«       y |d
k(  rt        |||«       y y )Nr5  )r0   r1   r0   r1   r0   r1   r0   r1   r1   ©r:  r:  r7   r  r  r   zColumn namer   )r9   r:   rP   r!  r"  r#  r8   rš   rÖ   r‘   r“   ©rÒ   r#   r’   r<  rS   s        r"   Ú&test_write_column_multiindex_nonstringz0TestBasic.test_write_column_multiindex_nonstringb  s‹   € ò
 EÚ$ð
ˆô �\‰\Ü�I‰I×!Ñ! !Ó$×4Ñ4°VÓ<Àfô
ˆð % hÐ/ˆ�
‰
ÔØ�]Ò"Ø×%Ñ% b¨&´*¸mÈYÕWØ�yÒ Ü˜R ¨FÕ3ð !r$   c                 óÞ   — |}g d¢g d¢g}t        j                  t        j                  j	                  d«      j                  d«      |¬«      }ddg|j                  _        t        |||«       y )Nr5  r7  r1   rE  r7   Ú	ColLevel1Ú	ColLevel2)	r9   r:   rP   r!  r"  r#  r8   rš   r“   ©rÒ   r*   r’   r#   r<  rS   s         r"   Ú#test_write_column_multiindex_stringz-TestBasic.test_write_column_multiindex_strings  sg   € ð ˆò EÚDð
ˆô �\‰\Ü�I‰I×!Ñ! !Ó$×4Ñ4°VÓ<Àfô
ˆð (¨Ð5ˆ�
‰
Ôä˜˜Y¨Õ/r$   c                 óÒ   — |}g d¢}t        j                  t        j                  j	                  d«      j                  d«      |¬«      }d|j                  _        t        |||«       y )N)r[   r\   r3   r6  r1   ©r:  r?   r7   Ú	StringCol)	r9   r:   rP   r!  r"  r#  r8   r  r“   rK  s         r"   Útest_write_column_index_stringz(TestBasic.test_write_column_index_string„  sV   € ð ˆò .ˆÜ�\‰\Ü�I‰I×!Ñ! !Ó$×4Ñ4°VÓ<Àfô
ˆð &ˆ�
‰
Œä˜˜Y¨Õ/r$   c                 ó  — g d¢}t        j                  t        j                  j	                  d«      j                  d«      |¬«      }d|j                  _        |dk(  r| j                  ||t        d|«       y t        |||«       y )N©r0   r1   r2   r?   r1   rN  r7   ÚNonStringColr   r@  )r9   r:   rP   r!  r"  r#  r8   r  rÖ   rA  r“   rF  s        r"   Ú!test_write_column_index_nonstringz+TestBasic.test_write_column_index_nonstring’  ss   € ò ˆÜ�\‰\Ü�I‰I×!Ñ! !Ó$×4Ñ4°VÓ<Àfô
ˆð )ˆ�
‰
ŒØ�]Ò"Ø×%Ñ%Ø�FœIÐ'EÀyõô ˜R ¨FÕ3r$   c                 óª  — t        j                  d«      }|dk(  r1t         j                  j                  d¬«      }|j	                  |«       t        j                  t        j                  g d¢d«      t        j                  g d¢d«      t        j                  g d¢«      t        j                  g d	¢«      t        j                  g d
¢d«      t        j                  g d¢d«      t        j                  g d¢d«      dœ«      }|j                  ||«       t        ||¬«      }t        ||d¬«      }|d   j                  t        j                  d«      k(  sJ ‚t        j                  t        j                  g d¢d¬«      t        j                  g d¢d¬«      t        j                  g d¢d¬«      t        j                  g d	¢d¬«      t        j                  g d
¢d¬«      t        j                  g d¢d¬«      t        j                  g d¢d¬«      dœ«      }	|dk(  r&|j                  dd¬«      }|	j                  dd¬«      }	t        j                   ||	«       y )Núpyarrow.parquetr   z.Fastparquet nullable dtype support is disabledr   ©r0   r1   r2   NÚint64Úuint8)rI   rJ   rV   N)TFTNrR  )ç      ð?r_   r`   NÚfloat32rB   )rI   rJ   rV   rK   rL   rM   Úgr§   Únumpy_nullable)r#   Údtype_backendrI   ÚInt64rC   ÚUInt8re   ÚbooleanÚFloat32ÚFloat64rV   r0   )Úaxis)r'   rý   rç   rè   ræ   r   Útablerá   Úwrite_tabler   rD   rP   r9   r:   r/  r„   r…   )
rÒ   r#   r!   r’   Úpqrç   re  Úresult1Úresult2r‰   s
             r"   Útest_dtype_backendzTestBasic.test_dtype_backend¢  sÃ  € Ü× Ñ Ð!2Ó3ˆà�]Ò"ô —;‘;×$Ñ$ØGð %ó ˆDð ×Ñ Ô%ä—‘ä—]‘]¢?°GÓ<Ü—]‘]¢?°GÓ<Ü—]‘]Ò#8Ó9Ü—]‘]Ò#<Ó=ä—]‘]¢<°Ó9ä—]‘]Ò#8¸)ÓDÜ—]‘]Ò#8¸)ÓDñ
ó
ˆð 	�‰�u˜iÔ(Ü˜y°Ô8ˆÜ˜y°ÐGWÔXˆà�s‰|×!Ñ!¤R§X¡X¨iÓ%8Ò8Ð8Ð8Ü—<‘<ä—X‘Xšo°WÔ=Ü—X‘Xšo°WÔ=Ü—X‘XÒ3¸8ÔDÜ—X‘XÒ7¸yÔIÜ—X‘Xšl°'Ô:Ü—X‘XÒ3¸9ÔEÜ—X‘XÒ3¸9ÔEñó

ˆð �]Ò"ð —l‘l 3¨Q�lÓ/ˆGØ—}‘} S¨q�}Ó1ˆHÜ
×Ñ˜g xÕ0r$   rD   )	r_  r`  ra  Úobjectzdatetime64[ns, UTC]rl   z	period[D]rc  re   c                 óæ   — t        j                  dt        j                  g |¬«      i«      }d }|dk(  r,t        j                  dt        j                  g d¬«      i«      }t        |||ddi|¬«       y )NÚvaluerC   rl   rc  r^  r]  r   )r9   r:   rá   r“   )rÒ   r*   rD   r’   rS   r‰   s         r"   Útest_read_empty_arrayzTestBasic.test_read_empty_arrayÒ  sx   € ô  �\‰\àœŸ™ "¨EÔ2ðó
ˆð ˆØ�GÒÜ—|‘|àœRŸX™X b°	Ô:ðóˆHô
 	ØØØØ(Ð*:Ð;Øö	
r$   c                 óü  — |dk(  r9t        «       r/|j                  t        j                  j	                  d¬«      «       |dk7  rt        j
                  |«       t         |dddd«      d	¬
«      5 }|j                  |j                  «       ¬«       t        |j                  |¬«      }d d d «       |}t        r$|j                  j                  t        «      |_        t        j                   |«       y # 1 sw Y   ŒLxY w)Nr   r°   r   r¦   ÚioÚdataÚparquetzsimple.parquetÚrb)Úmode)Úcontentr§   )r   ræ   r'   rç   rè   rý   ÚopenÚserve_contentÚreadr   Úurlr	   r8   rr   rk  r„   r…   )	rÒ   r!   Ú
httpserverÚdatapathr<   r#   rM   rS   r‰   s	            r"   Útest_parquet_read_from_urlz$TestBasic.test_parquet_read_from_url÷  sÖ   € ð
 �]Ò"Ô'9Ô';Ø×ÑÜ—‘×!Ñ!Ð)IÐ!ÓJôð �VÒÜ×Ñ Ô'Ü‘(˜4 ¨Ð4DÓEÈDÔQð 	=ÐUVØ×$Ñ$¨Q¯V©V«XÐ$Ô6Ü˜jŸn™n°VÔ<ˆB÷	=ð ˆÝØ'×/Ñ/×6Ñ6´vÓ>ˆHÔÜ
×Ñ˜b (Õ+÷	=ð 	=ús   Á/8C2Ã2C;N)rÚ   rÛ   rÜ   rã   ré   r'   rç   Úparametrizerð   ró   rû   r  r  rè   r   r	   r  r*  r>  rC  rG  rL  rP  rT  rj  rn  ÚnetworkÚ
single_cpur|  r)   r$   r"   rÞ   rÞ   ¡  s&  „ ò	Oò	0ð ‡[�[×Ñ˜]Ò,NÓOñ
ó Pð
ò
ò"
ò&3ò.0ð ‡[�[×ÑÙÓÒ5Ð!5ðFð ó ð
 ‡[�[×Ñ˜V c¨3 ZÓ0ñ,ó 1óð,òò.(
òT4ò4ò"0ò"0ò4ò .1ð` ‡[�[×ÑØò
	
óñ
óð
ð. ‡[�[×ÑØ‡[�[×Ññ,ó ó ñ,r$   rÞ   c                   ó–  — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ej                  j                  d	„ «       Zej                  j                  d
„ «       Zej                  j                  ej                  j!                  ddgg g«      d„ «       «       Zd„ Zd„ Zd„ Zd„ Zej                  j!                  ded„ gddg¬«      d„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zej                  jA                  d «      d!„ «       Z!d"„ Z"ej                  j!                  d#d$d%g ejF                  d&d'gej                  jI                  e%e&d(¬)«      ¬*«       ejF                   e'jN                  d+d%d%d$d$«       e'jN                  d+d%d%d%d%«      gej                  jI                  e(d,¬-«      ¬*«      g«      d.„ «       Z)d/„ Z*d0„ Z+d1„ Z,d2„ Z-d3„ Z.d4„ Z/ej                  j`                  d5„ «       Z1d6„ Z2ej                  jg                  e4d7¬-«      d8„ «       Z5d9„ Z6d:„ Z7d;„ Z8d<„ Z9d=„ Z:d>„ Z;ej                  jg                  e<d?¬-«      e=j|                  d@„ «       «       Z?yA)BÚTestParquetPyArrowc                 óŒ   — |}t        j                  ddd¬«      }|j                  d «      }||d<   g d¢|d<   t        |||«       y )NrF   r2   úEurope/Brussels©rH   ÚtzÚdatetime_tz©TNTÚbool_with_none)r9   rR   r   r“   )rÒ   r*   ru   r’   rS   Údtis         r"   Ú
test_basiczTestParquetPyArrow.test_basic  sK   € Øˆô �m‰m˜J°Ð6GÔHˆØ�n‰n˜TÓ"ˆØˆˆ=ÑÚ1ˆÐÑä˜˜Y¨Õ+r$   c           	      óp   — |}t        j                  ddd¬«      |d<   t        ||||ddg   dddgi¬	«       y )
NrF   r2   rƒ  r„  r†  re   rj   r8   rò   )r9   rR   r“   )rÒ   r*   ru   r’   rS   s        r"   Útest_basic_subset_columnsz,TestParquetPyArrow.test_basic_subset_columns  sL   € ð ˆäŸM™M¨*¸aÐDUÔVˆˆ=ÑäØØØØ˜ 5Ð)Ñ*Ø" X¨uÐ$5Ð6ö	
r$   c                 ó  — |j                  |¬«      }t        |t        «      sJ ‚t        |«      }t	        |«      }|j                  «       }d |j                  d<   |d   j                  d«      |d<   t        j                  ||«       y )Nr§   r   rp   zM8[us])
r   rŽ   rh   r   r   r&  rƒ   rr   r„   r…   )rÒ   r*   ru   Ú	buf_bytesÚ
buf_streamÚresr‰   s          r"   Ú*test_to_bytes_without_path_or_buf_providedz=TestParquetPyArrow.test_to_bytes_without_path_or_buf_provided'  s   € à×&Ñ&¨bÐ&Ó1ˆ	Ü˜)¤UÔ+Ð+Ð+ä˜YÓ'ˆ
Ü˜:Ó&ˆà—<‘<“>ˆØ-1ˆ�‰Ð)Ñ*Ø(0Ð1DÑ(E×(LÑ(LÈXÓ(VˆÐ$Ñ%Ü
×Ñ˜c 8Õ,r$   c                 óØ   — t        j                  t        j                  d«      j	                  dd«      t        d«      ¬«      j                  «       }| j                  ||t        d|«       y )Né   r?   r2   Úaaar7   zDuplicate column names found©	r9   r:   rP   rQ   ÚreshaperN   r&  rÖ   r‘   ©rÒ   r*   r’   rS   s       r"   Útest_duplicate_columnsz)TestParquetPyArrow.test_duplicate_columns4  sN   € ä�\‰\œ"Ÿ)™) B›-×/Ñ/°°1Ó5¼tÀE»{ÔK×PÑPÓRˆØ×!Ñ!Ø�”JÐ >À	õ	
r$   c                 óv   — t        j                  dt        j                  dd¬«      i«      }t        |||«       y )NrI   ú1 dayr2   rG   )r9   r:   Útimedelta_ranger“   r—  s       r"   Útest_timedeltaz!TestParquetPyArrow.test_timedelta;  s.   € Ü�\‰\˜3¤× 2Ñ 2°7ÀAÔ FÐGÓHˆÜ˜˜Y¨Õ+r$   c                 óz   — t        j                  dg d¢i«      }| j                  ||t        j                  |«       y )NrI   ©rI   r0   r_   )r9   r:   rÙ   r   ÚArrowExceptionr—  s       r"   Útest_unsupportedz#TestParquetPyArrow.test_unsupported?  s1   € ä�\‰\˜3¢Ð.Ó/ˆð 	×*Ñ*¨2¨r´7×3IÑ3IÈ9ÕUr$   c                 óš   — t        j                  ddt         j                  ¬«      }t        j                  |dg¬«      }t        |||«       y )Nr1   é
   rC   Úfp16)rq  r8   )rP   rQ   Úfloat16r9   r:   r“   )rÒ   r*   r’   rq  rS   s        r"   Útest_float16zTestParquetPyArrow.test_float16F  s6   € ä�y‰y˜˜B¤b§j¡jÔ1ˆÜ�\‰\˜t¨f¨XÔ6ˆÜ˜˜Y¨Õ+r$   c           
      ó  — t        j                  t        j                  t        d«      «      t        j                  g d¢t        j                  g d¢«      ¬«      t        j                  g d¢g d¢d¬«      d	œ«      }t        |||«       y )
NÚabcdef)r[   r3   r3   r[   Nr[   rZ   rC   )NrJ   rV   NrV   rJ   )rJ   rV   rK   T)Ú
categoriesÚordered©rI   rJ   rV   )r9   r:   ÚCategoricalrN   ÚCategoricalDtyper“   r—  s       r"   Útest_categoricalz#TestParquetPyArrow.test_categoricalL  sh   € ä�\‰\ä—^‘^¤D¨£NÓ3ä—^‘^Ú=Ü×-Ñ-Ò.CÓDôô
 —^‘^Ú4Ú.Ø ôñó
ˆô" 	˜˜Y¨Õ+r$   c                 ó–   — t        j                  d«      } |j                  di |¤Ž}d|i}t        ||||j                  › d�||¬«       y )NÚs3fsÚ
filesystemú/pyarrow.parquet©rŠ   r‹   rŒ   r)   )r'   rý   ÚS3FileSystemr“   r  )	rÒ   r<   Ús3_bucket_publicÚs3sor*   r’   r¯  Ús3Úkws	            r"   Útest_s3_roundtrip_explicit_fsz0TestParquetPyArrow.test_s3_roundtrip_explicit_fsa  s\   € ô ×"Ñ" 6Ó*ˆØˆT×ÑÑ& Ñ&ˆØ˜BÐˆÜØØØØ$×)Ñ)Ð*Ð*:Ð;ØØö	
r$   c                 óJ   — d|i}t        |||d|j                  › d�||¬«       y )NÚstorage_optionsús3://r±  r²  ©r“   r  )rÒ   r<   r´  rµ  r*   r’   s         r"   Útest_s3_roundtripz$TestParquetPyArrow.test_s3_roundtripq  s:   € ð " 4Ð(ˆÜØØØØÐ)×.Ñ.Ð/Ð/?Ð@ØØö	
r$   Úpartition_colr5   c                 ó:  — t        j                  d«       |j                  «       }|rL|j                  t        j                  |t        j                  «      «      }d}||   j                  |«      ||<   t        ||||d|j                  › d�d|i|d |dœdd¬	«	       y )
Nr¯  Úcategoryr»  z/parquet_dirrº  )r÷   r}   rº  Tr0   )r‰   rŠ   r‹   rŒ   r�   r†   )
r'   rý   r&  rr   ÚdictÚfromkeysrP   Úint32r“   r  )	rÒ   r<   r´  r*   r¾  rµ  r’   Úexpected_dfÚpartition_col_types	            r"   Útest_s3_roundtrip_for_dirz,TestParquetPyArrow.test_s3_roundtrip_for_dir~  s­   € ô
 	×Ñ˜FÔ#à—n‘nÓ&ˆñ Ø%×,Ñ,¬T¯]©]¸=Ì"Ï(É(Ó-SÓTˆKØ!+Ðà)4°]Ñ)C×)JÑ)JØ"ó*ˆK˜Ñ&ô 	ØØØØ ØÐ)×.Ñ.Ð/¨|Ð<Ø*¨DÐ1à"/Ø#Ø#'ñð
 Øö	
r$   c                 óö   — t        j                  d«       t        «       }|j                  |«       t	        |«      }|r&t
        s |j                  j                  d«      |_        t        j                  ||«       y )Nr   r«   )
r'   rý   r   r   r   r	   r8   rr   r„   r…   )rÒ   r<   r®   ÚbufferÚdf_from_bufs        r"   Útest_read_file_like_obj_supportz2TestParquetPyArrow.test_read_file_like_obj_support   s^   € Ü×Ñ˜IÔ&Ü“ˆØ×Ñ˜VÔ$Ü" 6Ó*ˆÙÕ&:Ø )× 1Ñ 1× 8Ñ 8¸Ó ?ˆIÔÜ
×Ñ˜i¨Õ5r$   c                 ón  — t        j                  d«       |j                  dd«       |j                  dd«       t        j                  t        d¬«      5  t        d«       d d d «       t        j                  t        d¬«      5  |j                  d«       d d d «       y # 1 sw Y   Œ?xY w# 1 sw Y   y xY w)Nr   ÚHOMEÚTestingUserÚUSERPROFILEz.*TestingUser.*rž   z~/file.parquet)r'   rý   Úsetenvr    ÚOSErrorr   r   )rÒ   r<   Úmonkeypatchs      r"   Útest_expand_userz#TestParquetPyArrow.test_expand_user©  s•   € Ü×Ñ˜IÔ&Ø×Ñ˜6 =Ô1Ø×Ñ˜=¨-Ô8Ü�]‰]œ7Ð*<Ô=ñ 	+ÜÐ)Ô*÷	+ä�]‰]œ7Ð*<Ô=ñ 	3Ø× Ñ Ð!1Ô2÷	3ð 	3÷	+ð 	+ú÷	3ð 	3ús   ÁBÂB+ÂB(Â+B4c                 ó˜   — ddg}|}|j                  ||d ¬«       t        ||«       t        |«      j                  |j                  k(  sJ ‚y )Nrn   rj   ©r÷   r}   ©r   rœ   r   Úshape)rÒ   rú   r*   ru   r÷   rS   s         r"   Útest_partition_cols_supportedz0TestParquetPyArrow.test_partition_cols_supported²  sI   € à  %˜ˆØˆØ
�‰�h¨~È4ˆÔPÜ˜h¨Ô7Ü˜HÓ%×+Ñ+¨r¯x©xÒ7Ð7Ñ7r$   c                 óš   — d}|g}|}|j                  ||d ¬«       t        ||«       t        |«      j                  |j                  k(  sJ ‚y )Nrn   rÔ  rÕ  )rÒ   rú   r*   ru   r÷   Úpartition_cols_listrS   s          r"   Útest_partition_cols_stringz-TestParquetPyArrow.test_partition_cols_stringº  sO   € àˆØ-Ð.ÐØˆØ
�‰�h¨~È4ˆÔPÜ˜hÐ(;Ô<Ü˜HÓ%×+Ñ+¨r¯x©xÒ7Ð7Ñ7r$   Ú	path_typec                 ó   — | S r   r)   )Úxs    r"   ú<lambda>zTestParquetPyArrow.<lambda>Ä  s   €  Q€ r$   re   zpathlib.Path)Úidsc                 ó�   — d}|g}|} ||«      }|j                  ||¬«       t        |«      j                  |j                  k(  sJ ‚y )Nr6   )r÷   )r   r   rÖ  )	rÒ   rú   r*   r<   rÛ  r÷   rÙ  rS   rŠ   s	            r"   Útest_partition_cols_pathlibz.TestParquetPyArrow.test_partition_cols_pathlibÃ  sO   € ð ˆØ-Ð.ÐØˆá˜Ó"ˆØ
�‰�dÐ+>ˆÔ?Ü˜DÓ!×'Ñ'¨2¯8©8Ò3Ð3Ñ3r$   c                 óL   — t        j                  g g ¬«      }t        |||«       y )N)rþ   r8   rï   r—  s       r"   Útest_empty_dataframez'TestParquetPyArrow.test_empty_dataframeÑ  s   € ä�\‰\ ¨BÔ/ˆÜ˜˜Y¨Õ+r$   c                 óô   — dd l }t        j                  dddgi«      } |j                   |j                  d |j
                  «       ¬«      g«      }|j                  t        «      }t        |||d|i|¬«       y )Nr   rÝ  r0   ©Útyper™   r0  )	r   r9   r:   r™   ÚfieldÚbool_rr   rn   r“   )rÒ   r*   r’   r   rS   r™   Úout_dfs          r"   Útest_write_with_schemaz)TestParquetPyArrow.test_write_with_schemaÖ  sh   € Ûä�\‰\˜3  A ˜-Ó(ˆØ�—‘  §¡¨s¸¸¿¹»Ô!IÐ JÓKˆØ—‘œ4“ˆÜØ�	˜2¨X°vÐ,>Èö	
r$   c           	      óÌ  — t        j                  d«       t        j                  t        j                  g d¢d¬«      t        j                  g d¢d¬«      t        j                  g d¢d¬«      dœ«      }|r't
        r!t        ||||j                  d	d
i«      ¬«       nt        |||«       t        j                  dt        j                  g d¢d¬«      i«      }t        |||«       y )Nr   r/   r_  rC   ÚUInt32rW   re   rª  rV   r«   ©r‰   rI   rW  )r'   rý   r9   r:   rà   r	   r“   rr   )rÒ   r*   r®   r’   rS   s        r"   Ú test_additional_extension_arraysz3TestParquetPyArrow.test_additional_extension_arraysà  s©   € ô 	×Ñ˜IÔ&Ü�\‰\ä—Y‘Yšy°Ô8Ü—Y‘Yšy°Ô9Ü—Y‘YÒ/°xÔ@ñó
ˆñ Õ"6Ü˜R ¨B¸¿¹ÀCÈÀ<Ó9PÖQä˜R ¨BÔ/ä�\‰\˜3¤§	¡	ª/ÀÔ IÐJÓKˆÜ˜˜Y¨Õ+r$   c                 óÈ  — t        j                  d«       t        j                  dt        j                  g d¢d¬«      i«      }t        j
                  d|«      5  |rNt        r|j                  d«      }n|j                  d|› d	�«      }|j                  j                  d«      |_        n|j                  d|› d	�«      }t        ||||¬
«       d d d «       y # 1 sw Y   y xY w)Nr   rI   rW   ústring[pyarrow]rC   Ústring_storager«   zstring[ú]rí  )
r'   rý   r9   r:   rà   r­   r	   rr   r8   r“   )rÒ   r*   rñ  r®   r’   rS   r‰   s          r"   Ú test_pyarrow_backed_string_arrayz3TestParquetPyArrow.test_pyarrow_backed_string_arrayó  sÇ   € ô 	×Ñ˜IÔ&Ü�\‰\˜3¤§	¡	Ò*:ÐBSÔ TÐUÓVˆÜ×ÑÐ/°Ó@ñ 		CÙ!Ý'Ø!Ÿy™y¨Ó/‘Hà!Ÿy™y¨7°>Ð2BÀ!Ð)DÓE�HØ#+×#3Ñ#3×#:Ñ#:¸5Ó#A�Õ àŸ9™9 w¨~Ð.>¸aÐ%@ÓA�Ü˜R ¨B¸ÕB÷		C÷ 		Cñ 		Cús   ÁA5CÃC!c                 óJ  — t        j                  d«       t        j                  t        j                  j                  g d¢«      t        j                  ddd¬«      t        j                  j                  t        j                  ddd¬«      «      dœ«      }t        |||«       y )	Nr   ))r   r0   )r0   r1   )r2   r?   z
2012-01-01r2   r
  r  r?   )rV   rK   rL   )
r'   rý   r9   r:   ÚIntervalIndexr  r  Úfrom_breaksrR   r“   r—  s       r"   Útest_additional_extension_typesz2TestParquetPyArrow.test_additional_extension_types  s|   € ô 	×Ñ˜IÔ&Ü�\‰\ä×%Ñ%×1Ñ1Ò2JÓKÜ—_‘_ \¸1À3ÔGä×%Ñ%×1Ñ1Ü—M‘M ,¸ÀÔDóñ	ó	
ˆô 	˜˜Y¨Õ+r$   c                 ó„   — d}t        j                  dt        j                  ddd¬«      i«      }t        |||d|i¬«       y )	Nz2.6rI   z
2017-01-01Ú1nsr¢  ©r	  rH   Úversionrî   )r9   r:   rR   r“   )rÒ   r*   r’   ÚverrS   s        r"   Útest_timestamp_nanosecondsz-TestParquetPyArrow.test_timestamp_nanoseconds  s=   € ð ˆÜ�\‰\˜3¤§¡¨lÀÐPRÔ SÐTÓUˆÜ˜˜Y¨¸)ÀSÐ9IÖJr$   c                 ó`   — d|gz  }t        j                  |d|i¬«      }t        |||d¬«       y )Né   Úindex_as_col©rþ   rq  F)r‚   rï   )rÒ   r*   r{   r’   ÚidxrS   s         r"   Útest_timezone_aware_indexz,TestParquetPyArrow.test_timezone_aware_index  s3   € ØÐ+Ð,Ñ,ˆÜ�\‰\ ¨>¸3Ð*?Ô@ˆÜ˜˜Y¨¸Ö>r$   c                 óä   — t        j                  d«       t        j                  dt	        t        d«      «      i«      }|j                  ||¬«       t        ||dg¬«      }t        |«      dk(  sJ ‚y )Nr   rI   r2   r§   ©rI   rø   r   ©rù   r0   )	r'   rý   r9   r:   rN   rO   r   r   r$  )rÒ   r*   r’   rS   rÉ   s        r"   Útest_filter_row_groupsz)TestParquetPyArrow.test_filter_row_groups   s^   € ä×Ñ˜IÔ&Ü�\‰\˜3¤¤U¨1£X£Ð/Ó0ˆØ
�‰�i¨ˆÔ+Ü˜i¨°nÐ5EÔFˆÜ�6‹{˜aÒÐÑr$   ú8ignore:.*values returning.*:pandas.errors.Pandas4Warningc                 óD  — dd l }|}t        j                  dddd¬«      }|j                  d «      }||d<   g d¢|d	<   |j                  j                  |«      }|j                  t        j                  ¬
«      }|d   j                  d«      |d<   t        |||ddi|¬«       y )Nr   rF   r2   rƒ  ra   )rH   r…  rc   r†  r‡  rˆ  )Útypes_mapperrp   ztimestamp[us][pyarrow]r^  r   ©r#   r‹   r‰   )
r   r9   rR   r   ÚTableÚfrom_pandasÚ	to_pandasÚ
ArrowDtyperr   r“   )	rÒ   r*   ru   r’   r   rS   r‰  Úpa_tabler‰   s	            r"   Ú&test_read_dtype_backend_pyarrow_configz9TestParquetPyArrow.test_read_dtype_backend_pyarrow_config)  s®   € ó 	àˆô �m‰m˜J°Ð6GÈdÔSˆØ�n‰n˜TÓ"ˆØˆˆ=ÑÚ1ˆÐÑà—=‘=×,Ñ,¨RÓ0ˆØ×%Ñ%´2·=±=Ð%ÓAˆØ(0Ð1DÑ(E×(LÑ(LØ$ó)
ˆÐ$Ñ%ô 	ØØØØ(¨)Ð4Øö	
r$   c                 óî   — t        j                  dddgit        j                  ddgd¬«      d¬	«      }|j                  «       }|j                  j                  d«      |_        t        |||d
di|¬«       y )NrI   r0   r1   r2   r?   Útest©r  zint64[pyarrow])rþ   rD   r^  r   r  )r9   r:   r;   r&  rþ   rr   r“   ©rÒ   r*   r’   rS   r‰   s        r"   Ú,test_read_dtype_backend_pyarrow_config_indexz?TestParquetPyArrow.test_read_dtype_backend_pyarrow_config_indexE  so   € Ü�\‰\Ø�1�a�&ˆM¤§¡¨1¨a¨&°vÔ!>ÐFVô
ˆð —7‘7“9ˆà!Ÿ™×.Ñ.Ð/?Ó@ˆŒÜØØØØ(¨)Ð4Øö	
r$   r8   r   r0   rX   rY   z*https://github.com/apache/arrow/pull/44171)r    r   r   éÛ  z/pa.pandas_compat passes 'datetime64' to .astyper   c           	      ó”   — t        j                  t        d«      t        t        dd«      «      dœ«      }||_        t        |||«       y )Nr>   r0   r?   rå   )r9   r:   rN   rO   r8   r“   )rÒ   r*   r8   r’   rS   s        r"   Útest_columns_dtypes_not_invalidz2TestParquetPyArrow.test_columns_dtypes_not_invalidT  s9   € ô2 �\‰\¤T¨%£[¼¼eÀAÀq»kÓ9JÑKÓLˆàˆŒ
Ü˜˜Y¨Õ+r$   c                 óx   — t        j                  t        j                  g d¢d¬«      ¬«      }t        |||«       y )Nrª  zcustom namer  r4  )r9   r:   r;   r“   r—  s       r"   Útest_empty_columnsz%TestParquetPyArrow.test_empty_columnsr  s'   € ä�\‰\¤§¡ª¸}Ô MÔNˆÜ˜˜Y¨Õ+r$   c                 óà   — t        j                  t        j                  dgg gg g g¬«      ¬«      }|j                  «       }|j                  j                  «       |_        t        ||||¬«       y )Nr>   )ÚlevelsÚcodesr7   rí  )r9   r:   r  r&  r8   Úremove_unused_levelsr“   r  s        r"   Útest_empty_column_multiindexz/TestParquetPyArrow.test_empty_column_multiindexw  sX   € ô �\‰\¤"§-¡-¸¸À°}ÈRÐQSÈHÔ"UÔVˆà—7‘7“9ˆØ#×+Ñ+×@Ñ@ÓBˆÔÜ˜˜Y¨°XÖ>r$   c                 ó¾   — t        j                  ddgi¬«      }ddi|_        |j                  ||¬«       t	        ||¬«      }|j                  |j                  k(  sJ ‚y )Nr0   ©rq  Útest_attributer§   )r9   r:   Úattrsr   r   )rÒ   r’   r*   rS   Únew_dfs        r"   Útest_df_attrs_persistencez,TestParquetPyArrow.test_df_attrs_persistence€  sT   € Ü�\‰\  A 3˜xÔ(ˆØ$ aÐ(ˆŒØ
�‰�i¨ˆÔ+Ü˜i°Ô3ˆØ�|‰|˜rŸx™xÒ'Ð'Ñ'r$   c                 ó"  — t        j                  dddgiddg¬«      }|j                  ||¬«       t        ||¬«      }|j	                  «       }t
        r&|s$|j                  j                  t        «      |_        t        j                  ||«       y )NrI   rÝ  ÚyrJ   )rq  rþ   r§   )r9   r:   r   r   r&  r	   r8   rr   rk  r„   r…   )rÒ   r’   r*   r®   rS   rÉ   r‰   s          r"   Útest_string_inferencez(TestParquetPyArrow.test_string_inference‡  su   € ä�\‰\  c¨3 ZÐ0¸¸c¸
ÔCˆØ
�‰�i¨ˆÔ+Ü˜i°Ô3ˆØ—7‘7“9ˆÝÑ(:Ø'×/Ñ/×6Ñ6´vÓ>ˆHÔÜ
×Ñ˜f hÕ/r$   c           	      ó„  — dd l }t        j                  dt        d«      gid¬«      }|j	                  ||j                  d|j                  d«      fg«      ¬«       t        |«      }t        rt        j                  ddgid	¬«      }n#t        j                  dt        d«      gid
¬«      }t        j                  ||«       y )Nr   rI   z123.00rð  rC   rÿ  )r™   Ú123re   rk  )r   r9   r:   r   r   r™   Ú
decimal128r   r	   r„   r…   )rÒ   r’   r*   rS   rÉ   r‰   s         r"   Útest_roundtrip_decimalz)TestParquetPyArrow.test_roundtrip_decimal‘  s�   € ãä�\‰\˜3¤¨Ó!2Ð 3Ð4Ð<MÔNˆØ
�‰�i¨¯	©	°C¸¿¹ÀqÓ9IÐ3JÐ2KÓ(LˆÔMÜ˜iÓ(ˆÝÜ—|‘| S¨5¨' N¸(ÔC‰Hä—|‘| S¬7°8Ó+<Ð*=Ð$>ÀhÔOˆHÜ
×Ñ˜f hÕ/r$   c                 ó  — dd l }dd lm} |j                  d|j	                  g d¢|j                  «       «      i«      }|j                  ||«       t        |«      }t        j                  dg d¢i¬«      }t        j                  ||«       y )Nr   rI   )NrJ   rV   r"  )r   Úpyarrow.parquetrr  re  rá   Úlarge_stringrf  r   r9   r:   r„   r…   )rÒ   r’   r*   rg  re  rÉ   r‰   s          r"   Ú#test_infer_string_large_string_typez6TestParquetPyArrow.test_infer_string_large_string_typež  sj   € ãÝ$à—‘˜#˜rŸx™xÒ(8¸"¿/¹/Ó:KÓLÐMÓNˆØ
�‰�u˜iÔ(Ü˜iÓ(ˆÜ—<‘< cÒ+;Ð%<Ô=ˆÜ
×Ñ˜f hÕ/r$   c                 óÈ   — ddz  }ddz  }t        j                  d|gdz  |gz   dgdz  z   id¬«      }|j                  |«       t        |«      }|d   j                  dk(  sJ ‚y )	Nó   xi áõiþkÊÚstringsé   rÝ  re   rC   )r9   r:   r   r   rD   )rÒ   r’   r*   Úval1Úval2rS   rÉ   s          r"   Útest_string_column_above_2GBz/TestParquetPyArrow.test_string_column_above_2GB©  sy   € ð �iÑˆØ�iÑˆÜ�\‰\Ø˜˜ ™ t fÑ,°¨u°r©zÑ9Ð:À(ô
ˆð 	�‰�iÔ Ü˜iÓ(ˆØ�iÑ ×&Ñ&¨(Ò2Ð2Ñ2r$   c                 ó¶  — t        j                  d«      }t        j                  d«      }|j                  t        j                  ddd«      g|j	                  d«      ¬«      }|j                  |gdg¬«      }|j                  ||«       t        |«      }t        j                  dt        j                  ddd«      gid	¬
«      }t        j                  ||«       y )Nr   rV  i@  r0   Úusrå  Ú	timestampr  údatetime64[us])rq  rD   )r'   rý   rá   ro   r;  re  rf  r   r9   r:   r„   r…   )rÒ   r’   r*   rg  Úarrre  rÉ   r‰   s           r"   Útest_non_nanosecond_timestampsz1TestParquetPyArrow.test_non_nanosecond_timestampsµ  s»   € ä× Ñ  Ó+ˆÜ× Ñ Ð!2Ó3ˆà�h‰hœ×)Ñ)¨$°°1Ó5Ð6¸R¿\¹\È$Ó=OˆhÓPˆØ—‘˜#˜ { m�Ó4ˆØ
�‰�u˜iÔ(Ü˜iÓ(ˆÜ—<‘<Ø¤× 1Ñ 1°$¸¸1Ó =Ð>Ð?Ø"ô
ˆô 	×Ñ˜f hÕ/r$   z1pyarrow < 18 writes unit-less datetime64 metadatac                 óŒ   — t        j                  g d¢«      }|j                  j                  d«      |_        t	        |||«       y )Nr/   r<  )r9   r:   r8   rr   r“   r—  s       r"   Ú&test_datetime64_column_index_roundtripz9TestParquetPyArrow.test_datetime64_column_index_roundtripÄ  s5   € ô
 �\‰\š)Ó$ˆØ—Z‘Z×&Ñ&Ð'7Ó8ˆŒ
Ü˜˜Y¨Õ+r$   c           	      ó   — t        j                  d«      } |j                  d |j                   |j                  «        |j
                  «       «      fg«      }t        j                  dddiidddiig«      }t        |||d|idd	d
ii¬«       y )Nr   r3   r5   r0   r6   r1   r™   Úto_pandas_kwargsÚmaps_as_pydictsÚstrict)rŒ   r‹   )	r'   rý   r™   Úmap_re   rX  r9   r:   r“   )rÒ   r*   r’   r   r™   rS   s         r"   Útest_maps_as_pydictsz'TestParquetPyArrow.test_maps_as_pydictsÍ  s™   € Ü×%Ñ% iÓ0ˆà�—‘Ø�\�W—\‘\ . '§.¡.Ó"2°M°G·M±M³OÓDÐEÐFó
ˆô �\‰\˜E C¨ 8Ð,¨u°s¸A°hÐ.?Ð@ÓAˆÜØØØØ" FÐ+Ø+Ð.?ÀÐ-JÐKö	
r$   c                 ó†   — d„ }|j                  d|«       t        j                  dg d¢i«      }|j                  ||¬«       y )Nc                  ó.   — t        j                  d«       y )Nz0get_handle should not be called for a local path)r'   Úfail)ÚargsÚkwargss     r"   rI  zTTestParquetPyArrow.test_to_parquet_local_path_does_not_call_get_handle.<locals>.failã  s   € Ü�K‰KÐJÕKr$   úpandas.io.parquet.get_handlerI   r/   r§   )Úsetattrr9   r:   r   )rÒ   r*   r’   rÑ  rI  rS   s         r"   Ú3test_to_parquet_local_path_does_not_call_get_handlezFTestParquetPyArrow.test_to_parquet_local_path_does_not_call_get_handleÜ  s>   € ò	Lð 	×ÑÐ:¸DÔAä�\‰\˜3¢	Ð*Ó+ˆØ
�‰�i¨ˆÕ+r$   c                 óÜ   ‡‡‡— g Št         Št        j                  |«      Šˆˆˆfd„}|j                  d|«       t	        j
                  dg d¢i«      }|j                  ||¬«       ‰g k(  sJ ‚y )Nc                 ón   •— t        j                  | «      ‰k(  r‰j                  | «        ‰| g|¢­i |¤ŽS r   )ÚosÚfspathÚappend)ÚfilerJ  rK  ÚopensÚ	real_openÚtargets      €€€r"   Úspy_openzVTestParquetPyArrow.test_to_parquet_local_path_opens_destination_once.<locals>.spy_openõ  s4   ø€ Ü�y‰y˜‹ &Ò(Ø—‘˜TÔ"Ù˜TÐ3 DÒ3¨FÑ3Ð3r$   zbuiltins.openrI   r/   r§   )rv  rQ  rR  rM  r9   r:   r   )	rÒ   r*   r’   rÑ  rX  rS   rU  rV  rW  s	         @@@r"   Ú1test_to_parquet_local_path_opens_destination_oncezDTestParquetPyArrow.test_to_parquet_local_path_opens_destination_onceë  sc   ú€ ð ˆÜˆ	Ü—‘˜9Ó%ˆö	4ð
 	×Ñ˜O¨XÔ6ä�\‰\˜3¢	Ð*Ó+ˆØ
�‰�i¨ˆÔ+Ø˜Š{Ð‰{r$   c                 óÐ   — t        j                  dg d¢i«      }|dz  dz  }d}t        j                  t        |¬«      5  |j                  ||¬«       d d d «       y # 1 sw Y   y xY w)NrI   r/   Úmissingúout.parquetz.Cannot save file into a non-existent directoryrž   r§   )r9   r:   r'   r    rÐ  r   )rÒ   r*   rú   rS   rŠ   r¡   s         r"   Ú/test_to_parquet_missing_parent_directory_raiseszBTestParquetPyArrow.test_to_parquet_missing_parent_directory_raises   s\   € ä�\‰\˜3¢	Ð*Ó+ˆØ˜)Ñ# mÑ3ˆØ>ˆÜ�]‰]œ7¨#Ô.ñ 	+Ø�M‰M˜$ rˆMÔ*÷	+÷ 	+ñ 	+ús   ¿AÁA%c                 óZ   — t        j                  ddgi«      }t        |||dddii¬«       y )Nr   g      Ð?rB  Úself_destructT)r#   r‹   rï   r—  s       r"   Ú$test_read_parquet_with_self_destructz7TestParquetPyArrow.test_read_parquet_with_self_destruct  s4   € ä�\‰\˜1˜t˜f˜+Ó&ˆÜØØØØ+¨o¸tÐ-DÐEö		
r$   c                 óÊ   ‡— d}g Šˆfd„}|j                  d|«       t        j                  t        d¬«      5  t	        ||¬«       d d d «       ‰|dfgk(  sJ ‚y # 1 sw Y   ŒxY w)Nz&http://example.com/nonexistent.parquetc                 ó@   •— ‰j                  | |f«       t        d«      ‚)Núreached get_handle)rS  r‘   )rŠ   rt  rK  Úcallss      €r"   ÚstubzLTestParquetPyArrow.test_read_parquet_url_still_uses_get_handle.<locals>.stub  s   ø€ Ø�L‰L˜$ ˜Ô&ÜÐ1Ó2Ð2r$   rL  rc  rž   r§   rs  )rM  r'   r    r‘   r   )rÒ   r*   rÑ  ry  re  rd  s        @r"   Ú+test_read_parquet_url_still_uses_get_handlez>TestParquetPyArrow.test_read_parquet_url_still_uses_get_handle  si   ø€ ð 7ˆØˆô	3ð 	×ÑÐ:¸DÔAä�]‰]œ:Ð-AÔBñ 	)Ü˜ RÕ(÷	)à˜#˜t˜˜Ò%Ð%Ñ%÷	)ð 	)ús   ¸AÁA"z"limited file system access on WASMc                 ó2  — |dz  }t        j                  dg d¢i«      j                  ||¬«       |j                  «       }|j	                  d«       	 t        |d«      5  t        j                  d«       d d d «       t        j                  t        d¬	«      5  t        j                  dg d
¢i«      j                  ||¬«       d d d «       |j                  «       sJ ‚|j                  «       |k(  sJ ‚y # 1 sw Y   ŒxY w# t        $ r Y Œ�w xY w# 1 sw Y   ŒLxY w)Nr\  rI   r/   r§   i$  zr+bzRunning as sudo.zFailed to open local filerž   )r?   rÿ  r]   )r9   r:   r   Ú
read_bytesÚchmodrv  r'   r(   ÚPermissionErrorr    Úexists)rÒ   r*   rú   rŠ   r‰   s        r"   Ú3test_to_parquet_unwritable_path_keeps_existing_filezFTestParquetPyArrow.test_to_parquet_unwritable_path_keeps_existing_file"  sù   € ð ˜-Ñ'ˆÜ
�‰�cš9Ð%Ó&×1Ñ1°$¸rÐ1ÔBØ—?‘?Ó$ˆØ�
‰
�5Ôð	Ü�d˜EÓ"ñ 0Ü—‘Ð.Ô/÷0ô
 �]‰]œ?Ð2MÔNñ 	GÜ�L‰L˜#šyÐ)Ó*×5Ñ5°dÀ2Ð5ÔF÷	Gð �{‰{Œ}Ðˆ}Ø�‰Ó  HÒ,Ð,Ñ,÷0ð 0ûäò 	Ùð	ú÷	Gð 	Gús6   ÁC> ÁC2Á4C> Â+DÃ2C;Ã7C> Ã>	D
Ä	D
ÄDN)@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ý  r  r  Úfilterwarningsr  r  r   rè   r
   ÚNotImplementedErrorro   r   r  r  r   r&  r)  r-  r1  Úhigh_memoryr8  r>  Úskipifr   r@  rF  rN  rY  r]  r`  rf  r   ÚtdÚskip_if_windowsrl  r)   r$   r"   r�  r�    sØ  „ ò	,ò
ò-ò
ò,òVò,ò,ð* ‡[�[×Ññ
ó ð
ð ‡[�[×Ññ

ó ð

ð ‡[�[×ÑØ‡[�[×Ñ˜_°¨u°b¨kÓ:ñ
ó ;ó ð
ò@6ò3ò8ò8ð ‡[�[×ÑØ�c™;Ð'¨h¸Ð-Gð ó ñ	4óð	4ò,ò

ò,ò&Cò",ò Kò?ò
 ð ‡[�[×ÑØBóñ
óð
ò2
ð ‡[�[×ÑØà�ˆFØˆF�L‰LØ˜Ð Ø—k‘k×'Ñ'Ø(Ø.ØGð (ó ôð ˆF�L‰Là%�H×%Ñ% d¨A¨q°!°QÓ7Ø%�H×%Ñ% d¨A¨q°!°QÓ7ðð —k‘k×'Ñ'Ø(ØLð (ó ô	ð	
óñ0,ó1ð0,ò,ò
?ò(ò0ò0ò	0ð ‡[�[×Ññ	3ó ð	3ò0ð ‡[�[×ÑØÐ%Xð ó ñ,óð,ò
ò,òò*+ò
ò&ð  ‡[�[×Ñ˜Ð%IÐÓJØ×Ññ-ó ó Kñ-r$   r�  r  c                   ó¬  — e Zd Zd„ Zd„ Zd„ Zej                  j                  d«      d„ «       Z	d„ Z
ej                  j                   e«       xr exr ed¬«      d	„ «       Zd
„ Zej                  j                   e«       xr ed¬«      ej                  j"                  d„ «       «       Zej                  j                   e«       xr exr ed¬«      d„ «       Zej                  j                   e«       xr exr ed¬«      d„ «       Zej                  j                   e«       xr exr ed¬«      d„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestParquetFastParquetc                 óp  — t        «       r/|j                  t        j                  j	                  d¬«      «       t        j
                  d«      }|j                  d«      }|}t        j                  dd|¬«      }|j                  d «      }||d<   t        j                  d	d¬
«      |d<   t        |||«       y )Nr°   r   Úpytzz
US/EasternrF   r2   r„  r†  rš  rG   Ú	timedelta)r   ræ   r'   rç   rè   rý   Útimezoner9   rR   r   r›  r“   )	rÒ   r-   ru   r!   r’   rv  r…  rS   r‰  s	            r"   rŠ  z!TestParquetFastParquet.test_basic<  s�   € ÜÔØ×ÑÜ—‘×!Ñ!Ð)IÐ!ÓJôô ×"Ñ" 6Ó*ˆà�]‰]˜<Ó(ˆØˆä�m‰m˜J°°bÔ9ˆØ�n‰n˜TÓ"ˆØˆˆ=ÑÜ×,Ñ,¨W¸aÔ@ˆˆ;‰Ü˜˜Y¨Õ+r$   c           	      óŒ  — t        j                  t        d«      t        t        dd«      «      dœ«      }t        }d}ddg|_        | j                  |||||«       ddg|_        | j                  |||||«       t        j                  d	dddd«      t        j                  d	dddd«      g|_        | j                  |||||«       y )
Nr>   r0   r?   rå   r@  r   rX   rY   r  )r9   r:   rN   rO   rA  r8   rÖ   ro   )rÒ   r-   r’   rS   Úerrr¡   s         r"   Útest_columns_dtypes_invalidz2TestParquetFastParquet.test_columns_dtypes_invalidL  sÄ   € Ü�\‰\¤T¨%£[¼¼eÀAÀq»kÓ9JÑKÓLˆäˆØ,ˆð ˜�VˆŒ
Ø×!Ñ! " b¨#¨s°IÔ>ð ˜fÐ%ˆŒ
Ø×!Ñ! " b¨#¨s°IÔ>ô ×Ñ˜d A q¨!¨QÓ/Ü×Ñ˜d A q¨!¨QÓ/ð
ˆŒ
ð 	×!Ñ! " b¨#¨s°IÕ>r$   c                 óÜ   — t        j                  t        j                  d«      j	                  dd«      t        d«      ¬«      j                  «       }d}| j                  ||t        ||«       y )Nr“  r?   r2   r”  r7   z9Cannot create parquet dataset with duplicate column namesr•  ©rÒ   r-   r’   rS   r¡   s        r"   r˜  z-TestParquetFastParquet.test_duplicate_columnsa  sO   € ä�\‰\œ"Ÿ)™) B›-×/Ñ/°°1Ó5¼tÀE»{ÔK×PÑPÓRˆØIˆØ×!Ñ! " b¬*°c¸9ÕEr$   zKignore:The copy keyword is deprecated and will:pandas.errors.Pandas4Warningc                 óª   — t        j                  dg d¢i«      }t        j                  ddt        j                  dgid¬«      }t	        ||||d¬«       y )	NrI   )TNFrZ  g        r¤  rC   F)r‰   r‚   )r9   r:   rP   rq   r“   ©rÒ   r-   r’   rS   r‰   s        r"   Útest_bool_with_nonez*TestParquetFastParquet.test_bool_with_noneh  sJ   € ô �\‰\˜3Ò 3Ð4Ó5ˆÜ—<‘<  s¬B¯F©F°CÐ&8Ð 9ÀÔKˆô 	˜˜Y¨°XÈ5ÖQr$   c                 óø   — t        j                  dt        j                  ddd¬«      i«      }| j                  ||t        d |«       t        j                  dg d¢i«      }d}| j                  ||t        ||«       y )NrI   Ú2013r  r2   rú  rž  z"Can't infer object conversion type)r9   r:   r  rÖ   r‘   r}  s        r"   r   z'TestParquetFastParquet.test_unsupportedr  sh   € ä�\‰\˜3¤§¡°¸SÈ!Ô LÐMÓNˆà×!Ñ! " b¬*°d¸IÔFô �\‰\˜3¢Ð.Ó/ˆØ2ˆØ×!Ñ! " b¬*°c¸9ÕEr$   rË   r   c                 ó„   — t        j                  dt        j                  t        d«      «      i«      }t	        |||«       y )NrI   r>   )r9   r:   r«  rN   r“   )rÒ   r-   r’   rS   s       r"   r­  z'TestParquetFastParquet.test_categorical}  s0   € ô
 �\‰\˜3¤§¡¬t°E«{Ó ;Ð<Ó=ˆÜ˜˜Y¨Õ+r$   c                 óÂ   — dt        t        d«      «      i}t        j                  |«      }|j	                  ||d d¬«       t        ||dg¬«      }t        |«      dk(  sJ ‚y )NrI   r2   r0   )r#   r}   Úrow_group_offsetsr  r  )rN   rO   r9   r:   r   r   r$  )rÒ   r-   r’   rK   rS   rÉ   s         r"   r  z-TestParquetFastParquet.test_filter_row_groups…  sY   € Ø”$”u˜Q“x“.Ð!ˆÜ�\‰\˜!‹_ˆØ
�‰�i¨¸ÐPQˆÔRÜ˜i¨°nÐ5EÔFˆÜ�6‹{˜aÒÐÑr$   z(fastparquet can't write ArrowStringArrayc           
      óL   — t        |||d|j                  › d�d|id |dœ¬«       y )Nr»  z/fastparquet.parquetrº  )r}   rº  r²  r¼  )rÒ   r<   r´  rµ  r-   r’   s         r"   r½  z(TestParquetFastParquet.test_s3_roundtripŒ  s:   € ô 	ØØØØÐ)×.Ñ.Ð/Ð/CÐDØ*¨DÐ1Ø)-À$ÑGö	
r$   c                 óð   — ddg}|}|j                  |d|d ¬«       t        j                  j                  |«      sJ ‚dd l} |j
                  t        |«      d«      j                  }t        |«      dk(  sJ ‚y )Nrn   rj   r   ©r#   r÷   r}   r   Fr1   ©	r   rQ  rŠ   rk  r   ÚParquetFiler«   Úcatsr$  ©rÒ   rú   r-   ru   r÷   rS   r   Úactual_partition_colss           r"   r×  z4TestParquetFastParquet.test_partition_cols_supportedœ  s}   € ð ! %˜ˆØˆØ
�‰ØØ Ø)Øð	 	ô 	
ô �w‰w�~‰~˜hÔ'Ð'Ð'Ûà 7 × 7Ñ 7¼¸H»ÀuÓ M× RÑ RÐÜÐ(Ó)¨QÒ.Ð.Ñ.r$   c                 óì   — d}|}|j                  |d|d ¬«       t        j                  j                  |«      sJ ‚dd l} |j
                  t        |«      d«      j                  }t        |«      dk(  sJ ‚y )Nrn   r   rˆ  r   Fr0   r‰  rŒ  s           r"   rÚ  z1TestParquetFastParquet.test_partition_cols_string°  sy   € ð  ˆØˆØ
�‰ØØ Ø)Øð	 	ô 	
ô �w‰w�~‰~˜hÔ'Ð'Ð'Ûà 7 × 7Ñ 7¼¸H»ÀuÓ M× RÑ RÐÜÐ(Ó)¨QÒ.Ð.Ñ.r$   c                 óð   — ddg}|}|j                  |dd |¬«       t        j                  j                  |«      sJ ‚dd l} |j
                  t        |«      d«      j                  }t        |«      dk(  sJ ‚y )Nrn   rj   r   )r#   r}   Úpartition_onr   Fr1   r‰  rŒ  s           r"   Útest_partition_on_supportedz2TestParquetFastParquet.test_partition_on_supportedÄ  s}   € ð ! %˜ˆØˆØ
�‰ØØ ØØ'ð	 	ô 	
ô �w‰w�~‰~˜hÔ'Ð'Ð'Ûà 7 × 7Ñ 7¼¸H»ÀuÓ M× RÑ RÐÜÐ(Ó)¨QÒ.Ð.Ñ.r$   c                 ó    — ddg}|}d}t        j                  t        |¬«      5  |j                  |dd ||¬«       d d d «       y # 1 sw Y   y xY w)Nrn   rj   zYCannot use both partition_on and partition_cols. Use partition_cols for partitioning datarž   r   )r#   r}   r�  r÷   )r'   r    r‘   r   )rÒ   rú   r-   ru   r÷   rS   r¡   s          r"   Ú3test_error_on_using_partition_cols_and_partition_onzJTestParquetFastParquet.test_error_on_using_partition_cols_and_partition_onØ  sa   € ð ! %˜ˆØˆð ð 	ô �]‰]œ:¨SÔ1ñ 	Ø�M‰MØØ$Ø Ø+Ø-ð ô ÷	÷ 	ñ 	ús   ¤AÁAc                 ój   — t        j                  «       }|j                  «       }t        ||||¬«       y )Nrí  )r9   r:   r&  r“   r  s        r"   rã  z+TestParquetFastParquet.test_empty_dataframeë  s&   € ä�\‰\‹^ˆØ—7‘7“9ˆÜ˜˜Y¨°XÖ>r$   c                 ó¢   — d|gz  }t        j                  |d|i¬«      }|j                  «       }d|j                  _        t        ||||¬«       y )Nrÿ  r   r  rþ   rí  )r9   r:   r&  rþ   r  r“   )rÒ   r-   r{   r!   r’   r  rS   r‰   s           r"   r  z0TestParquetFastParquet.test_timezone_aware_indexñ  sL   € ð Ð+Ð,Ñ,ˆä�\‰\ ¨>¸3Ð*?Ô@ˆà—7‘7“9ˆØ%ˆ�‰ÔÜ˜˜Y¨°XÖ>r$   c                 ó  — t        j                  |«      j                  d«       t        j                  t
        «      5  t        |d¬«       d d d «       t        j                  |«      j                  d¬«       y # 1 sw Y   Œ/xY w)Ns   breakitr   r§   F)Ú
missing_ok)r�   r�   Úwrite_bytesr„   rØ   Ú	Exceptionr   Úunlink)rÒ   r’   s     r"   Ú$test_close_file_handle_on_read_errorz;TestParquetFastParquet.test_close_file_handle_on_read_errorü  sb   € Ü�‰�YÓ×+Ñ+¨JÔ7Ü×%Ñ%¤iÓ0ñ 	:Ü˜¨=Õ9÷	:ô 	�‰�YÓ×&Ñ&°%Ð&Õ8÷	:ð 	:ús   ¾A:Á:Bc                 óè   — t        j                  ddgddgdœ¬«      }t        |d«      5 }|j                  |«       d d d «       t	        ||¬«      }t        j                  ||«       y # 1 sw Y   Œ-xY w)Nr   r0   r4   r"  Úwbr§   )r9   r:   rv  r   r   r„   r…   )rÒ   r#   r’   rS   rM   rÉ   s         r"   Útest_bytes_file_namez+TestParquetFastParquet.test_bytes_file_name  sh   € ä�\‰\ a¨ V°1°a°&Ñ9Ô:ˆÜ�)˜TÓ"ð 	 aØ�M‰M˜!Ô÷	ô ˜i°Ô7ˆÜ
×Ñ˜f bÕ)÷		ð 	ús   ªA(Á(A1c                 ó´  — t        j                  d«       t        j                  ddgddgdœ¬«      }t        j                  t
        d¬«      5  |j                  |dd¬	«       d d d «       t        j                  |«      j                  d
«       t        j                  t
        d¬«      5  t        |dd¬	«       d d d «       y # 1 sw Y   Œ`xY w# 1 sw Y   y xY w)Nr   r   r0   r4   r"  zfilesystem is not implementedrž   r3   ©r#   r°  rX   )r'   rý   r9   r:   r    rn  r   r�   r�   r˜  r   ©rÒ   r’   rS   s      r"   Útest_filesystem_notimplementedz5TestParquetFastParquet.test_filesystem_notimplemented  sº   € Ü×Ñ˜MÔ*Ü�\‰\ a¨ V°1°a°&Ñ9Ô:ˆÜ�]‰]Ô.Ð6UÔVñ 	MØ�M‰M˜)¨MÀeˆMÔL÷	Mô 	�‰�YÓ×+Ñ+¨FÔ3Ü�]‰]Ô.Ð6UÔVñ 	LÜ˜¨=ÀUÕK÷	Lð 	L÷		Mð 	Mú÷	Lð 	Lúó   ÁCÂ*CÃCÃCc                 ó´  — t        j                  d«       t        j                  ddgddgdœ¬«      }t        j                  t
        d¬«      5  |j                  |dd¬	«       d d d «       t        j                  |«      j                  d
«       t        j                  t
        d¬«      5  t        |dd¬	«       d d d «       y # 1 sw Y   Œ`xY w# 1 sw Y   y xY w)Nr   r   r0   r4   r"  z1filesystem must be a pyarrow or fsspec FileSystemrž   r3   r   rX   )r'   rý   r9   r:   r    r‘   r   r�   r�   r˜  r   r¡  s      r"   Útest_invalid_filesystemz.TestParquetFastParquet.test_invalid_filesystem  sÂ   € Ü×Ñ˜IÔ&Ü�\‰\ a¨ V°1°a°&Ñ9Ô:ˆä�]‰]ÜÐQô
ñ 	Ið �M‰M˜)¨IÀ%ˆMÔH÷	Iô
 	�‰�YÓ×+Ñ+¨FÔ3Ü�]‰]ÜÐQô
ñ 	Hô ˜¨9ÀÕG÷	Hð 	H÷	Ið 	Iú÷	Hð 	Húr£  c                 óø  — t        j                  d«      }t        j                  ddgddgdœ¬«      }t        j                  t
        d¬«      5  |j                  |d|j                  «       d	d
i¬«       d d d «       t        j                  |«      j                  d«       t        j                  t
        d¬«      5  t        |d|j                  «       d	d
i¬«       d d d «       y # 1 sw Y   ŒqxY w# 1 sw Y   y xY w)Nz
pyarrow.fsr   r0   r4   r"  z8storage_options not supported with a pyarrow FileSystem.rž   r   r3   r[   )r#   r°  rº  rX   )r'   rý   r9   r:   r    rn  r   ÚLocalFileSystemr�   r�   r˜  r   )rÒ   r’   Úpa_fsrS   s       r"   Ú.test_unsupported_pa_filesystem_storage_optionszETestParquetFastParquet.test_unsupported_pa_filesystem_storage_options%  sè   € Ü×#Ñ# LÓ1ˆÜ�\‰\ a¨ V°1°a°&Ñ9Ô:ˆä�]‰]ÜØLô
ñ 		ð �M‰MØØ Ø ×0Ñ0Ó2Ø!&¨ ð	 ô ÷			ô 	�‰�YÓ×+Ñ+¨FÔ3Ü�]‰]ÜØLô
ñ 		ô ØØ Ø ×0Ñ0Ó2Ø!&¨ õ	÷			ð 		÷		ð 		ú÷		ð 		ús   Á&C$Â; C0Ã$C-Ã0C9c           	      óø   — d}t        j                  dt        t        dd«      «      i«      }|j	                  |«       t        j                  t        |¬«      5  t        |d¬«       d d d «       y # 1 sw Y   y xY w)NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.rj   r0   r?   rž   Únumpy)r^  )	r9   r:   rN   rO   r   r'   r    r‘   r   )rÒ   r#   r’   r¡   rS   s        r"   Útest_invalid_dtype_backendz1TestParquetFastParquet.test_invalid_dtype_backend@  se   € ð%ð 	ô �\‰\˜5¤$¤u¨Q°£{Ó"3Ð4Ó5ˆØ
�‰�iÔ Ü�]‰]œ:¨SÔ1ñ 	;Ü˜°'Õ:÷	;÷ 	;ñ 	;ús   ÁA0Á0A9N)rÚ   rÛ   rÜ   rŠ  r{  r˜  r'   rç   rm  r€  r   rè   r   r&   Ú_fp_version_lt_2026_5r­  r  r  r½  r×  rÚ  r‘  r“  rã  r  r›  rž  r¢  r¥  r©  r¬  r)   r$   r"   rt  rt  :  s®  „ ò,ò ?ò*Fð ‡[�[×ÑØUóñRóðRò	Fð ‡[�[×ÑÙÓÒH ÒHÐ3HØDð ó ñ,ó	ð,ò ð ‡[�[×ÑÙÓÒ. Ø9ð ó ð ‡[�[×Ññ	
ó ó	ð
	
ð ‡[�[×ÑÙÓÒH ÒHÐ3HØDð ó ñ/ó	ð/ð  ‡[�[×ÑÙÓÒH ÒHÐ3HØDð ó ñ/ó	ð/ð  ‡[�[×ÑÙÓÒH ÒHÐ3HØDð ó ñ/ó	ð/ò ò&?ò	?ò9ò*òLòHòó6;r$   rt  zFUpstream PyArrow fails to cast FIXED_LEN_BYTE_ARRAY to UUID - GH 61602z24.0.0)Úmin_versionc                 óê   — t        j                  dt        j                  «       t        j                  «       gi«      }|j	                  | d¬«       t        | d¬«      }t        j                  ||«       y )NÚidr   r§   )r9   r:   ÚuuidÚuuid4r   r   r„   r…   )r’   r‰   rÉ   s      r"   Útest_to_parquet_uuid_supportedr³  K  sW   € ô �|‰|˜T¤D§J¡J£L´$·*±*³,Ð#?Ð@ÓA€Hà×Ñ˜	¨)ÐÔ4ä˜)¨IÔ6€Fä×Ñ˜& (Õ+r$   )	NNNNNTFTr1   )TÚ__doc__ro   Údecimalr   rp  r   rQ  r�   r±  r«  rP   r'   Úpandas._configr   Úpandas.compatr   Úpandas.compat.pyarrowr   r   r	   r
   r   Úpandas.errorsr   Úpandas.util._test_decoratorsÚutilÚ_test_decoratorsrq  Úpandasr9   Úpandas._testingÚ_testingr„   Úpandas.util.versionr   Úpandas.io.parquetr   r   r   r   r   r   r&   r½   r   r,   r¼   r­  rç   rm  Ú
pytestmarkÚfixturer   rp  r#   r*   r-   r<   rT   ru   ÚUTCrx  ÚminÚmaxÚstrptimer{   r“   rœ   r¢   r©   r¯   rè   r³   rµ   r·   rÄ   rÊ   rÍ   rÏ   rÞ   r�  rt  Ú
skip_if_nor³  r)   r$   r"   ú<module>rÉ     sK  ðÙ ã Ý Ý Û 	Û Û ã Û å -å ÷õ õ )ß )Ð )ã Ý Ý '÷õ ðÛà€Mð"ÛàÐÙ# K×$;Ñ$;Ó<¹wÀzÓ?RÑRÐð ‡K�K×ÑØJóð€
ð €‡�àˆ�‰ØØ—+‘+×$Ñ$Ø%Ð%Ø5ð %ó ô	
ð 	ˆ�‰ØØ—+‘+×$Ñ$Ø!Ð!Ð*Dð %ó ô	
ðôñ"ó#ð"ð ‡�ñó ðð ‡�ñó ðð ‡�ñTó ðTð ‡�ñó ðð" ‡�ñó ðð. €‡�àˆ×Ñ˜$  1 b¨"¨b¸¿¹ÔFØˆ×Ñ˜$  1 b¨"¨b¸×9JÑ9J×9NÑ9NÔOØˆ×Ñ˜$  1 b¨"¨b¸×9JÑ9J×9NÑ9NÔOØ×Ñ×"Ñ"Ð#=Ð?TÓUØ×Ñ×"Ñ"Ð#=Ð?TÓUØ×Ñ×"Ñ"Ð#=Ð?TÓUØ×Ñ×"Ñ"Ð#=Ð?TÓUðô
ñó
ðð Ø	ØØØØØØØóBòJ9ò =ò*ò(/ð ‡�×ÑÑ%Ó'Ð0PÐÓQñ3ó Rð3ò/òJò6+#ð\ ‡�×ÑÑ%Ó'Ð0PÐÓQñ2ó Rð2ð  ‡�×ÑÙÓÒD˜]ÒDÐ/DØ@ð ó ñ2ó	ð2÷	Eñ 	Eôh,�ô h,ôVk-˜ô k-ð\ ‡�×ÑÐVÓWôM;˜Tó M;ó XðM;ð` ‡�×ÑØØSð ó ð €‡�ˆy hÔ/ñ,ó 0ó	ñ
,øðM1 ò ØƒMðûð ò "ØÐØ!Óð"ús$   Á/N) Á6!N7 Î)N4Î3N4Î7	OÏO