U
    -eh                     @   s$  d dl Z d dlmZ d dlmZmZmZmZ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Zd dl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Zdd Zedd	 Zd
d Zdd Zej ddej dddd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'd d! Z(d"d# Z)d$d% Z*d&d' Z+d(d) Z,d*d+ Z-d,d- Z.d.d/ Z/d0d1 Z0d2d3 Z1d4d5 Z2d6d7 Z3d8d9 Z4d:d; Z5ej d<d=d>d?gd@dA Z6dBdC Z7dDdE Z8dFdG Z9dHdI Z:dJdK Z;dLdM Z<dNdO Z=dPdQ Z>dRdS Z?dTdU Z@dVdW ZAdXdY ZBej dZejCd[ejjDejEjFd\d]d^d_d`dadbgdcdd ZGej dZejCd[ejjDejEjFd\d]d^d_d`dadbgdedf ZHdgdh ZIdidj ZJdkdl ZKdmdn ZLdodp ZMdqdr ZNdsdt ZOejPdudv ZQd	dxdyZRdzd{ ZSd|d} ZTd~d ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zeejjfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Znejjdd Zodd Zpejjdd Zqdd Zrejjdd Zsejjdd Ztdd Zuejjdd Zvdd ZwddÄ Zxej dddeydǡd_feydȡdafgddʄ Zzdd̄ Z{ej dZd[d^d_d`daejCdbejjDejEjFd\d]gdd΄ Z|ej dZd[d^d_d`dagddЄ Z}dZ~ddӄ Zej dddddgddڄ Zej dddgddބ Zej dddgdd Zej dddgdd Zejjdd Zdd Zdd Zejjdd Zdd Zejjdd Zejjdd Zejjdd Zdd Zdd Zdd Zdd Zejjdd Zdd  Zejjdd Zdd Zejjdd Zdd ZdS (
      N)contextmanager)BytesIOStringIOTextIOWrapperBufferedIOBaseIOBase)guid)Codecc              	   C   s   t jdkrtd ztjdd}t|d$}|	d |
d |d W 5 Q R X | |J}|
ddksrt| dkst|d	dkst| dkstW 5 Q R X W 5 t| X d S )
N)win32darwinzneed sparse file supportZtest_io)prefixwbl   
    l       s   mark
   )sysplatformpytestskiposunlinktempfilemktempopentruncateseekwriteAssertionErrortellread)Zfile_factoryfilenamef r    V/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/pyarrow/tests/test_io.pycheck_large_seeks(   s    




r"   c                	   c   s    t t d V  W 5 Q R X d S N)r   raisesFileNotFoundErrorr    r    r    r!   assert_file_not_found:   s    r&   c               	   C   s   t  } t| }| dks td}d}|| | t|ksFt|| || }|  }||kslt|jrvt|	  |jstt
jtdd tt  W 5 Q R X d S )Nr   s	   engañados   foobarbinary file expectedmatch)r   pa
PythonFiler   r   r   lengetvalueclosedcloser   r$   	TypeErrorr   )bufr   s1s2expectedresultr    r    r!   test_python_file_writeD   s     




r6   c               	   C   s  d} t | }tj|dd}| t| ks.t| dks>t|ddksPt| dks`t|d | dkszt|d | dkst|d}|d	kstt|d
kst| t| kst|j	rt|
  |j	sttjtdd tjt dd W 5 Q R X d S )N   some sample datarmoder         somer   2      sample data   r'   r(   )r   r*   r+   sizer,   r   r   r   r   r.   r/   r   r$   r0   r   )datar1   r   vr    r    r!   test_python_file_read`   s(    




rC   nbytes)r      r   d   file_offset)rE   r   r   rG   c           	   	   C   sD  d}t jt|dd}| dk s&|dk r\tjt jdd |j|| d W 5 Q R X |  d S |j|| d}t|t	|}t||  t	|}t||| }|j
dd	|
dkst|j
d
d	|
d
kst|
 |
 kstt	|d }|
||
|ksttjtdd |d W 5 Q R X |  |js@td S )Ns   data1data2data3data4data5r8   r9   r   zshould be a positive valuer(   )rH   rD   r;   )rD         seekable)r*   r+   r   r   r$   ZArrowInvalid
get_streamr/   minr,   r   r   OSErrorr   r.   )	rD   rH   rA   r   streamstartendr1   nr    r    r!   test_python_file_get_stream   s,    rS   c                  C   sr   d} t | }tj|dd}|jddd}|dks4tt|dksDt|jdd	d}|| ks^tt|d
ksntd S )Nr7   r8   r9   r      )rD   offsets   e samr=   r      )r   r*   r+   Zread_atr   r,   )rA   r1   r   rB   wr    r    r!   test_python_file_read_at   s    rX   c               	   C   s:   d} t | }tj|dd}| | ks,tW 5 Q R X d S )Nr7   r8   r9   )r   r*   r+   readallr   )rA   r1   r   r    r    r!   test_python_file_readall   s    rZ   c               	   C   st   d} d}t | }t|}tj|ddD}||dks:t|d |  |d |  ksVtt|| ksftW 5 Q R X d S )N
   s   some sample data longer than 10r8   r9   )	bytearrayr   r*   r+   readintor   r,   )lengthrA   dst_bufZsrc_bufr   r    r    r!   test_python_file_readinto   s    r`   c               	      s   dd} t |  G  fddd}| }tj|dd`}|}t|ksTtt|  d  kspttdt|d<  d tdkstW 5 Q R X d S )	Nr[   s
   0123456798c                       s.   e Zd Zdd Zedd Z fddZdS )z0test_python_file_read_buffer.<locals>.DuckReaderc                 S   s   d S r#   r    selfr    r    r!   r/      s    z6test_python_file_read_buffer.<locals>.DuckReader.closec                 S   s   dS NFr    ra   r    r    r!   r.      s    z7test_python_file_read_buffer.<locals>.DuckReader.closedc                    s   |kst t d | S r#   )r   
