a
    feza,                  
   @   s  d 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ZzddlZW n ey   dZY n0 ddlZddlmZmZmZmZ ddlmZmZ ddlmZmZmZmZ ddlm Z m!Z! ddl"m#Z# dd	l$m%Z% dd
l$m&Z& ddl$m'Z' ddl$m(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z. g Z/dZ0e/1e0 e2Z3e/1e3 e4dZ5e/1e5 e6dZ7e/1e7 e8dZ9e/1e9 e:dZ;e/1e; e<dZ=e/1e= dZ>e/1e> g Z?e/1e? i Z@e/1e@ eAZBe/1eB dd ZCG dd dZDG dd deEZFe/1eC e/1eD e/1eF eD ZGe/1eG eF ZHe/1eH edddgede/dd ZIdd ZJedddeK gdd  ZLeedg d!d"d# ZMed$d% ZNed&d' ZOed(d) ZPed*d+ ZQed,d- ZReed.g d/d0d1 ZSeeedd2d3gd4d5 ZTed6d7 ZUd8d9 ZVed:d; ZWed<d= ZXed>d?d@gdAdB ZYedCdDdEdFZdGfdHdIZdGfgdJdK Z[edLdMdNgdOdP Z\eedg dQedRe*dSdT Z]dUdV Z^dWdX Z_edYdZe_fd[e^fgd\d] Z`ed^g d_d`da Zaedbdc Zbeddde Zcedfdg Zdedhdi Zeedjdk ZfedldmdndoZegddpdp hdq gdrdsgdtedug dvdwdx Ziedydddzd{di gd|d} Zjed~g ddd Zkedddi gdd Zledur G dd dejmZndd ZoG dd dZpedd Zqdd Zredd Zsedd Ztedd Zuedd Zvdd Zwedddi gdd Zxdd ZyG dd de,ZzG dd de,Z{dd Z|edd Z}edd Z~dS )z@Test the numpy pickler as a replacement of the standard pickler.    N)closing)np
with_numpywith_lz4without_lz4)with_memory_profilermemory_used)parametrizeraisesSkipTestwarns)numpy_pickleregister_compressor)data)_IO_BUFFER_SIZE)_detect_compressor)#_is_numpy_array_byte_order_mismatch)_ensure_native_byte_order)_COMPRESSORS_LZ4_PREFIXCompressorWrapperLZ4_NOT_INSTALLED_ERRORBinaryZlibFile    c                 c   s
   | V  d S Nr   )xr   r   <lib/python3.9/site-packages/joblib/test/test_numpy_pickle.py	_functionH   s    r   c                   @   s   e Zd Zdd ZdS )_classc                 C   s   d S r   r   selfr   r   r   _methodM   s    z_class._methodN__name__
__module____qualname__r"   r   r   r   r   r   L   s   r   c                   @   s   e Zd Zdd ZdS )	_newclassc                 C   s   d S r   r   r    r   r   r   r"   R   s    z_newclass._methodNr#   r   r   r   r   r'   Q   s   r'   compressmemberc                 C   sD   |  dj}tj|||d t|}|t|kr@||ks@J d S )Ntest.pklr(   )joinstrpathr   dumploadcopydeepcopy)tmpdirr(   r)   filenameZ_memberr   r   r   test_standard_typesb   s
    
r4   c                   C   s:   t t tdt  W d    n1 s,0    Y  d S )Nfoo)r
   
ValueErrorr   r.   dictr   r   r   r   test_value_erroro   s    
r8   wrong_compress
   c                 C   sP   d | }tt }tjdd| d W d    n1 s80    Y  || d S )Nz%Non valid compress level given: "{0}"dummyr5   r+   )formatr
   r6   r   r.   match)r9   Zexception_msgexcinfor   r   r   test_compress_level_erroru   s    
