Ë
    ìmxigF  ã                   ó   — d dl Z d dlmZ d dlmZ d dlZd dlmZ d dlZ	d dl
Z
dZ	 d dlmZ d dlmZ 	 d dlmZ d dlmc mZ e
j0                  j                   ZdZdZd	Zd
ZeeeeiZdZdZ g d¢Z!eddgiZ"d„ Z#ee"fd„Z$d„ Z%efd„Z&d„ Z'ed„ «       Z(d(d„Z)e
j0                  jU                  ed¬«      d„ «       Z+e
j0                  jU                  ed¬«      e
j0                  jY                  dddg«      d„ «       «       Z-e
j0                  jU                  ed¬«      e
j0                  jY                  dg d¢«      d„ «       «       Z.e
j0                  jU                  ed¬«      e
j0                  jY                  dg d ¢«      d!„ «       «       Z/e
j0                  jU                  ed¬«      e
j0                  jY                  dg d"¢«      d#„ «       «       Z0e
j0                  jU                  e d$¬«      d%„ «       Z1e
j0                  jU                  ed¬«      d&„ «       Z2e
j0                  jU                  ed¬«      d'„ «       Z3y# e$ r dZdZY �Œw xY w# e$ r dZY �Œ
w xY w))é    N)Úcontextmanager)Ú	timedeltaF©ÚInMemoryKmsClientTs   0123456789112345Ú
footer_keys   1234567890123450Úcol_keys   2345678901234501Úcol2_key©ÚyearÚn_legsÚanimalr   r   c                  ó@   — t        j                  g d¢g d¢g d¢dœ«      S )N)iä  éæ  éå  r   éã  r   )é   r   é   r   é   éd   )ÚFlamingoÚParrotÚDogÚHorsezBrittle starsÚ	Centipeder
   )ÚpaÚtable© ó    ú\/home/htdocs/ttos/venv/lib/python3.12/site-packages/pyarrow/tests/test_dataset_encryption.pyÚcreate_sample_tabler    :   s#   € Ü�8‰8â8Ú*òñ	
óð r   c           	      óL   — t        j                  | d|dt        d¬«      d¬«      S )NFÚ
AES_GCM_V1g      @)Úminutesé   )r   Úplaintext_footerÚcolumn_keysÚencryption_algorithmÚcache_lifetimeÚdata_key_length_bits)ÚpeÚEncryptionConfigurationr   )r   r&   s     r   Úcreate_encryption_configr,   K   s,   € Ü×%Ñ%ØØØØ)ä ¨Ô-Ø ôð r   c                  ó.   — t        j                  d¬«      S )Ni,  )r(   )r*   ÚDecryptionConfigurationr   r   r   Úcreate_decryption_configr/   W   s   € Ü×%Ñ%°SÔ9Ð9r   c           
      óœ   — t        j                  | j                  «       D ��ci c]  \  }}||j                  d«      “Œ c}}¬«      S c c}}w )NzUTF-8)Úcustom_kms_conf)r*   ÚKmsConnectionConfigÚitemsÚdecode)ÚkeysÚkey_nameÚkeys      r   Úcreate_kms_connection_configr8   [   sJ   € Ü×!Ñ!ð "&§¡£÷
á�˜#ð �c—j‘j Ó)Ñ)ó
ôð ùó
s   £A
c                 ó   — t        | «      S ©Nr   )Úkms_connection_configurations    r   Úkms_factoryr<   d   s   € ÜÐ9Ó:Ð:r   c              #   óz   K  — | rd –— y t        j                  ||¬«      5  d –— d d d «       y # 1 sw Y   y xY w­w)N©Úmatch)ÚpytestÚraises)ÚsuccessÚ
error_typer?   s      r   Úcond_raisesrD   h   s1   è ø€ áÜä�]‰]˜:¨UÔ3ñ 	Û÷	÷ 	ñ 	üs   ‚;¡/¦	;¯8´;c           	      óŒ  ‡ ‡‡— |rHt        di t        ¤t        t        i¤ŽŠt        di t        ¤t        |gi¤ŽŠ|j                  d«      d   }nt        Št        Šd }	 dˆˆˆ fd„	}‰ j                  }‰j                  «       D ���cg c]   \  }}|D ]  }|j                  d«      d   ‘Œ Œ" }}}}|D �cg c]  }||vr|�|j                  |› d�«      s|‘Œ  }	}t        |«      dkD  sJ ‚t        |	«      dkD  sJ ‚t        t        i}
‰j                  «       D ��ci c]  \  }}|t        k7  r||“Œ }}} ||
|	d«        ||
|d«        ||
|d«        |||	dd«        |||dd«        |||dd«       t        ‰«      dkD  r“‰j                  «       D ]€  \  }}|D ]v  }|j                  d«      d   }‰j                  «       D ��ci c]  \  }}|t        |fv r||“Œ }}}||k7  }|	|gz   } |||	d«        ||||«        |||d«        |||d«       Œx Œ‚  |‰|	d«        |‰|d«        |‰|d«       y c c}}}w c c}w c c}}w c c}}w )	Nú.r   Tc                 ó   •— ‰}t        t        ‰«      }t        «       }t        |«      }t        | «      }t	        j
                  t        «      }	t        j                  |	||«      }