memoryviewrb   rD   r_   r^   r    r!   read_buffer   s    z<test_python_file_read_buffer.<locals>.DuckReader.read_bufferN)__name__
__module____qualname__r/   propertyr.   rg   r    rf   r    r!   
DuckReader   s   
rl   r8   r9      xr   )	r\   r*   r+   rg   r,   r   rd   tobytesord)rA   rl   Zduck_readerr   r1   r    rf   r!   test_python_file_read_buffer   s    
rp   c               	   C   s>   t jtddd"} t| ts"tt| ts0tW 5 Q R X d S )N    r8   r9   )r*   r+   r   
isinstancer   r   r   r   r    r    r!   test_python_file_correct_abc   s    rt   c               	   C   sR   d} t | }t | }tj|dd&}t||D ]\}}||ks.tq.W 5 Q R X d S )Ns   line1
    line2
    line3
    r8   r9   )r   r*   r+   zipr   )rA   r1   buf2r   r   r4   r    r    r!   test_python_file_iterable   s    rw   c                  C   s   dd } t |  d S )Nc                 S   s   t t| dS Nrb)r*   r+   r   )r   r    r    r!   factory  s    z-test_python_file_large_seeks.<locals>.factory)r"   )rz   r    r    r!   test_python_file_large_seeks  s    r{   c                  C   s   d} t | }| dkst| t| ks2t|ddksDt| dksTt|d | dksnt|dd | t| kst|d | dkst|ddkst|jrt|	  |jstd S )	Nr7   r   r;   r<   rJ   r   r=   r>   )
r*   BufferReaderr   r   r@   r,   r   r   r.   r/   )rA   r   r    r    r!   test_bytes_reader
  s     



r}   c                	   C   s$   t t td W 5 Q R X d S )Nzsome sample data)r   r$   r0   r*   r|   r    r    r    r!   test_bytes_reader_non_bytes%  s    r~   c                  C   s@   dd l } dd }| }|   | dks.t|jd k	s<td S )Nr   c                  S   s&   dd } t | }|d |dS )Nr7     r   rI   )r*   r|   r   rg   )rA   readerr    r    r!   
get_buffer.  s    

z>test_bytes_reader_retains_parent_reference.<locals>.get_buffers   sample)gccollect
to_pybytesr   parent)r   r   r1   r    r    r!   *test_bytes_reader_retains_parent_reference*  s    r   c              	   C   s  t jt| d}t|d>}t|}| s4t|	 r@t|
 rLt|d W 5 Q R X t|dD}t|}|	 st| rt|
 st| dkstW 5 Q R X t }t|}| st|	 rt|
 rt|d | dkstd S )Nfoo.txtr   s   foobar
ry   )r   pathjoinstrr   r*   r+   writabler   readablerK   r   r   r   r-   )tmpdirr   r   pfbior    r    r!   test_python_file_implicit_mode:  s(    



r   c              	   C   s   ddg}t jt| d}t|d:}z(tj|dd}| sBt	|
| W 5 |  X W 5 Q R X t|dF}z4tj|dd}| st	| d	|kst	W 5 |  X W 5 Q R X d S )
Ns   line1
s   line2
line3r   r   rW   r9   ry   r8   rq   )r   r   r   r   r   r/   r*   r+   r   r   
writelinesr   r   )r   linesr   r   r    r    r!   test_python_file_writelinesS  s    r   c                  C   sT   t  } t| }t|}~| d ks*t| jr4tt| }|  | jsPtd S r#   )r   r*   r+   weakrefrefr   r.   r/   )r   r   wrr    r    r!   test_python_file_closingg  s    



r   c                 C   sz   t dtjd D ]d}ttj| |d}t|t| ks<tt|t| ksPt| |  ksdt|j	| j	kstqd S )Nr   rF   )protocol)
rangepickleHIGHEST_PROTOCOLloadsdumpsr,   r   rd   r   
is_mutable)r1   r   r5   r    r    r!   check_buffer_picklingw  s    r   c                  C   sR   d} t | }t|t jst|jr(t|js2t| }|| ksFtt| d S N	   some data)	r*   	py_bufferrr   Bufferr   r   is_cpur   r   valr1   r5   r    r    r!   test_buffer_bytes  s    


r   c                  C   sd   t jddd} |  dkst| jdks,tt| }| dksDtt |jdksXtt|  d S )Nr   )addressr@   rq   )	r*   foreign_bufferr   r   r   rd   rn   r   r   )Z	null_buffmr    r    r!   test_buffer_null_data  s    r   c                  C   sR   d} t | }t|t jst|jr(t|js2tt|}|| ksFtt| d S r   )	r*   r   rr   r   r   r   r   rd   r   r   r    r    r!   test_buffer_memoryview  s    


r   c                  C   sV   t d} t| }t|tjs"t|js,t|js6tt |}|| ksJtt| d S r   )	r\   r*   r   rr   r   r   r   r   r   r   r    r    r!   test_buffer_bytearray  s    


r   c                	   C   s(   t jtdd td  W 5 Q R X d S )Nz$(bytes-like object|buffer interface)r(   )r   r$   r0   r*   r   r    r    r    r!   test_buffer_invalid  s    r   c                  C   s6   t d} t| }| d k	s"t~ | d ks2td S r   )r*   r   r   r   r   )r1   r   r    r    r!   test_buffer_weakref  s
    

r   zval, expected_hex_buffer)s   checks
   636865636B)s   0s   0730)rq   rq   c                 C   s   t | }| |kstd S r#   )r*   r   hexr   )r   Zexpected_hex_bufferr1   r    r    r!   test_buffer_hex  s    