.r@   )FTr      zlibc                 C   s  |  dj}tjd}|d}t|f|jf||f|||gfD ]\}}tj	|||d}t
|dksjJ |d |kszJ tj|d sJ t|}|D ]}	t|	tjsJ qtjt|t| qBttdtj|d dd	tjd
fD ]n}tj	|||d}t
|dksJ t|}t|tjurVt|drVt|t|sVJ tj|| qt }tj	|||d}t
|dksJ t|}
t|
t|sJ tj|
j|j tj|
j|j tj|
j|j d S )Nr*   r   r;      r+   r   r;   mmapw+   )modeshapedtypeZ__array_prepare__)r,   r-   r   randomRandomStaterandom_sample	enumerateTr   r.   lenospathexistsr/   
isinstancendarraytestingassert_array_equalarraymatrixzerosmemmapfloattypehasattrComplexTestObjectarray_float	array_int	array_obj)r2   r(   r3   rndaindexobj	filenamesZobj_item
obj_loadedr   r   r   test_numpy_persistence   sB    
(



rj   c                 C   sL   t jtd t jd}| dj}tj||dd t|}t j	
|| d S )Nd   rJ   r*   Tr+   )r   onesr   uint8r,   r-   r   r.   r/   rV   rW   )r2   	big_arrayr3   Zarr_reloadedr   r   r   2test_numpy_persistence_bufferred_array_compression   s
    
rp   c                 C   s  t jd}|d}| dj}t|| tj|dd}t	|t j
sLJ | dj}t }t|| tj|dd}t	|t|sJ t	|jt j
sJ |jjjrJ t	|jt j
sJ |jjjrJ t	|jt j
rJ t j|j|j t j|j|j t j|j|j tj|dd}|jjjs0J d|jdd< |jjjsNJ d|jdd< tj|dd}t j|j|j t j|j|j tj|d	d |jjjsJ |jjdksJ |jjjsJ |jjdksJ d S )
Nr   r;   z	test1.pklr	mmap_modez	test2.pklr+g      $@rF   )r   rK   rL   rM   r,   r-   r   r.   r/   rT   r[   r_   r]   r`   flagsZ	writeablera   rb   rV   rW   rH   )r2   rc   rd   r3   brf   ri   obj_reloadedr   r   r   test_memmap_persistence   sT    





rx   c                 C   s~   t jd}|d}t jddgtd}||f}| dj}t	|| tj
|dd\}}t|t jsjJ t|t jrzJ d S )	Nr   r;   r   rv   rl   r*   rq   rr   )r   rK   rL   rM   rX   objectr,   r-   r   r.   r/   rT   r[   )r2   rc   rd   rv   Z	constructr3   Za_cloneZb_cloner   r   r   $test_memmap_persistence_mixed_dtypes   s    
rz   c                 C   s`   t jd}|d}t j|d}| dj}t	|| tj
|dd}t|t jjs\J d S )Nr   r;   g      ?r*   rq   rr   )r   rK   rL   rM   ZmaZmasked_greaterr,   r-   r   r.   r/   rT   Zmasked_array)r2   rc   rd   r3   rv   r   r   r   test_masked_array_persistence  s    
r{   c                 C   s   t jd}|d}| dj}tj||dd tt	}tj
|dd W d    n1 s^0    Y  t|dksxJ t|d jd|dd	 ksJ d S )
Nr   r;   r*   r   r+   rt   rr   ztmmap_mode "%(mmap_mode)s" is not compatible with compressed file %(filename)s. "%(mmap_mode)s" flag will be ignored.)r3   rs   )r   rK   rL   rM   r,   r-   r   r.   r   UserWarningr/   rP   strmessage)r2   rc   rd   Zthis_filenamewarninfor   r   r   test_compress_mmap_mode_warning  s    

,r   
cache_size)Nr   r;   c                 C   s   |  dj}tjd}|d}td td  }t	j
|||d W d    n1 sZ0    Y  |d urpdnd}t||ksJ |D ]*}|jtksJ t|jd|ksJ qd S )Nr*   r   rC   always)r   r   zzPlease do not set 'cache_size' in joblib.dump, this parameter has no effect and will be removed. You used 'cache_size={0}')r,   r-   r   rK   rL   rM   warningssimplefilterr   r   r.   rP   categoryDeprecationWarningr}   r~   r=   )r2   r   r3   rc   rd   r   expected_nb_warningswr   r   r   test_cache_size_warning!  s    