t        j                  |	||«      }t        j                  j                  «       }|j                  |
¬«      }t        j                  «       }|j!                  d«       t        j"                  ‰d|||¬«       t        j                  j                  «       }t%        j&                  t(        d¬«      5  t        j                  d||¬«       d d d «       t        j*                  |¬«      }t        j                  j                  |¬	«      }t-        |t.        d
¬«      5  t        j                  d||¬«      }t-        |t.        d
¬«      5  ‰j1                  |«      j3                  |j5                  |«      «      sJ ‚	 d d d «       d d d «       |	j7                  ||«      }t        j*                  |¬«      }t        j                  j                  |¬	«      }t-        |t.        d
¬«      5  t        j                  d||¬«      }t-        |t.        d
¬«      5  ‰j1                  |«      j3                  |j5                  |«      «      sJ ‚	 d d d «       d d d «       y # 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   Œ7xY w# 1 sw Y   y xY w)N©Úencryption_configú/Úsample_dataset©ÚdataÚbase_dirÚformatÚfile_optionsÚ
filesystemzno decryptionr>   ©rO   rQ   ©Údecryption_config©Údefault_fragment_scan_optionszUnknown master key)Údecryption_properties)r,   ÚFOOTER_KEY_NAMEr/   r8   r*   ÚCryptoFactoryr<   ÚdsÚParquetEncryptionConfigÚParquetDecryptionConfigr   ÚdatasetÚParquetFileFormatÚmake_write_optionsÚfsÚ_MockFileSystemÚ
create_dirÚwrite_datasetr@   rA   ÚIOErrorÚParquetFragmentScanOptionsrD   Ú
ValueErrorÚselectÚequalsÚto_tableÚfile_decryption_properties)Ú	read_keysÚread_columnsÚto_table_successÚdataset_successÚ
write_keysrI   rT   Úencrypt_kms_connection_configÚdecrypt_kms_connection_configÚcrypto_factoryÚparquet_encryption_cfgÚparquet_decryption_cfgÚpformatÚwrite_optionsÚmockfsÚpq_scan_optsr]   rW   r&   r5   r   s                     €€€r   Úassert_decryptsz>do_test_dataset_encryption_decryption.<locals>.assert_decrypts}   sÇ  ø€ ð ˆ
Ü4´_ÀkÓRÐÜ4Ó6ÐÜ(DÀZÓ(PÐ%Ü(DÀYÓ(OÐ%ä×)Ñ)¬+Ó6ˆÜ!#×!;Ñ!;ØÐ9Ð;Ló"
Ðô "$×!;Ñ!;ØÐ9Ð;Ló"
Ðô
 —*‘*×.Ñ.Ó0ˆØ×2Ñ2Ø4ð 3ó 
ˆô ×#Ñ#Ó%ˆØ×Ñ˜#Ôä
×ÑØØ%ØØ&Øõ	
ô —*‘*×.Ñ.Ó0ˆÜ�]‰]œ7Ð*:Ô;ñ 	LÜ�J‰JÐ'°ÀFÕK÷	Lô ×4Ñ4Ø4ô
ˆô —*‘*×.Ñ.Ø*6ð /ó 
ˆô ˜¬*Ð<PÔQñ 	YÜ—j‘jÐ!1¸'ÈfÔUˆGÜÐ-¬zÐAUÔVñ YØ—|‘| LÓ1×8Ñ8¸×9IÑ9IÈ,Ó9WÔXÐXÑX÷Y÷	Yð !/× IÑ IØ)Ð+<ó!>Ðä×4Ñ4Ø"7ô
ˆô —*‘*×.Ñ.Ø*6ð /ó 
ˆô ˜¬*Ð<PÔQñ 	YÜ—j‘jÐ!1¸'ÈfÔUˆGÜÐ-¬zÐAUÔVñ YØ—|‘| LÓ1×8Ñ8¸×9IÑ9IÈ,Ó9WÔXÐXÑX÷Y÷	Yð 	Y÷3	Lñ 	Lú÷Yð Yú÷	Yð 	Yú÷"Yð Yú÷	Yð 	YúsT   Ä#KÆ+KÆ72KÇ*KÉ+K4É?2K(Ê2K4ËKËK	ËKËK%Ë(K1	Ë-K4Ë4K=Fé   r   )T)ÚdictÚKEYSÚEXTRA_COL_KEY_NAMEÚEXTRA_COL_KEYÚCOLUMN_KEYSÚsplitÚcolumn_namesr3   Ú
startswithÚlenrX   Ú
FOOTER_KEY)r   Úextra_column_pathÚextra_column_namery   Úall_column_namesr6   r�   Úcolumn_nameÚencrypted_column_namesÚplaintext_column_namesÚfooter_key_onlyr7   Úcolumn_keys_onlyÚcolumn_key_nameÚcolumn_key_column_namesÚencrypted_column_namerk   Úplaintext_and_one_successÚplaintext_and_oner&   r5   s   `                  @@r   Ú%do_test_dataset_encryption_decryptionr’   q   s  ú€ áÜÑB”dÐBÔ1´=ÐAÑBˆÜÑVœ[ÐVÔ-?ÐBSÐATÐ,UÑVˆØ-×3Ñ3°CÓ8¸Ñ;ÑäˆÜ!ˆØ Ðð ÷	DYðN ×)Ñ)Ðà<G×<MÑ<MÓ<O÷?ð ?Ù"8 (¨LØ1=ò?à"-ð *×/Ñ/°Ó4°QÓ7ð ?Ð7ð ?Ðò ?ð 2BöUØ"-Ø!,Ð4JÑ!JØ0Ð8Ø#4×#?Ñ#?À;À-ÈqÐ@QÔ#Rò	 *ð UÐð Uô
 Ð%Ó&¨Ò*Ð*Ð*ÜÐ%Ó&¨Ò*Ð*Ð*Ü&¬
Ð3€Oà-1¯Z©Z«\÷8Ù)˜H cØ#¤Ò6ð ! #™ð 8Ðñ 8ñ �OÐ%;¸TÔBÙ�OÐ%;¸UÔCÙ�OÐ%5°uÔ=ñ Ð$Ð&<¸eÀUÔKÙÐ$Ð&<¸eÀUÔKÙÐ$Ð&6¸¸uÔEô ˆ;Ó˜!ÒØ8C×8IÑ8IÓ8Kò 	DÑ4ˆOÐ4Ø)@ò DÐ%ð )>×(CÑ(CÀCÓ(HÈÑ(KÐ%ð 37·*±*³,÷PÙ!. ¨3Ø (¬_¸oÐ,NÑ Nð & s™]ð P�	ñ Pð -BÐEVÑ,VÐ)Ø$:Ð>SÐ=TÑ$TÐ!á 	Ð+AÀ4ÔHÙ 	Ð+<Ð>WÔXÙ 	Ð+AÀ5ÔIÙ 	Ð+;¸UÕCñ%Dð	Dñ, �DÐ0°$Ô7Ù�DÐ0°$Ô7Ù�DÐ*¨DÕ1ùôm?ùòUùó8ùó4Ps   Â%H.Â2#H5ÄH:Æ>I 
z+Parquet Encryption is not currently enabled)Úreasonc                  ó*   — t        t        «       «       y r:   )r’   r    r   r   r   Ú"test_dataset_encryption_decryptionr•   þ   s   € ô *Ô*=Ó*?Õ@r   rˆ   Úlistzlist.list.elementc                 óæ   — t        j                  g d¢g d¢g d¢dgdgdggt        j                  t        j                  «       «      ¬«      }t	        «       j                  d|«      }t        || «       y )	N)rz   r   é   )r   r   é   )é   é   é	   éÿÿÿÿéþÿÿÿéýÿÿÿ©Útyper–   )r   ÚarrayÚlist_Úint32r    Úappend_columnr’   )rˆ   Ú	list_datar   s      r   Útest_list_encryption_decryptionr§     s[   € ô
 —‘Ú	’Išy¨2¨$°°°r°dÐ;Ü�X‰X”b—h‘h“jÓ!ô€Iô  Ó!×/Ñ/°¸	ÓB€Eä)¨%°Õ=r   )Úmapzmap.key_value.keyzmap.key_value.valuec                 ó  — t        j                  t        j                  «       t        j                  «       «      }t        j                  ddgddgddgdgg g g|¬«      }t        «       j                  d	|«      }t        || «       y )
N)Úk1rz   )Úk2r   )rª   r˜   )Úk3r   )r«   r   )r¬   r™   )Úk4rš   r    r¨   )r   Úmap_Ústringr¤   r¢   r    r¥   r’   )rˆ   Úmap_typeÚmap_datar   s       r   Útest_map_encryption_decryptionr²     sx   € ô �w‰w”r—y‘y“{¤B§H¡H£JÓ/€HÜ�x‰xà˜	Ð" Y°	Ð$:¸YÈ	Ð<RØˆK˜˜Rð	
ð ô€Hô  Ó!×/Ñ/°°xÓ@€Eä)¨%°Õ=r   )Ústructz	struct.f1z	struct.f2c                 ó  — dt        j                  «       fdt        j                  «       fg}t        j                  |«      }t        j                  g d¢|¬«      }t        «       j                  d|«      }t        || «       y )NÚf1Úf2)©rz   Úone©r   Útwo©r˜   Úthree©r   Úfour©r   Úfive©r™   Úsixr    r³   )r   r¤   r¯   r³   r¢   r    r¥   r’   )rˆ   Ústruct_fieldsÚstruct_typeÚstruct_datar   s        r   Ú!test_struct_encryption_decryptionrÆ   (  sg   € ð
 œBŸH™H›JÐ'¨$´·	±	³Ð)<Ð=€MÜ—)‘)˜MÓ*€KÜ—(‘(ÚTØô€Kô  Ó!×/Ñ/°¸+ÓF€Eä)¨%°Õ=r   )Úcolzcol.list.element.key_value.keyz#col.list.element.key_value.value.f1z#col.list.element.key_value.value.f2c                 óØ  — dt        j                  «       fdt        j                  «       fg}t        j                  |«      }d}d}d}d}d}d}t        j                  t        j                  «       |«      }	||d	œ}
d
|i}d|i}||dœ}t        j
                  |	«      }|
|g}|g}|g}t        j                  ||d |d d g|¬«      g}t        «       j                  d|«      }t        || «       y )Nrµ   r¶   r·   r¹   r»   r½   r¿   rÁ   )rz   r   r˜   r   )r   r™   r    rÇ   )
r   r¤   r¯   r³   r®   r£   r¢   r    r¥   r’   )rˆ   rÃ   rÄ   Ústruct1Ústruct2Ústruct3Ústruct4Ústruct5Ústruct6r°   Úmap1Úmap2Úmap3Úmap4Ú	list_typeÚlist1Úlist2Úlist3r¦   r   s                       r   Ú&test_deep_nested_encryption_decryptionr×   8  sð   € ð œBŸH™H›JÐ'¨$´·	±	³Ð)<Ð=€MÜ—)‘)˜MÓ*€KØ€GØ€GØ€GØ€GØ€GØ€Gä�w‰w”r—x‘x“z ;Ó/€HØ˜7Ñ#€DØˆwˆ<€DØˆwˆ<€DØ˜7Ñ#€Dä—‘˜Ó"€IØ�4ˆL€EØˆF€EØˆF€EÜ—‘˜5 %¨¨u°d¸DÐAÈ	ÔRÐS€IÜÓ!×/Ñ/°°yÓA€Eä)¨%°Õ=r   z'Parquet Encryption is currently enabledc                  óÀ   — t         j                  j                  «       } t        j                  t
        «      5  | j                  d¬«      }ddd«       y# 1 sw Y   yxY w)z�Test write_dataset with ParquetFileFormat and test if an exception is thrown
    if you try to set encryption_config using make_write_optionsz
some valuerH   N)r   r]   r^   r@   rA   ÚNotImplementedErrorr_   )ru   Ú_s     r   Ú-test_write_dataset_parquet_without_encryptionrÛ   _  sO   € ô �j‰j×*Ñ*Ó,€Gä	�‰Ô*Ó	+ñ GØ×&Ñ&¸Ð&ÓFˆ÷G÷ Gñ Gús   ¸AÁAc            	      ó   ‡—  G d„ dt         j                  «      Šd} t        j                  j	                  t        j
                  t        | «      D �cg c]  }t        j                  «       ‘Œ c}t        j                  «       ¬«      gdg¬«      }t        j                  «       }t        j                  ˆfd„«      }t        j                  dddgid	d
d¬«      }t        j                  |||«      }t        j                  ||t        j                  «       «      }t        j                   |¬«      }t        j"                  |¬«      }	|	j%                  |¬«      }
|j'                  |«      }t)        j*                  «       }|j-                  d«       d}t        j.                  |||	|
|¬«       |dz   }t1        j2                  |||¬«      j5                  «       }||k(  sJ ‚t        j6                  ||	|¬«      }|j9                  «       }||k(  sJ ‚yc c}w )z9Test encryption and decryption of a large number of rows.c                   ó4   — e Zd Zdededefd„Zdededefd„Zy)ú;test_large_row_encryption_decryption.<locals>.NoOpKmsClientÚ	key_bytesrÚ   Úreturnc                 ó0   — t        j                  |«      }|S r:   )Úbase64Ú	b64encode)Úselfrß   rÚ   Úbs       r   Úwrap_keyzDtest_large_row_encryption_decryption.<locals>.NoOpKmsClient.wrap_keyu  s   € Ü× Ñ  Ó+ˆAØˆHr   Úwrapped_keyc                 ó0   — t        j                  |«      }|S r:   )râ   Ú	b64decode)rä   rç   rÚ   rå   s       r   Ú
unwrap_keyzFtest_large_row_encryption_decryption.<locals>.NoOpKmsClient.unwrap_keyy  s   € Ü× Ñ  Ó-ˆAØˆHr   N)Ú__name__Ú
__module__Ú__qualname__ÚbytesÚstrræ   rê   r   r   r   ÚNoOpKmsClientrÞ   t  s6   „ ð	 eð 	°ð 	¸ó 	ð	¨%ð 	°Cð 	¸Eô 	r   rð   i€  r    Úfoo)Únamesc                 ó   •—  ‰«       S r:   r   )rÚ   rð   s    €r   ú<lambda>z6test_large_row_encryption_decryption.<locals>.<lambda>†  s	   ø€ ±³€ r   ÚUNIMPORTANT_KEYTFé€   )r   r&   Údouble_wrappingr%   r)   rS   rU   rH   rJ   zlarge-row-test-dataset)rO   rP   rQ   z/part-0.parquet©rW   rQ   rR   N)r*   Ú	KmsClientr   ÚTableÚfrom_arraysr¢   ÚrangeÚrandomÚfloat32r2   rY   r+   rZ   r[   r\   r.   re   r^   r_   rj   r`   ra   rb   rc   ÚpqÚParquetFileÚreadr]   ri   )Ú	row_countrÚ   r   Ú
kms_configrr   rI   Ú
pqe_configÚ
pqd_configÚscan_optionsÚfile_formatrv   rj   rw   ÚpathÚ	file_pathÚ	new_tabler]   rð   s                    @r   Ú$test_large_row_encryption_decryptionr  n  sæ  ø€ ôœŸ™ô ð €IÜ�H‰H× Ñ Ü	�‰Ü&+¨IÓ&6Ö7 ŒV�]‰]�_Ò7Ü—‘“ô