r   c                  C   sr   t d} d| d< t| }tj|dd}|d | d ks<t| d  d7  < |d | d ks`t|j|ksntd S )N   *   r   uint8ZdtyperF   )r\   r*   r   np
frombufferr   base)Z
byte_arrayr1   arrayr    r    r!   test_buffer_to_numpy  s    
r   c               	   C   s   t jdt jdd} t| }|js*t|js4t|	 | 
 ksHtt| j}|js^t|jsht|	 | 
 ks|ttjtdd t| jd d d }W 5 Q R X d S )N   r   )rT   r;   znot contiguousr(   rJ   )r   arangeint8Zreshaper*   r   r   r   r   r   rn   Tr   r$   
ValueError)arrr1   r    r    r!   test_buffer_from_numpy  s    




r   c            	      C   s   d} t | }t | }t| }t| }t|}t|}|jdksJt|j|jksZt|j|jksjt|j|jkszttd}t|}|j|jjkstd S )N
   some data!r   r   )	r\   r*   r   r   r   r   r   ctypesrA   )	b1b2b3buf1rv   buf3buf4r   r1   r    r    r!   test_buffer_address  s    





r   c            
      C   s   dd } dd }d}t |}t |}d|d< t|}t|}t|}t|}ttj|tjd}	| || | || | || ||| | ||	 d S )	Nc                 S   s*   |  |st| |kst| |kr&td S r#   equalsr   abr    r    r!   eq  s    ztest_buffer_equals.<locals>.eqc                 S   s*   |  |rt| |krt| |ks&td S r#   r   r   r    r    r!   ne  s    ztest_buffer_equals.<locals>.ner   r   r   r   )r\   r*   r   r   r   Zint16)
r   r   r   r   r   r   rv   r   r   Zbuf5r    r    r!   test_buffer_equals   s     







r   c               	   C   sT   t d} | dkst| tdks&t| dks2ttt | dk W 5 Q R X d S )Nr   s	   some dat1z	some data)r*   r   r   r\   r   r$   r0   r1   r    r    r!   test_buffer_eq_bytes  s    
r   c               	   C   s   t d} t| }t| }t| |d D ]}|| | | ks*tq*tt ||  W 5 Q R X tt || d   W 5 Q R X d S )Nr   rF   )	r\   r*   r   r,   r   r   r   r$   
IndexError)rA   r1   rR   Zixr    r    r!   test_buffer_getitem'  s    
r   c            	   	   C   s  d} t | }|d}t d}||s0t|dd}t d}||sTt|d|shtt|t|dksttt |d W 5 Q R X tt |t|d  W 5 Q R X |d	d  	 d
ksttt |dt| W 5 Q R X |dd	 	 |	 dd  ks.ttt |dd W 5 Q R X |dd  |dsnt|dd |ddst|dd  |t|d st|dd |t|d dsttt |d d d  W 5 Q R X tt |d d d  W 5 Q R X t|}t
| d |d D ]H}t
| d |d D ],}||| 	 |	 || ksXtqXq@d S )Nr   rJ   s   me data!r;   s   me dr   rE   rF   r?   rq   r   rT   )r*   r   slicer   r   r,   r   r$   r   r   r   )	rA   r1   Zslicedr4   Zsliced2Z	expected2rR   rP   stopr    r    r!   test_buffer_slicing6  s@    



& &(r   c                	   C   s,   t jtdd ttd W 5 Q R X d S )NZ
unhashabler(   s   123)r   r$   r0   hashr*   r   r    r    r    r!   test_buffer_hashingi  s    r   c                  C   s.   d} t | }tj|tjd}|jjr*td S )Ns   12345r   )r*   r   r   r   r   flagsZ	writeabler   )r   Z	arrow_refZ	numpy_refr    r    r!   *test_buffer_protocol_respects_immutabilityo  s    
r   c                  C   s   t jddgt jd} | jd d }| j}t||| }t| }~ t j	|t jd
 ddgksbt| d k	spt~| d kstd S )NrF   rJ   r   rA   r   )r   r   Zint32Z__array_interface__rD   r*   r   r   r   r   tolistr   )objaddrr@   r1   r   r    r    r!   test_foreign_bufferz  s    
 r   c                  C   sd   t d} | jdkst| js"t| jd ks0td}t | }|| |  d d |ks`td S )NrG   s   abcder   )	r*   allocate_bufferr@   r   r   r   FixedSizeBufferWriterr   r   )r1   bitwriterr    r    r!   test_allocate_buffer  s    



r   c                  C   s:   t jddd} t| t jst| d | jdks6td S )NrG   T)Z	resizable   )r*   r   rr   ZResizableBufferr   resizer@   r   r    r    r!   test_allocate_buffer_resizable  s    
r   compressionbz2)r$   )Zmarksbrotligziplz4Zzstdsnappyc              	   C   s   t | std|  d}tjjdd|dtj	
 }t|}tj|| d}tj|| dd}t|tsrttj||| d}tj||| dd}t|tst||st||ksttt tj|| d W 5 Q R X d S )	N{} support is not built'  r      r@   )codecT)r   asbytes)r	   is_availabler   r   formatr   randomrandintastyper   rn   r*   r   compressrr   bytesr   
decompressr   r$   r   )r   
INPUT_SIZE	test_datatest_bufcompressed_bufcompressed_bytesdecompressed_bufdecompressed_bytesr    r    r!   test_compress_decompress  s0    

 r  c              
   C   s  t | std|  t | }|jdkr<|jd ksLtnt|jt	sLtdg}| |krt 
| rhttt t | d W 5 Q R X tt t |  W 5 Q R X tt t |  W 5 Q R X tt t |  W 5 Q R X d S d}tjjdd|dtj }t|}t | }t | }t | }||k sDt||ksRt||ks`tt||d D ]}	t | |	}||}
|j|dd	}t|tst||
|}|j||dd	}t|tst||st||ksttt || W 5 Q R X qnttjd
s*td tjjdd}|ddd}t |}|! d }t | |}||}t | |}||}t"|t"|kstd S )Nr   r   r   r   r   r   rF   T)r   default_rngzRequires newer version of numpyr   )seedrG   r   )#r	   r   r   r   r   namecompression_levelr   rr   intZsupports_compression_levelr$   r   Zminimum_compression_levelZmaximum_compression_levelZdefault_compression_levelr   r   r   r   r   rn   r*   r   r   r   r   r   r   hasattrr  Zintegersr   buffersr,   )r   r   Zno_levelr   r  r  Z	min_levelZ	max_levelZdefault_levelr  r  r  r  r  rngvaluesr   Zhard_to_compress_bufferZ
weak_codecZweakly_compressed_bufZstrong_codecZstrongly_compressed_bufr    r    r!   test_compression_level  sl    














r  c               	   C   s   d} t | }|jrtt|t js(tt|}|js:tt	t
 }d|d< dt|jks`tW 5 Q R X t|}t	t
 }d|d< dt|jkstW 5 Q R X d S )Nr      hr   zcannot modify read-only)r*   r   r   r   rr   r   rd   readonlyr   r$   r0   r   valuer   )r   r1   r5   excr   r    r    r!   #test_buffer_memoryview_is_immutable  s    