.r   TFc                 C   s   |  dj}td}tjdtd tjd}t|}t|}||||fD ]n}|jd }|ttj	
dd }	ttj||	|d}
td	 }|
|ksJ ttj|	}
d
t }|
|| k sNJ qNd S )Nr*   r;   r;   rk   g    .ArI   rJ   r     r+   g0@    )r,   r-   r   rm   intrn   rY   nbytesr}   rK   randintr   r   r.   r   r/   )r2   r(   r3   Zsmall_arrayro   Zsmall_matrixZ
big_matrixrf   sizeZobj_filenameZmem_usedZwrite_buf_sizeZread_buf_sizer   r   r   test_memory_usage6  s     



r   c                 C   s6  t jdt ddt jdt ddt jdt ddt jdt ddt jdddd	d
gddt jdt jd t jg dt ddt jg dt dddg	}| dj}t	j
||dd}t|dksJ t	|}t||D ]L\}}t|t jr$t|}|j|jksJ t j|| q||ksJ qd S )N   <i8rl   >i8<f8>f8r   abcrD   rd   rv   O   r   r   rD      C'est l'été !ztemp.pkl.gzr+   )r   arangerJ   rX   rn   tobytesrY   r,   r-   r   r.   rP   r/   ziprT   rU   r   rV   assert_equal)r2   expected_listfnameZdumped_filenamesresult_listresultexpectedr   r   r   $test_compressed_pickle_dump_and_loadS  s(    
r   c              
   C   sR  t d| }t|d}ddd}|dd}||d}||krztd4}td tjd	d
dd t	
| }W d   n1 s0    Y  tj| }	d|	v sd|	v rdnd}
t||
ksJ |D ]*}|jtksJ t|jd| ksJ qt||D ]P\}}t|tjrDt|}|j|jks4J tj|| n||ksJ qW n ty } z||dkrt|tsJ d}|t|v sJ n>| drtj d rt|tsJ t!t|v sJ n W Y d}~n
d}~0 0 n\zt	
|  t"dW nD tyL } z*d|}|t|j v s8J W Y d}~n
d}~0 0 dS )zHelper function to test joblib pickle content.

    Note: currently only pickles containing an iterable are supported
    by this function.
    z.+py(\d)(\d).+r   rD   rA   )rD   rA   rG   Nr   ignoreZnumpyz"The compiler package is deprecated)moduler~   z_0.9z_0.8.4r   zkThe file '{0}' has been generated with a joblib version less than 0.10. Please regenerate this pickle file.zPYou may be trying to read with python 3 a joblib pickle generated with python 2..lz4z>Numpy pickle loading should have raised a ValueError exceptionz unsupported pickle protocol: {0})#rer>   r   groupgetr   r   r   filterwarningsr   r/   rQ   rR   basenamerP   r   r   r}   r~   r=   r   rT   r   rU   r   rJ   rV   r   	Exceptionr6   endswithr   argsr   AssertionError)r3   r   Zversion_matchZpy_version_used_for_writingZ%py_version_to_default_pickle_protocolZpickle_reading_protocolZpickle_writing_protocolr   r   filename_baser   r   r   r   excr~   er   r   r   _check_picklep  sj    



(


r   c               	      s   t jdt ddt jdt ddt jdddddgd	dt jd
t jd t jg dt dddg} tj	tj
tjd td ur d7   fddtD }|D ]}t||  qd S )Nr   r   rl   r   r   r   rD   r   r   r   r   r   ).pkl.gzz.gzip.bz2lz4).xz.lzmac                    s0   g | ]( t  fd dD rtj qS )c                 3   s   | ]}  |V  qd S r   )r   ).0extfnr   r   	<genexpr>      zGtest_joblib_pickle_across_python_versions.<locals>.<listcomp>.<genexpr>)anyrQ   rR   r,   )r   Zpickle_extensionsZtest_data_dirr   r   
<listcomp>  s   z=test_joblib_pickle_across_python_versions.<locals>.<listcomp>)r   r   rJ   rX   rn   r   rY   rQ   rR   dirnameabspathr   __file__lzmalistdirr   )r   Zpickle_filenamesr   r   r   r   )test_joblib_pickle_across_python_versions  s     r   c                  C   sf  t jddgddgdt jdt ddt jdt ddg} | D ]j}tjd	kr\t|rhJ nt|shJ t|}|jjr|jj	 D ]}|d
 jdk qq@|jjdks@J q@t jddgddgdt jdt ddt jdt ddg}|D ]t}tjdkrt|rJ nt|sJ t|}|jjrP|jj	 D ]}|d
 jdk q8q|jjdksJ qd S )N)r   g       @)rA   g      @) r   )r   r   rl   rA   r   r   Zbigr   =)r   r   )r   r   r   r   little)