ð 	ð �'ð	 !ó €Eô ×'Ñ'Ó)€JÜ×%Ñ%Ó&?Ó@€NÜ×2Ñ2Ø$Ø&¨¨Ð0ØØØ ôÐô ×+Ñ+Ø˜
Ð$5ó€Jô ×+Ñ+Ø˜
¤B×$>Ñ$>Ó$@ó€Jô ×0Ñ0À:ÔN€LÜ×&Ñ&À\ÔR€KØ×2Ñ2ÀZÐ2ÓP€MØ!/×!JÑ!JÈ:Ó!VÐä×ÑÓ!€FØ
×Ñ�cÔà#€DÜ×Ñ�U˜D¨Ø"/¸FõDð Ð(Ñ(€IÜ—‘ØÐ)CØô÷ �dƒfð ð �IÒÐÐä�j‰j˜ k¸fÔE€GØ× Ñ Ó"€IØ�IÒÐÑùòS 8s   ÁHc                  ó¾  — t        «       } t        «       }t        «       }t        «       }t	        j
                  t        «      }t        j                  |||«      }t        j                  |||«      }t        j                  j                  «       }|j                  |ddg¬«      }t        j                  «       }	|	j!                  d«       t        j"                  | d|||	¬«       t        j$                  |¬«      }