r  c                	   C   s"   t t t  W 5 Q R X d S r#   )r   r$   r0   r*   r   r    r    r    r!   test_uninitialized_buffer1  s    r  c                  C   s`   d} t  }d}t|D ]}||  q| }t|t| | ksHt| | | ks\td S )N
   dataabcdefr   )r*   BufferOutputStreamr   r   r-   r,   r   r   )r   r   Kir1   r    r    r!   test_memory_output_stream8  s    r  c               	   C   sR   t  } | d | jrt|   | js.ttt | d W 5 Q R X d S )N   oks   not ok)	r*   r  r   r.   r   r-   r   r$   r   rs   r    r    r!    test_inmemory_write_after_closedF  s    


r  c                  C   sf   dd } | d}t   |dks$td}t|}tdD ]}| | q:t   |t|ksbtd S )Nc                 S   s   t t| S r#   )r\   r*   r   )Z	bytes_objr    r    r!   make_bufferR  s    z6test_buffer_protocol_ref_counting.<locals>.make_buffer   foor[   )r   r   r   r   getrefcountr   )r  r1   r   Zrefcount_beforer  r    r    r!   !test_buffer_protocol_ref_countingQ  s    

r"  c               	   C   s   t  } d}tj|dd}| | | t| | t | tt	 | |
d W 5 Q R X |  }| |d kstd S )Nr  ZS1r   utf8rT   )r*   r  r   r   r   r\   r   r   r$   r0   decoder-   r   r   )r   rA   r   r1   r    r    r!    test_nativefile_write_memoryviewb  s    
r%  c                  C   s   d} t  }t  }d}t|D ]}||  ||  q | t| ksRtt j	
t dddggdg}t  }t  }t ||j}t ||j}|| || |  |  | t| kstd S )Nr  r   rF   rJ   rT   r   )r*   ZMockOutputStreamr  r   r   r@   r,   r-   r   ZRecordBatchfrom_arraysr   RecordBatchStreamWriterschemaZwrite_batchr/   )r   f1f2r  r  Zrecord_batchZstream_writer1Zstream_writer2r    r    r!   test_mock_output_streamw  s$    


r+  c              	      s~   d}t jjdd|dd}| d | }tjt|t	  t
 d}|| W 5 Q R X  fdd}| |  |fS )	N   r      r   u1r   c                      s   t   d S r#   )_try_deleter    r   r    r!   teardown  s    z"sample_disk_data.<locals>.teardown)r   r   r   r   rn   r   r   r   r   r   r   r   Zaddfinalizer)requestr   SIZEr   rA   r   r1  r    r0  r!   sample_disk_data  s    
r4  Tc                 C   sJ  |\}}| |dd}| d|d d ks.t| ddks@t| dksPt|  |dd  ksht| t|ks|t|d | dkst|r|t|d  | t|d kst| ddkst|ddkst|dtjd	kst| d	kstt|d
 }|dtj|ks4t| |ksFtd S )Nr8   r9   r[   r   rq   rF   r   rT   rI   rJ   r   )	r   r   r   r@   r,   r   r   SEEK_CURSEEK_END)ZFACTORYZsample_dataallow_read_out_of_boundsr   rA   r   Z	ex_lengthr    r    r!   _check_native_file_reader  s&    
r8  c                 C   s   t tj| dd d S )NF)r7  )r8  r*   
memory_mapr4  r    r    r!   test_memory_map_reader  s    r;  c              	   C   s   | \}}g }t |dZ}||d|d d f ||d|dd f ||d|dd f W 5 Q R X t  |D ]\}}| |kstqd S )Nry   rG   r   i,  )r*   r9  appendrg   r   r   r   r   )r4  r   rA   Zcasesr   r1   r4   r    r    r!   'test_memory_map_retain_buffer_reference  s    &r=  c                 C   s   t tj|  d S r#   )r8  r*   OSFiler:  r    r    r!   test_os_file_reader  s    r?  c                   C   s   t tj d S r#   )r"   r*   r>  r    r    r    r!   test_os_file_large_seeks  s    r@  c                 C   s*   zt |  W n t jk
r$   Y nX d S r#   )r   removeerrorr0  r    r    r!   r/    s    r/  c           	   	   C   sx  d}t jjdd|dd}| d | }tjt| t	 }t
|d}|| W 5 Q R X tj|dd}|d	 |d
 | dkst|d	 |dd
ksttj|dd}|d	 |d |d	 |d	 |ddksttj|dd}|d t|}| |ks,tW 5 Q R X tt |d W 5 Q R X |d |ddksttd S )Nr,  r   r-  r   r.  r   r+br9   r[   s   peekaboo      s   booapeakrW   r   r   rT   )r   r   r   r   rn   r   r   r   r   r   r   r   r*   r9  r   r   r   r   r@   r   r$   IOError)	r   r3  r   rA   r   r   r*  f3Zf4r    r    r!   test_memory_map_writer  s4    








rH  c              	   C   s   d}t jjdd|dt j}| d |d  }| |d d  }tjt	| t
 }t||d }|| || || |  t|d}| | kstW 5 Q R X d S )Nr,  r   r-  r   rJ   ry   )r   r   r   r   r   rn   r   r   r   r   r   r*   create_memory_mapr   r   r/   r   r   r   )r   r3  r   Zdata1Zdata2r   mmapr   r    r    r!   test_memory_map_resize  s    


rK  c              	   C   sT   t jt| t }t|d}|  tj|dd}|	 dksFt
W 5 Q R X d S )Nr   rC  r9   r   )r   r   r   r   r   r   r/   r*   r9  r@   r   )r   r   r   r9  r    r    r!   test_memory_zero_length1  s
    