r   rX   r   rJ   sys	byteorderr   r   fieldsvalues)Z	be_arraysrX   Z	convertedfZ	le_arraysr   r   r   .test_numpy_array_byte_order_mismatch_detection  s<    



r   compress_tuple)rB   rA   gziprA   c                 C   s^   |  dj}tjd||d t|d$}t||d ks<J W d    n1 sP0    Y  d S )Nr*   r<   r+   rbr   r,   r-   r   r.   openr   )r2   r   r3   r   r   r   r   test_compress_tuple_argument  s    r   zcompress_tuple,message))rB   rA   Zextraz9Compress argument tuple should contain exactly 2 elements)wrongrA   z(Non valid compression method given: "{}"r   )rB   r   z$Non valid compress level given: "{}"c                 C   sR   |  dj}tt }tjd||d W d    n1 s:0    Y  || d S )Nr*   r<   r+   )r,   r-   r
   r6   r   r.   r>   )r2   r   r~   r3   r?   r   r   r   &test_compress_tuple_argument_exception  s    
.r   compress_stringrB   r   c                 C   sZ   |  dj}tjd||d t|d }t||ks8J W d    n1 sL0    Y  d S )Nr*   r<   r+   r   r   )r2   r   r3   r   r   r   r   test_compress_string_argument  s    r   )r   rA      cmethodc           	   	   C   s  |  dj}tjdddtddddg d	i d
df}|dv rPtd u rPtd n|dkrltj	d
 rltd |d | }|D ]}t
j||||fd t|d }t||ksJ W d    n1 s0    Y  t
|}t|t|sJ t|tjrtj|| q|||ks|J q|d S )Nr*   )rk   rk   Zf8r   r;   r   rv   )rd   rD   r   r   g      ?r   xzzlzma is support not availabler   zlz4 is not installed..r+   r   )r,   r-   r   rm   ranger   pytestskipr   r   r   r.   r   r   r/   rT   r]   rU   rV   rW   )	r2   r(   r   r3   ZobjectsZdump_filenamerf   r   rw   r   r   r   test_joblib_compression_formats  s&    
.
r   c                 C   sp   t t| d}| }W d   n1 s.0    Y  t|d}|| W d   n1 sb0    Y  dS )zDecompress a gzip file.r   Nwb)r   r   GzipFilereadr   writeZsource_filenameZtarget_filenamefobufr   r   r   _gzip_file_decompress?  s    &r   c                 C   sp   t | d}t| }W d   n1 s.0    Y  t |d}|| W d   n1 sb0    Y  dS )zDecompress a zlib file.r   Nr   )r   rB   
decompressr   r   r   r   r   r   _zlib_file_decompressH  s    ,r   zextension,decompress.zr   c                 C   sH   d}|  dj}|| }t|| ||| t|}||ksDJ d S )Nza string to persistr*   )r,   r-   r   r.   r/   )r2   	extensionr   rf   Zfilename_rawZfilename_compressedrw   r   r   r   'test_load_externally_decompressed_filesQ  s    

r   zextension,cmethod))r   rB   )r   r   )r   bz2)r   r   )r   r   )r   not-compressed)r   r   c                 C   s   |dv rt d u rtd | dj}d}|| }t|| t|d }t||ksZJ W d    n1 sn0    Y  t	|}t
|t|sJ ||ksJ d S )Nr   zlzma is missingr*   zobject to dumpr   )r   r   r   r,   r-   r   r.   r   r   r/   rT   r]   )r2   r   r   r3   rf   Z
dump_fnamer   rw   r   r   r   %test_compression_using_file_extensionf  s    
.
r   c           	   
   C   sD  t jddt g dg}tjtjg}td ur<|tjg7 }| 	dj
}|D ]}|D ]}||d}t|| W d    n1 s0    Y  ||d}t|}W d    n1 s0    Y  t|d}t|}W d    n1 s0    Y  t|t jr"t j|| t j|| qT||ks0J ||ksTJ qTqLd S )Nr   	some datar   r*   r   r   )r   rK   rY   r   BZ2Filer   r   r   LZMAFiler,   r-   r   r.   r/   r   rT   rU   rV   rW   )	r2   objsZfobjsr3   rf   Zfobjr   rw   Zobj_reloaded_2r   r   r   test_file_handle_persistence  s*    
*((r   c                  C   sp   t jddt g dg} | D ]J}t }t|| t|}t|t j	r^t j
|| q ||ks J q d S )Nr   r   r   )r   rK   rY   ioBytesIOr   r.   r/   rT   rU   rV   rW   )r   rf   r   rw   r   r   r   test_in_memory_persistence  s    