t        j                  j                  |
¬«      }t        j                  d||	¬	«      }|j'                  «       D �]�  }|j)                  |||j*                  |	«      }t-        j.                  |j*                  ||	¬
«      5 }t1        |j2                  j4                  «      D �]  }|j2                  j7                  |«      }|j9                  d«      j:                  €J ‚|j9                  d«      j:                  j<                  dk(  sJ ‚|j9                  d«      j:                  j>                  dk(  sJ ‚|j9                  d«      j:                  €J ‚|j9                  d«      j:                  j<                  dk(  sJ ‚|j9                  d«      j:                  j>                  dk(  sJ ‚|j9                  d«      j:                  €�ŒJ ‚ 	 d d d «       �Œ� y # 1 sw Y   �ŒœxY w)Nr   r   )rI   Úwrite_statisticsrJ   rK   rL   rS   rU   rR   rø   r   r   r   rz   r   r   ) r    r,   r/   r8   r*   rY   r<   rZ   r[   r\   r   r]   r^   r_   r`   ra   rb   rc   re   Úget_fragmentsrj   r  rÿ   r   rü   ÚmetadataÚnum_row_groupsÚ	row_groupÚcolumnÚ
statisticsÚminÚmax)r   rI   rT   Úkms_connection_configrr   rs   rt   ru   rv   rw   rx   r]   ÚfragmentrW   Úparquet_fileÚrg_idxr  s                    r   Ú7test_dataset_encryption_with_selected_column_statisticsr  ¬  s®  € ô  Ó!€Eä0Ó2ÐÜ0Ó2ÐÜ8Ó:Ðä×%Ñ%¤kÓ2€NÜ×7Ñ7ØÐ-Ð/@óÐô  ×7Ñ7ØÐ-Ð/@óÐô �j‰j×*Ñ*Ó,€GØ×.Ñ.Ø0Ø  (Ð+ð /ó €Mô
 ×ÑÓ!€FØ
×Ñ�cÔä×ÑØØ!ØØ"Øõô ×0Ñ0Ø0ô€Lô �j‰j×*Ñ*ÈÐ*ÓV€GÜ�j‰jÐ)°'ÀfÔM€Gà×)Ñ)Ó+ó >ˆØ .× IÑ IØ!Ð#4°h·m±mÀVó!MÐä�^‰^Ø�M‰MØ"7Øô
ð 	>ð Ü × 5Ñ 5× DÑ DÓEó >�Ø(×1Ñ1×;Ñ;¸FÓC�	à ×'Ñ'¨Ó*×5Ñ5ÐAÐAÐAØ ×'Ñ'¨Ó*×5Ñ5×9Ñ9¸TÒAÐAÐAØ ×'Ñ'¨Ó*×5Ñ5×9Ñ9¸TÒAÐAÐAà ×'Ñ'¨Ó*×5Ñ5ÐAÐAÐAØ ×'Ñ'¨Ó*×5Ñ5×9Ñ9¸QÒ>Ð>Ð>Ø ×'Ñ'¨Ó*×5Ñ5×9Ñ9¸SÒ@Ð@Ð@à ×'Ñ'¨Ó*×5Ñ5Ò=Ð=Ð=ñ>÷	>ñ 	>ñ>÷	>ñ 	>ús   ÆD<KËKËK	r:   )4râ   Ú
contextlibr   Údatetimer   rý   Ú
pyarrow.fsr`   Úpyarrowr   r@   Úencryption_unavailableÚpyarrow.parquetÚparquetrÿ   Úpyarrow.datasetr]   rZ   ÚImportErrorÚ pyarrow.tests.parquet.encryptionr   Úpyarrow.parquet.encryptionÚ
encryptionr*   ÚmarkÚ
pytestmarkr„   rX   ÚCOL_KEYÚCOL_KEY_NAMEr|   r~   r}   ÚCOLUMNSr   r    r,   r/   r8   r<   rD   r’   Úskipifr•   Úparametrizer§   r²   rÆ   r×   rÛ   r  r  r   r   r   ú<module>r.     sø  ðó$ Ý %Ý Û Ý Û ã àÐ ðÝ Ý ð
"ÝBß+Ð+ð �[‰[× Ñ €
ð !€
Ø€Ø
€Ø€Ø˜ \°7Ð;€Ø#€ØÐ Ú
&€Ø˜h¨Ð1Ð2€òð" )8À[ó 	ò:ð '+ó ò;ð ñó ðóJ2ðZ ‡�×ÑØÐ#Pð ó ñAóðAð ‡�×ÑØÐ#Pð ó ð ‡�×Ñ˜¨Ð1DÐ(EÓFñ>ó Góð>ð ‡�×ÑØØ8ð ó ð ‡�×ÑØÒFóñ>óó	ð>ð ‡�×ÑØÐ#Pð ó ð ‡�×Ñ˜Ò(LÓMñ	>ó Nóð	>ð ‡�×ÑØØ8ð ó ð ‡�×ÑØòóñ>óó	ð>ð4 ‡�×ÑØÐÐ'Pð ó ñ	Góð	Gð ‡�×ÑØÐ#Pð ó ñ8óð8ðv ‡�×ÑØÐ#Pð ó ñ=>óñ=>øð_ ò Ø	€BØ	ƒBðûð ò "Ø!Óð"ús"   ¦H2 ³I È2	H?È>H?ÉIÉI