rL  c                   C   s   t tj d S r#   )r"   r*   r9  r    r    r    r!   test_memory_map_large_seeks9  s    rM  c                 C   s@   t jt| t }t|d}|  |js2t	t 
| d S Nr,  )r   r   r   r   r   r*   rI  r/   r.   r   rA  )r   r   rJ  r    r    r!   test_memory_map_close_remove=  s
    
rO  c                 C   s.   t jt| t }t|d t | d S rN  )r   r   r   r   r   r*   rI  rA  )r   r   r    r    r!   test_memory_map_deref_removeF  s    rP  c              	   C   s   d}t jjdd|dd}| d | }tjt| t	 }t
|d}|| W 5 Q R X tj|dd}|d	 t|}| d
kstW 5 Q R X tt |d W 5 Q R X d S )Nr,  r   r-  r   r.  r   rW   r9   r   rT   r   )r   r   r   r   rn   r   r   r   r   r   r   r   r*   r>  r@   r   r   r$   rF  r   )r   r3  r   rA   r   r   r*  rG  r    r    r!   test_os_file_writerL  s    
rQ  c               	   C   s,   t  } tt | d W 5 Q R X d S )Nfoo)r*   r  r   r$   r0   r   )nfr    r    r!   %test_native_file_write_reject_unicode`  s    rT  c              	   C   s  t jt| t }t|d}|d W 5 Q R X tj|dd8}|j	dksRt
| s^t
| rjt
| svt
W 5 Q R X tj|dd8}|j	dkst
| st
| rt
| st
W 5 Q R X tj|dd<}|j	dkst
| rt
| st
| rt
W 5 Q R X tj|dd@}|j	dks<t
| rJt
| sXt
| rft
W 5 Q R X t|d}|d W 5 Q R X t|d@}|j	dkst
| st
| rt
| st
W 5 Q R X t|d@}|j	dks t
| st
| st
| s*t
W 5 Q R X t|d	@}|j	dksRt
| s`t
| snt
| s|t
W 5 Q R X d S )
Nr      foooor8   r9   ry   rW   zr+zrb+rC  )r   r   r   r   r   r   r   r*   r>  r:   r   r   r   rK   r9  )r   r   r   r    r    r!   test_native_file_modesg  sP    rV  c              	   C   s   t d}t | t jt| t }tj|dd W 5 Q R X t |j	d@ d| @ ks`t
t jt| t }t|d W 5 Q R X t |j	d@ d| @ kst
d S )NrJ   rW   r9   i  i  )r   umaskr   r   r   r   r*   r>  statst_moder   r9  )r   Z	cur_umaskr   r    r    r!   test_native_file_permissions  s    



rZ  c           	      C   s   t jt| t }t|d}|d W 5 Q R X tj|dd}|j	rNt
W 5 Q R X |j	sbt
tj|dd}|j	r|t
W 5 Q R X |j	st
||g}ddddd	d
dg}|D ]6}|D ],\}}tt t|||  W 5 Q R X qqd S )Nr   rU  ry   r9   )r   r    )r   )r   )r@   r    )flushr    )r   r    )r   r    )rK   r    )r   r   r   r   r   r   r   r*   r>  r.   r   r9  r   r$   r   getattr)	r   r   r   Zos_fileZ	mmap_filefilesmethodsmethodargsr    r    r!   .test_native_file_raises_ValueError_after_close  s0    

ra  c              	   C   s>  d}t jt| t }t|d}||d W 5 Q R X tt	j
|dd&}| s^t| }||ksrtW 5 Q R X |jsttt	j
|dd }t|}d||kstW 5 Q R X t jt| t }tt	j
|dd}| st|| W 5 Q R X tt	j
|dd}| }||ks0tW 5 Q R X d S )Nzfoooo
barrr
bazzz
r   utf-8ry   r9    )r   r   r   r   r   r   r   encoder   r*   r>  r   r   r   r.   listr   )r   rA   r   r   Zfilresr   Zpath2r    r    r!   test_native_file_TextIOWrapper  s&    
rg  c              	   C   s   d}t | d }t|d}||d  W 5 Q R X tj|dd}t|h}| dks\td}||}t	|t
d	| t	| kst||   kr|d	 ksn tW 5 Q R X d S )
Ns	   foo
quux
largefile.txtr   i ry   r9   r   i N  rJ   )r   r   r   r*   r>  r   r   r   	readlinesr,   mathceil)r   rA   r   r   binary_filerD   r   r    r    r!   #test_native_file_TextIOWrapper_perf  s    

"rm  c              	   C   s   dd }t | d }t|d}|| W 5 Q R X g }tj|ddX}| }t|t|k sdt|| |d}t|dkst|| |sHqqHW 5 Q R X d	||kstd S )	Ns   123
i@B rh  r   ry   r9   i0u  rq   )
r   r   r   r*   r>  read1r,   r   r<  r   )r   rA   r   r   chunksr   r    r    r!   test_native_file_read1  s    


rp  c              	   C   s   dd l }dd lm} dd }t| d }t|d}|| W 5 Q R X tj|ddL}|j|dd	}|	d
gd dgd d}|
|| | dkstW 5 Q R X d S )Nr   s   a,b
i rh  r   ry   r9   r[   )Znrowsr   r   r   i   )pandasZpandas.testingtestingr   r   r   r*   r>  Zread_csvZ	DataFrameZassert_frame_equalr   r   )r   pdtmrA   r   r   Zdfr4   r    r    r!   #test_native_file_pandas_text_reader  s    ru  c                	   C   s@   t   tdd W 5 Q R X t   tdd W 5 Q R X d S )Nnon_existent_filery   )r&   r*   r>  r9  r    r    r    r!   test_native_file_open_error"  s    rw  c                  C   sZ   t d} t j| dd}|ddks*t|  dks:t|  |jsLt| jsVtd S )N	   123456789r;   buffer_sizerJ      12)r*   r|   BufferedInputStreamr   r   r   r/   r.   )rawr   r    r    r!   test_buffered_input_stream,  s    

r~  c                  C   s   t jt ddd} | ddks&t|  }| js8t|jrBt| sNt|ddks`t|d |ddks|td S )Nrx  r;   ry  rJ   r{     5678s   3456)	r*   r|  r|   r   r   detachr.   rK   r   r   r}  r    r    r!   *test_buffered_input_stream_detach_seekable6  s    