r  c                 C   s   t jd}| dj}t|d}t|| W d    n1 sD0    Y  t|d}tj|dd}W d    n1 s|0    Y  t j	|| d S )Nr   r*   r   r   rt   rr   )
r   rK   r,   r-   r   r   r.   r/   rV   rW   )r2   rf   r3   r   rw   r   r   r   !test_file_handle_persistence_mmap  s    *,r  c              	   C   s   t jd}| dj}t|d }tj||dd W d    n1 sH0    Y  tt	|dv}t
t}tj|dd W d    n1 s0    Y  t|d	ksJ t|d
 jd|dd ksJ W d    n1 s0    Y  d S )Nr   r*   r   r   r+   r   rt   rr   r   r   zP"%(fileobj)r" is not a raw file, mmap_mode "%(mmap_mode)s" flag will be ignored.)Zfileobjrs   )r   rK   r,   r-   r   r   r.   r   r   r   r   r|   r/   rP   r}   r~   )r2   rf   r3   r   r   r   r   r   ,test_file_handle_persistence_compressed_mmap  s    .
,r  c                  C   s   t jd} t }t| | tt}tj|dd W d    n1 sL0    Y  t	|dksfJ t
|d jdddi ksJ d S )Nr   rt   rr   r   r   zuIn memory persistence is not compatible with mmap_mode "%(mmap_mode)s" flag passed. mmap_mode option will be ignored.rs   )r   rK   r   r   r   r.   r   r|   r/   rP   r}   r~   )rf   r   r   r   r   r   +test_file_handle_persistence_in_memory_mmap  s    
,r  r   s   a little data as bytes.i'  z{}r   zlatin-1za little data as bytes.za large data as bytes.)Zidscompress_level)r   rA   	   c              
   C   s   |  dj}t|d}t|d|d}| s6J || | | ksTJ ttj	 |
  W d    n1 s|0    Y  ttj	 |  W d    n1 s0    Y  W d    n1 s0    Y  |jsJ tt |  W d    n1 s0    Y  W d    n1 s(0    Y  t|d}t|}| sVJ | sdJ | | kszJ | |ksJ ttj	 |  W d    n1 s0    Y  | sJ |d | dksJ W d    n1 s 0    Y  |jsJ W d    n1 s,0    Y  t|d|d(}| sTJ || W d    n1 st0    Y  t|d0}| |ksJ | sJ W d    n1 s0    Y  t|d|d}| sJ || |  t|d}| |ksJ |  d S )Nr*   r   compresslevelr   r   )r,   r-   r   r   writabler   filenor
   r   UnsupportedOperation_check_can_read_check_can_seekclosedr6   _check_not_closedreadableseekabler   _check_can_writeseektellclose)r2   r   r  r3   r   Zfzr   r   r   test_binary_zlibfile  sX    
&D