r  c               	   C   s   t jt jt ddddd} | ddks0t|  }| jsBt|jrLt| rXt|ddksjtt	t
 |d W 5 Q R X d S )Nrx  r;   ry  rJ   r{  r  )r*   r|  r|   r   r   r  r.   rK   r   r$   EnvironmentErrorr   r  r    r    r!   .test_buffered_input_stream_detach_non_seekableC  s    

r  c                  C   s   t jdt jd} t| }t|}tj|dd}|d | d d  dksTt	|
  | d d  dkstt	|d |  |jst	|jst	| d d	  d
kst	d S )NrG   r   r;   ry  r{            12  s   3456789r[   s
   123456789 )r   zerosr   r*   r   r   BufferedOutputStreamr   rn   r   r[  r/   r.   )np_bufr1   r}  r   r    r    r!   test_buffered_output_streamR  s    





r  c                  C   s   t jdt jd} t| }tjt|dd}|d | d d  dksPt	|
 }|jsbt	|jrlt	| d d  dkst	d S )NrG   r   r;   ry  r{  r  r  )r   r  r   r*   r   r  r   r   rn   r   r  r.   )r  r1   r   r}  r    r    r!   "test_buffered_output_stream_detachc  s    



r  c              	   C   s   t j|dd}t ||H}|jr&t| s2t| r>t| rJt| }|| ks^tW 5 Q R X |jsrt|js|tt j|dd}t ||.}|	 }t
|t jst| | kstW 5 Q R X d S Nry   r9   )r*   r>  CompressedInputStreamr.   r   r   r   rK   r   rg   rr   r   r   )rA   fnr   r}  
compressedgotr1   r    r    r!   check_compressed_inputs  s    


r  c              	   C   sB   d}t | d }t|d}|| W 5 Q R X t||d d S )N   some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
eof
zcompressed_input_test.gzr   r   )r   r   r   r   r  r   rA   r  r   r    r    r!   test_compressed_input_gzip  s
    r  c              
   C   sx   d}t | d }t|d}|| W 5 Q R X zt||d W n0 tk
rr } ztt | W 5 d }~X Y nX d S )Nr  zcompressed_input_test.bz2rW   r   )r   r   BZ2Filer   r  NotImplementedErrorr   r   )r   rA   r  r   er    r    r!   test_compressed_input_bz2  s    r  c              	   C   s
  t dstd d}t| d }t|d}|| W 5 Q R X t	|d}|
 }| |ksltW 5 Q R X |jstt	t|d}|
 }| |kstW 5 Q R X |jstt|d}t	|d}|
 }| |kstW 5 Q R X |jstd S )Nr   gzip support is not builtr  z!test_compressed_input_openfile.gzr   ry   )r	   r   r   r   r   r   r   r   r*   r  rg   r   r   r.   pathlibPath)r   rA   r  r   r  r1   r    r    r!   test_compressed_input_openfile  s&    




r  c              	   C   s>   t j|dd}t ||}| }|| ks0tW 5 Q R X d S r  )r*   r>  r  r   r   )rA   r  r   r}  r  r  r    r    r!   check_compressed_concatenated  s    r  c              	   C   st   d}t | d }t|d}||d d  W 5 Q R X t|d}||dd   W 5 Q R X t||d d S )Nr  zcompressed_input_test2.gzr   r=   abr   )r   r   r   r   r  r  r    r    r!   !test_compressed_concatenated_gzip  s    r  c               
   C   s   d} t | }tt t |d W 5 Q R X tt t |d  W 5 Q R X t |d(}tjtdd |  W 5 Q R X W 5 Q R X d S )Ns   foofoofoofoofoofoofoofoofoofooZunknown_compressionr   zzlib inflate failedr(   )	r*   r|   r   r$   r   r  r0   rF  r   )rA   r}  r  r    r    r!   test_compressed_input_invalid  s    
r  c              	   C   s   t  }t ||>}|jr t| r,t| s8t| rDt||  W 5 Q R X |jsbt|jsltt	|d}||
  W 5 Q R X d S )Nr   )r*   r  CompressedOutputStreamr.   r   r   r   rK   r   r   r-   )rA   r  r   r}  r  r   r    r    r!   make_compressed_output  s    


r  c              	   C   sL   d}t | d }t||d t|d}| }||ks>tW 5 Q R X d S )Nr  zcompressed_output_test.gzr   ry   )r   r  r   r   r   r   )r   rA   r  r   r  r    r    r!   test_compressed_output_gzip  s    r  c              
   C   s   d}t | d }zt||d W n0 tk
rP } ztt | W 5 d }~X Y nX t|d}| }||ksttW 5 Q R X d S )Nr  zcompressed_output_test.bz2r   r8   )	r   r  r  r   r   r   r  r   r   )r   rA   r  r  r   r  r    r    r!   test_compressed_output_bz2  s     r  c              
   C   sz   t dstd t| d d}|d W 5 Q R X | d d(}t|d}|d W 5 Q R X W 5 Q R X d S )Nr   r  zctor.gzs   testzctor2.gzr   )r	   r   r   r   r*   r  r   r   )r   rO   r   r    r    r!   test_output_stream_constructor  s    

r  )r   expected_compression)zfile.bz2r   )zfile.lz4r   zfile.gzzpath/to/file.zstc              	   C   sZ   t |s0ttjj t |  W 5 Q R X n&t | }t|t sHt	|j
|ksVt	d S r#   )r	   r   r   r$   r*   libArrowNotImplementedErrordetectrr   r   r
  )r   r  r   r    r    r!   test_compression_detection  s    

r  c                	   C   s`   t t td W 5 Q R X t t td  W 5 Q R X t t td W 5 Q R X d S )Nunknown)r   r$   r   r	   r   r0   r    r    r    r!   test_unknown_compression_raises  s    r  c              	   C   s   t | std|  d}t }t|| }|| W 5 Q R X |	 }t
|t
|k sdtt|}t|| }| }||kstW 5 Q R X d S )Nr   r  )r	   r   r   r   r   r*   r  r  r   r-   r,   r   r|   r  r   )r   rA   r}  r  cdatar  r    r    r!   test_compressed_roundtrip  s    

r  c              	   C   s   t | std|  tjtdddddggdg}t	 }t
|| }t||j}|j|dd |  |  | }tt|| }t| }||kstd S )	Nr   rF   rJ   rT   r;   r   r   )Zmax_chunksize)r	   r   r   r   r   r*   Tabler&  r   r  r  r'  r(  Zwrite_tabler/   r-   r  r|   ZRecordBatchStreamReaderZread_allr   )r   tabler}  rO   r   r1   Z	got_tabler    r    r!   "test_compressed_recordbatch_stream9  s    
"r  u   Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !c                 C   sf   t |}tt| |||}g }|t|}|| |s&qFq&d|}|	|| ksbt
d S )Nrq   )iterr*   transcoding_input_streamr|   rd  r   nextr<  r   r$  r   )rA   src_encodingdest_encodingZchunk_sizesrO   outr1   r    r    r!   check_transcodingX  s     

r  zsrc_encoding, dest_encoding)rb  utf-16)r  rb  )rb  z	utf-32-le)rb  z	utf-32-bec              
   C   s2   t t| |ddg t t| |tddddg d S )Nr   r   rF   rJ   rT   r   )r  unicode_transcoding_example	itertoolscycle)r  r  r    r    r!   test_transcoding_input_streamg  s       r  )rb  rb  )rb  UTF8c                 C   s$   t d}t || ||ks td S )Ns   abc123)r*   r|   r  r   r  r  rO   r    r    r!   test_transcoding_no_opsw  s    
  r  )rb  ascii)rb  zlatin-1c              	   C   s>   t t d| | |}tt |d W 5 Q R X d S )Nu   ĀrF   )r*   r  r|   rd  r   r$   UnicodeEncodeErrorr   r  r    r    r!   test_transcoding_encoding_error  s    r  c              	   C   s8   t t d| |}tt |d W 5 Q R X d S )Ns   rF   )r*   r  r|   r   r$   UnicodeErrorr   r  r    r    r!   test_transcoding_decoding_error  s    r  c                  C   s   d} t | t| fD ]}t |}| | kstqt| }t t|}| |ks^tt jt|dd}| | kstd S Nr  r   r   )r*   r   rd   input_streamr   r   r   r   )rA   argrO   gz_datar    r    r!   test_input_stream_buffer  s    

r  c                  C   s0   G dd d} t |  }|ddks,td S )Nc                   @   s*   e Zd Zdd Zedd ZdddZdS )	z1test_input_stream_duck_typing.<locals>.DuckReaderc                 S   s   d S r#   r    ra   r    r    r!   r/     s    z7test_input_stream_duck_typing.<locals>.DuckReader.closec                 S   s   dS rc   r    ra   r    r    r!   r.     s    z8test_input_stream_duck_typing.<locals>.DuckReader.closedNc                 S   s   dS )N   hellor    re   r    r    r!   r     s    z6test_input_stream_duck_typing.<locals>.DuckReader.read)N)rh   ri   rj   r/   rk   r.   r   r    r    r    r!   rl     s   
rl   r   r  )r*   r  r   r   )rl   rO   r    r    r!   test_input_stream_duck_typing  s    r  c              	   C   s   d}| d }t t|d}|| W 5 Q R X t|}| |ksJttt|}| |kshtttt|}| |kstd S )Nr  r  r   )	r   r   r   r*   r  r   r   r  r  )r   rA   	file_pathr   rO   r    r    r!   test_input_stream_file_path  s    
r  c              	   C   s   d}t |}| d }tt|d}|| W 5 Q R X t|}| |ksTttt|}| |ksrttt	
t|}| |ksttj|dd}| |ksttj|d d}| |kstd S )Nr  zinput_stream.gzr   r   r  r   r   r   r   r   r*   r  r   r   r  r  r   rA   r  r  r   rO   r    r    r!   &test_input_stream_file_path_compressed  s    

r  c              	   C   s:  d}| d }t t|d}|| W 5 Q R X tj|dd}t|tjsNt| |ks^ttjt|dd}t|tjst| |ksttjt	
t|dd}t|tjst| |ksttj|dd}t|tjstd	}tjt|d
 tj|dd W 5 Q R X tt tj|dd W 5 Q R X d S )Nr  zinput_stream.bufferedr       ry  @      r   $Buffer size must be larger than zeror(   rE   Zmillion)r   r   r   r*   r  rr   r|  r   r   r  r  r>  r   r$   r   r0   )r   rA   r  r   rO   unbuffered_streammsgr    r    r!   $test_input_stream_file_path_buffered  s(    r  c              	   C   s   d}t |}| d }tt|d}|| W 5 Q R X tj|ddd}| |ksZttjt|dd}| |ks|ttjt	
t|d	d}| |kstd S )
N  some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
some test data
eof
z'input_stream_compressed_and_buffered.gzr   r  r   rz  r   r  ry  r  r  r  r    r    r!   3test_input_stream_file_path_compressed_and_buffered  s    
r  c              	   C   s   d}t |}t|}| |ks&tt|}t |}t|}| |ksRt|d tj|dd}| |kszt| d }tt	|d}|
| W 5 Q R X tt	|d }t|}| |kstW 5 Q R X d S )Nr  r   r   r  r  r   ry   )r   r*   r  r   r   r   r   r   r   r   r   )r   rA   r   rO   r  r  r   r    r    r!   test_input_stream_python_file  s"    




r  c                  C   sZ   d} t | }t|}t|}||ks.tt|}tj|dd}| | ksVtd S r  )r   r   r*   r|   r  r   r   )rA   r  r   rO   r    r    r!   test_input_stream_native_file%  s    



r  c              
   C   s   t d}tt tj|dd W 5 Q R X t t fD ]$}tt t| W 5 Q R X q8t	  td W 5 Q R X t
t| d d*}tjtdd t| W 5 Q R X W 5 Q R X d S )	Nrq   rR  r  rv  new_filer   zreadable file expectedr(   )rd   r   r$   r   r*   r  r\   r   r0   r&   r   r   )r   r1   r  r   r    r    r!   test_input_stream_errors1  s    r  c                  C   sj   d} t t| }tt|}||  || ks6tt t| }tt|}||  || ksftd S )Nr  )r\   r,   r*   output_streamr   r   r   rd   )rA   r1   rO   r    r    r!   test_output_stream_bufferB  s    

r  c                  C   sF   G dd d} |  }t |}|ds,t|j  dksBtd S )Nc                   @   s0   e Zd Zdd Zdd Zedd Zdd Zd	S )
z2test_output_stream_duck_typing.<locals>.DuckWriterc                 S   s   t  | _d S r#   )r*   r  r1   ra   r    r    r!   __init__R  s    z;test_output_stream_duck_typing.<locals>.DuckWriter.__init__c                 S   s   d S r#   r    ra   r    r    r!   r/   U  s    z8test_output_stream_duck_typing.<locals>.DuckWriter.closec                 S   s   dS rc   r    ra   r    r    r!   r.   X  s    z9test_output_stream_duck_typing.<locals>.DuckWriter.closedc                 S   s   | j | d S r#   )r1   r   )rb   rA   r    r    r!   r   \  s    z8test_output_stream_duck_typing.<locals>.DuckWriter.writeN)rh   ri   rj   r  r/   rk   r.   r   r    r    r    r!   
DuckWriterQ  s
   
r  r  )r*   r  r   r   r1   r-   r   )r  Zduck_writerrO   r    r    r!   test_output_stream_duck_typingO  s
    
r  c                 C   sD   d}| d }dd }||| |t || |tt || d S )Nr  r  c              	   S   sN   t | }|| W 5 Q R X tt| d}| |ks@tW 5 Q R X d S rx   )r*   r  r   r   r   r   r   )r  rA   rO   r   r    r    r!   
check_datai  s    z0test_output_stream_file_path.<locals>.check_data)r   r  r  r   rA   r  r  r    r    r!   test_output_stream_file_pathe  s    
r  c              	   C   s   d}| d }dd }t ||||ks,tt |t|||ksHtt |tt|||ksjtt |||dd|kst|||d d|ksttjtdd |||d	d|kstW 5 Q R X d S )
Nr  zoutput_stream.gzc              
   [   sR   t j| f|}|| W 5 Q R X tt| d}| W  5 Q R  S Q R X d S rx   r*   r  r   r   r   r   r  rA   kwargsrO   r   r    r    r!   r  y  s    z;test_output_stream_file_path_compressed.<locals>.check_datar   r  zInvalid value for compressionr(   rabbit)	r   r   r   r   r  r  r   r$   r   r  r    r    r!   'test_output_stream_file_path_compressedt  s$    r  c              	   C   s   d}| d }dd }t j|dd}t|t js2td}tjt|d |||d	d|ks\tW 5 Q R X |||d
d|ks|t|||dd|kst|t||d
d|kst|t	
t||d
d}||kstd S )Nr  output_stream.bufferedc              
   [   sr   t j| f|0}|dddkr0t|t js0t|| W 5 Q R X tt| d}|	 W  5 Q R  S Q R X d S )Nrz  r   ry   )
r*   r  getrr   r  r   r   r   r   r   r  r    r    r!   r    s    z9test_output_stream_file_path_buffered.<locals>.check_datar   ry  r  r(   ir  r  )r*   r  rr   r>  r   r   r$   r   r   r  r  )r   rA   r  r  r  r  r5   r    r    r!   %test_output_stream_file_path_buffered  s     r  c                 C   sz   d}| d }dd }|||dd}t ||ks4t|||dd}t ||ksTt|||ddd	}t ||ksvtd S )
Nr  z(output_stream_compressed_and_buffered.gzc              
   [   sR   t j| f|}|| W 5 Q R X tt| d}| W  5 Q R  S Q R X d S rx   r  r  r    r    r!   r    s    zHtest_output_stream_file_path_compressed_and_buffered.<locals>.check_datar  ry  r  r   r  )r   r   r   )r   rA   r  r  r5   r    r    r!   4test_output_stream_file_path_compressed_and_buffered  s    r  c                 C   sD   d}| d }dd }|||dd|ks*t |||dd|ks@t d S )Ns   some test data
r  c              
   [   sP   t j| f|}|| ~t  tt| d}| W  5 Q R  S Q R X d S rx   )r*   r  r   r   r   r   r   r   r  r    r    r!   r    s    
z1test_output_stream_destructor.<locals>.check_datar   ry  r  )r   r  r    r    r!   test_output_stream_destructor  s
    r  c                    s>   d} fdd}|||ks t t||dd|ks:t d S )Nr  c              
      sp   t  d }t|d*}tj|f|}||  W 5 Q R X W 5 Q R X t|d}| W  5 Q R  S Q R X d S )NZoutput_stream_filer   ry   )r   r   r*   r  r   r   )rA   r  r  r   rO   r   r    r!   r    s    z2test_output_stream_python_file.<locals>.check_datar   r  )r   r   r   )r   rA   r  r    r  r!   test_output_stream_python_file  s    r  c              
   C   s   t t }tt tj|dd W 5 Q R X t t fD ]$}tt t| W 5 Q R X q:t	| d }t
|d}W 5 Q R X t
|d*}tjtdd t| W 5 Q R X W 5 Q R X d S )NrR  r  r  r   ry   zwritable file expectedr(   )rd   r\   r   r$   r   r*   r  r   r0   r   r   )r   r1   r  r  r   r    r    r!   test_output_stream_errors  s    

r  )T)r   
contextlibr   ior   r   r   r   r   r  r   r   rj  r   r  r   r   r   r   r   numpyr   Zpyarrow.utilr   Zpyarrowr	   r*   r"   r&   r6   rC   markZparametrizerS   rX   rZ   r`   rp   rt   rw   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   paramZxfailr  r  r  r  r  r  r  r  r"  r%  r+  Zfixturer4  r8  r;  r=  r?  r@  r/  rH  rK  rL  rM  rO  rP  rQ  rT  rV  rZ  ra  rg  rm  rp  rq  ru  rw  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  r  r  r  r  r  r  r  r  r  r  r  r  r  r    r    r    r!   <module>   s  
	!*


3 

 

O&

!)	3








	


	