H
(
2,*.

r  	bad_value   rd   c                 C   s`   |  dj}tt}t|d|d W d    n1 s80    Y  td|}|| d S )Nr*   r   r  zS'compresslevel' must be an integer between 1 and 9. You provided 'compresslevel={}')	r,   r-   r
   r6   r   r   escaper=   r>   )r2   r  r3   r?   patternr   r   r   +test_binary_zlibfile_bad_compression_levels  s    
,r  bad_mode)rd   r   rq   r   r   rD   c                 C   sL   |  dj}tt}t|| W d    n1 s40    Y  |d d S )Nr*   zInvalid mode)r,   r-   r
   r6   r   r>   )r2   r  r3   r?   r   r   r   "test_binary_zlibfile_invalid_modes%  s    
(r  bad_filec                 C   s@   t t}t| d W d    n1 s(0    Y  |d d S )Nr   z1filename must be a str or bytes object, or a file)r
   	TypeErrorr   r>   )r  r?   r   r   r   *test_binary_zlibfile_invalid_filename_type-  s    
(r   c                   @   s   e Zd Zdd ZdS )SubArrayc                 C   s   t t| ffS r   )_load_sub_arrayr   Zasarrayr    r   r   r   
__reduce__:  s    zSubArray.__reduce__N)r$   r%   r&   r#  r   r   r   r   r!  8  s   r!  c                 C   s   t | j}| |d d < |S r   )r!  rI   )Zarrdr   r   r   r"  =  s    
r"  c                   @   s   e Zd ZdZdd ZdS )r_   z7A complex object containing numpy arrays as attributes.c                 C   s8   t jddd| _t jddd| _t jg ddd| _d S )Nrk   Zfloat64rl   Zint32)rd   r;   g      4@ry   )r   r   r`   rm   ra   rX   rb   r    r   r   r   __init__E  s    zComplexTestObject.__init__N)r$   r%   r&   __doc__r%  r   r   r   r   r_   B  s   r_   c                 C   sJ   |  dj}td}t|| t|}t|ts8J tj	|| d S )Nr*   )r;   )
r,   r-   r!  r   r.   r/   rT   r   rV   rW   )r2   r3   rd   cr   r   r   test_numpy_subclassK  s    
r(  c                 C   s|   zddl m} W n ty"   Y nV0 | dj}d}t||| t||ksVJ t|| t|||ksxJ d S )Nr   )Pathr*   {   )pathlibr)  ImportErrorr,   r-   r   r.   r/   )r2   r)  r3   valuer   r   r   test_pathlibU  s    r.  c                 C   s   |  dj}tddgddggdd  tjdddd d d dd d f fD ]@}|jjr^J |jjrjJ t	|| t
|}tj|| qNd S )	Nr*   r   rD   rA   rG   )r;   2      F)order)r,   r-   r   Zasfortranarrayrm   ru   c_contiguousf_contiguousr   r.   r/   rV   rW   )r2   r3   rX   array_reloadedr   r   r   "test_non_contiguous_array_picklingc  s    "
r6  c                 C   sD   |  dj}td}tj||tjd t|}tj	
|| d S )Nr*   r;   )Zprotocol)r,   r-   r   rZ   r   r.   pickleZHIGHEST_PROTOCOLr/   rV   rW   )r2   r3   
test_arrayr5  r   r   r   test_pickle_highest_protocolt  s
    

r9  c            	      C   s   t d} d}ttjtj}|| |d t|}| \}}|	d}t
| | W d    n1 st0    Y  |	d}t
|}W d    n1 s0    Y  t j||  d S )Nr;   )Z	localhosti90  r   r   r   )r   r   socketZAF_INETZSOCK_STREAMZbindZlistenZcreate_connectionZacceptZmakefiler   r.   r/   rV   rW   )	r8  Z_ADDRZlistenerZclientZserverZclient_addrZsfcfr5  r   r   r   test_pickle_in_socket  s    



*(r<  c                 C   s   |  dj}tj}tj|ddtj|ddg}t|| tj	|dd}t
|d tjs\J |d j|ksnJ tj|| d S )Nz	test.mmaprn   rl   rq   rr   r   )r,   r-   rE   ZALLOCATIONGRANULARITYr   rZ   rm   r   r.   r/   rT   r[   offsetrV   rW   )r2   r   r   rf   Zmemmapsr   r   r    test_load_memmap_with_big_offset  s    r>  c                    sn   d}dG dd dt j G  fdddt}t||  t| j ksNJ t| jks`J t| d S )N	test-nameztest-prefixc                   @   s   e Zd ZdS )z:test_register_compressor.<locals>.BinaryCompressorTestFileNr$   r%   r&   r   r   r   r   BinaryCompressorTestFile  s   rA  c                       s   e Zd Z fddZdS )z=test_register_compressor.<locals>.BinaryCompressorTestWrapperc                    s   t j|  d d S )Nrf   prefixr   r%  r    rA  Zcompressor_prefixr   r   r%    s    zFtest_register_compressor.<locals>.BinaryCompressorTestWrapper.__init__Nr$   r%   r&   r%  r   rE  r   r   BinaryCompressorTestWrapper  s   rG  )r   BufferedIOBaser   r   r   fileobj_factoryrC  pop)r2   compressor_namerG  r   rE  r   test_register_compressor  s    rL  invalid_namec                 C   s@   t t}t| d  W d    n1 s(0    Y  |d d S )Nz"Compressor name should be a string)r
   r6   r   r>   )rM  r?   r   r   r   %test_register_compressor_invalid_name  s    
(rN  c                     sd   G dd d G  fdddt } tt}td|   W d    n1 sL0    Y  |d d S )Nc                   @   s   e Zd ZdS )zCtest_register_compressor_invalid_fileobj.<locals>.InvalidFileObjectNr@  r   r   r   r   InvalidFileObject  s   rO  c                       s   e Zd Z fddZdS )zJtest_register_compressor_invalid_fileobj.<locals>.InvalidFileObjectWrapperc                    s   t j|  dd d S Ns   prefixrB  rD  r    rO  r   r   r%    s    zStest_register_compressor_invalid_fileobj.<locals>.InvalidFileObjectWrapper.__init__NrF  r   rQ  r   r   InvalidFileObjectWrapper  s   rR  ZinvalidzQCompressor 'fileobj_factory' attribute should implement the file object interface)r   r
   r6   r   r>   )rR  r?   r   rQ  r   (test_register_compressor_invalid_fileobj  s
    
*rS  c                   @   s   e Zd Zdd ZdS )AnotherZlibCompressorWrapperc                 C   s   t j| tdd d S rP  )r   r%  r   r    r   r   r   r%    s    z%AnotherZlibCompressorWrapper.__init__NrF  r   r   r   r   rT    s   rT  c                   @   s   e Zd Zdd ZdS ) StandardLibGzipCompressorWrapperc                 C   s   t j| tjdd d S rP  )r   r%  r   r   r    r   r   r   r%    s    z)StandardLibGzipCompressorWrapper.__init__NrF  r   r   r   r   rU    s   rU  c                  C   s   d} t | t  tt}t | t  W d    n1 s:0    Y  |d|  t | t dd | tv spJ t|  jt	j
ksJ t|  d S )Nr?  z#Compressor '{}' already registered.T)force)r   rT  r
   r6   rU  r>   r=   r   rI  r   r   rJ  )rK  r?   r   r   r   +test_register_compressor_already_registered  s    
"rW  c                 C   s  dd l }d}|tv sJ t| j|jjks.J | dj}d}tj|||d t	|d&}|
tttkspJ W d    n1 s0    Y  t||ksJ t||d  t	|d&}|
tttksJ W d    n1 s0    Y  t||ksJ d S )Nr   r   r*   	test datar+   r   r   )Z	lz4.framer   rI  frameZLZ4FrameFiler,   r-   r   r.   r   r   rP   r   r/   )r2   r   Z
compressorr   r   r   r   r   r   test_lz4_compression  s    44rZ  c                 C   s   |  dj}d}t}tt }tj||dd W d    n1 sB0    Y  || tt }t||d  W d    n1 s0    Y  || d S )Nz
test.nolz4rX  r   r+   r   )r,   r-   r   r
   r6   r   r.   r>   )r2   r   r   msgr?   r   r   r    test_lz4_compression_without_lz4  s    
.

.r\  )r&  r0   rQ   rK   r   r   r   r   r   rB   r   r7  r:  
contextlibr   rE   r   r,  r   Zjoblib.test.commonr   r   r   r   r   r   Zjoblib.testingr	   r
   r   r   Zjoblibr   r   Zjoblib.testr   Zjoblib.numpy_pickle_utilsr   r   r   r   Zjoblib.compressorr   r   r   r   r   ZtypelistZ_noneappendr]   Z_typeboolZ_boolr   _intr\   Z_floatcomplexZ_complexr}   Z_string_tupleZ_list_dictrP   Z_builtinr   r   ry   r'   Z	_instanceZ_objectr4   r8   r7   r@   rj   rp   rx   rz   r{   r   r   r   r   r   r   r   r   r=   r   r   r   r   r   r   r   r   r  r  r  r  r   encoder  r  r  r   rU   r!  r"  r_   r(  r.  r6  r9  r<  r>  rL  rN  rS  rT  rU  rW  rZ  r\  r   r   r   r   <module>   sf  
	
















	4
	
1



@
 
(

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

		



 



4
	


	
	





