U
    #c-O                     @   s   d dl Zd dlZd dlmZ d dlmZ d dlmZ d dl	Z	d dl
Zd dlmZmZmZmZmZmZ d dlmZ G dd dZG d	d
 d
ZG dd dZdd ZdS )    N)BytesIO)path)Path)assert_assert_equalassert_array_equalassert_array_almost_equalassert_raisestemppath)picklec                   @   s   e Z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dd Zdd  Zd!d" Zd#d$ Zd%d& Zd'S )(TestFromrecordsc                 C   s~   t jjdddgdddggdd}t|d	  d
 t|d jjd t|d jjd t|d jjd t|d jjd d S )N  dbe333333?   de?zcol1,col2,col3namesr   )r   r   r   col1icol2U   col3f)nprecfromrecordsr   itemdtypekinditemsizeselfr r&   A/tmp/pip-unpacked-wheel-b2rbor69/numpy/core/tests/test_records.pytest_fromrecords   s    z TestFromrecords.test_fromrecordsc                 C   s0   dt fdt fg}tjjg |d}t|jd dS )z0 Verify fromrecords works with a 0-length input abr    r   N)floatr   r   r   r   shape)r$   r    r%   r&   r&   r'   test_fromrecords_0len   s    z%TestFromrecords.test_fromrecords_0lenc                 C   s   dddgdddgg}ddd	gd
ddgg}ddd
gd	ddgg}t jj|dtfdtfgd}t|d | t|d | t jj|ddgd}t|d | t|d | t|| d S )N)   r   )      )      )r4   r3   )r2   r1   )r   r0   r0   r1   r3   r4   r2   r   r)   r*   r+   r   )r   r   r   intr   )r$   dataZ
expected_aZ
expected_br1r2r&   r&   r'   test_fromrecords_2d    s    z#TestFromrecords.test_fromrecords_2dc                 C   s*   t jjddddd}t|d  d d S )Ns  abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgzi2,a3,i4r1   bigformatsr.   	byteorderr0   )idc  s   efgidcbar   r   arrayr   r   r#   r&   r&   r'   test_method_array4   s    z!TestFromrecords.test_method_arrayc                 C   s4   t jjdddddddgdd	}t|d
  d d S )Nr0      r)   r      r*   r1   !   cr2   ,   dr3   7   exr4   B   r      M   gu1,f4,a1r<   r0   )r   g      6@   br>   r#   r&   r&   r'   test_method_array28   s     z"TestFromrecords.test_method_array2c                 C   s>   t jjdddddddgdd	}t|d
d d d
  d d S )NrA   rC   rE   rH   rK   rN   rP   rT   rU   r0   r   )r2   g      F@   dr>   r#   r&   r&   r'   test_recarray_slices=   s     z$TestFromrecords.test_recarray_slicesc                 C   s   t ddddg}t ddddg}t d	dddg}t jj|||gd
d}t|d  d d|d< t|jt ddddg d S )Nr0   r   r1   r2   r)   ddxyzZ12皙?za,b,cr   )r   rZ          @"   )r   r?   r   
fromarraysr   r   r)   )r$   x1Zx2Zx3r%   r&   r&   r'   test_recarray_fromarraysB   s    z(TestFromrecords.test_recarray_fromarraysc                 C   s   t t td}t |d}t|d}|d tjj|dddd}|d tjj	|dddd}|d t
 }||  |d	 tjj|dddd}|  t|| t|| d S )
Nr6   zrecarray_from_file.fitsrbi  f8,i4,a5r1   r:   r;   r   )r   joindirname__file__openseekr   r   fromfiler?   r   writereadcloser   )r$   data_dirfilenamefdr7   r8   Zbytes_arrayZr3r&   r&   r'   test_recarray_fromfileK   s    





z&TestFromrecords.test_recarray_fromfilec                 C   s   d}t j|dd}t j|dd}t j|dd}tt|D ]}ttdd||< q:t jj|||gdd}tt|D ]D}t|j| ttddk t|j	| dk t|j
| dk qtd S )	N
   Or+   f8r0   zdate,data1,data2r   g        )r   zerosrangelenlistr   r_   r   dateZdata1Zdata2)r$   countr)   r*   rG   r   Zminer&   r&   r'   test_recarray_from_obj\   s    z&TestFromrecords.test_recarray_from_objc                 C   s   t jddgddgd}t j|}tt|td t t jddd}ttt j|	d	 t jt jd
dd}tt|
dd t jt jd
dd}tt|
ddk d S )N)r0   g?)r   g?)foo<i4)barz<f8r+   zi            rec.array([(1, 0.1), (2, 0.2)],
                      dtype=[('foo', '<i4'), ('bar', '<f8')])r2   rs   z	rec.arrayr1   i4,i4znumpy.recordi4zdtype=int32)r   r?   r   r   reprtextwrapdedentonesr   
startswithfindr$   r)   r&   r&   r'   test_recarray_reprj   s    
z"TestFromrecords.test_recarray_reprc              	   C   sl   t jjddd}tt|td |d }tt|d zt jd	d tt|d
 W 5 t jdd X d S )N)r0   r]   Z2003z<i4,<f8,<M8[Y]r+   zt            rec.array((1, 2., '2003'),
                      dtype=[('f0', '<i4'), ('f1', '<f8'), ('f2', '<M8[Y]')])r&   z(1, 2., '2003')F)legacyz1.13z#(1, 2.0, datetime.date(2003, 1, 1)))r   r   r?   r   r   r   r   Zset_printoptions)r$   Zarr_0drecordr&   r&   r'   test_0d_recarray_repr   s    z%TestFromrecords.test_0d_recarray_reprc                 C   s  t jddgdtfdgd}t j|}|t j}|t t j|jf}tdt	| dt i}tdt	| dt i}tdt	| dt i}t
t|t j t
|jjt j t
|| t
t|t j t
|jjt j t
|| t
t|t j t
|jjt j t
|| d S )Nr0   ABCr   ZDEFr{   r}   S4r+   znumpy.numpy)r   r?   r5   r   viewrecarrayr    r   evalr   r   typendarray)r$   r)   Z	recordarrZrecarrZ
recordviewZrecordarr_rZrecarr_rZrecordview_rr&   r&   r'   test_recarray_from_repr   s$    



z'TestFromrecords.test_recarray_from_reprc                 C   s  t jddgdtfdgd}t jdddd	d
gt jd}tt j|jjt j ttt j|t j	 tt j|jjt j ttt j|t j	 t|
t j	jjt j tt|
t j	t j	 t|
t j	jjt j tt|
t j	t j	 t jt jd	dd}|
d
d}tt|t j	 t|jjt j t jt jd	dddgd}t|d jjt j tt|d t j	 G dd dt j	}|
|}tt|d | ddddg}t jjddddgdfddddgdfg|d}t|jjjt j t|jjjt j t|jjjt j t|jjjt j t jt jd	dd}t|
djjt j t|
djjt j t|
djjt j t|
djjt j t jd	ddt jd	ddg}|D ]P}	t j|	}
|

|
jjp|
jt j}t|jj|	jj tt|t|	 qd S )Nr   r   r{   r   r+   r0   r   r1   r2   r3   zf4,i4rs   )r)   r   )r*   r   )rG   r~   rG   c                   @   s   e Zd ZdS )z.TestFromrecords.test_recarray_views.<locals>.CN)__name__
__module____qualname__r&   r&   r&   r'   C   s   r   )r)   f4,f4)r*   V8)rG   )Zf4r   )rJ   i8r~   r0   r0   s   11111111r~   r   )r   r   r   r   )r   r?   r5   Zint64r   r   r    r   r   r   r   r   r)   r*   voidrG   Zfloat32rJ   int32fieldsr   )r$   r)   r*   r%   rvr   rG   Z
test_dtypeZarrsarrr   Zarr2r&   r&   r'   test_recarray_views   s^    



z#TestFromrecords.test_recarray_viewsc                 C   s~   t jjdddgdd}t jjdddgdd}t|j|jk t|j|jk tt|D ] }t|| 	 || 	 k qXd S )N)r0   abcg   @r   )r   Zxyg   @r0   )r    g   ?r   zc1, c2, c3, c4r   )
r   r   r?   r   r   r    r.   ru   rv   r   )r$   rapakr&   r&   r'   test_recarray_from_names   s$    z(TestFromrecords.test_recarray_from_namesc                 C   s   t jjdddgdd}dddg|_t|d	 dddg tt|jt|jk d
|_t|jd
k dddg|_t	|d dddgg d|_
t	|d dddgg tt|j
tjj d S )N)r0   r   gffffff@)r   r[   g@)r1   Zwrsr   zfield, shape, meanr   r\   g@gffffff
@meanr0   r1   ABr   r.   r3   field)r   r   r?   r   r   r   r   varr.   r   r   
isinstancecollectionsr   Callable)r$   r   r&   r&   r'   test_recarray_conflict_fields   s    
z-TestFromrecords.test_recarray_conflict_fieldsc                 C   s   t jjddgdtfdtfgd}t|jddg t|d jd t|jdd	g t|d
 jd	 t dtfdtfg}t jjddg|d}t|jddg t|d jd t|jdd	g t|d
 jd	 d S )N)r0   r)   )r   bbbr)   r*   r+   r0   r   r   r   r   )	r   r   r   r5   objectr   r)   r*   r    )r$   r)   Zndtyper&   r&   r'   $test_fromrecords_with_explicit_dtype  s    z4TestFromrecords.test_fromrecords_with_explicit_dtypec                 C   sD   t jddgddtfgd}|t j}t|jd |jd kd d S )	N)abc r0   )r   r   r{   r   r}   r+   r   r0   F)r   r?   r5   r   r   r   r{   r   r&   r&   r'   test_recarray_stringtypes  s
    

z)TestFromrecords.test_recarray_stringtypesc                 C   s  t ddft ddfd}t jjddgddd	tfd
tfgfdtfd|fgd}tt|jt j tt|d t j tt|j	t j
 tt|d t j
 t|j	jjt j tt|d t j
 t|jjjt j tt|jjj| tt|jt j tt|d t j tt|d j	t j tt|d d t j t|d j	jd t|d j	d	 d t|d d jd t|d d d	 d t|d jjd t|d jd d t|d d jd t|d d d d d S )NZS5r   r4   )r   D)r   r   r0   )abcdeZfgehi)r   )r   r1   r0   )r   Zjklmnr   r}   r   r   bazquxr+   r{   r0   s   fgehir   )r   r    r   r?   r5   r   r   r{   r   r}   r   r   r   dictr   r   r   r   )r$   Z
qux_fieldsr)   r&   r&   r'   test_recarray_returntypes  s<     z)TestFromrecords.test_recarray_returntypesc                 C   s   dgd dgd g}t j|}t|d dddg t|d dddg t ddg}t jj||d}t|jd	 t|d d
d
d
g t|d dddg d S )Ntestr1    f0f1)r   z|S4)r   z|Sr+   r2   s   test    )r   r   r_   r   r    r"   )r$   colsr   dtr&   r&   r'   test_zero_width_strings4  s    z'TestFromrecords.test_zero_width_stringsN)r   r   r   r(   r/   r9   r@   rW   rY   ra   rp   rz   r   r   r   r   r   r   r   r   r   r   r&   r&   r&   r'   r      s&   		>r   c                   @   s   e Zd Zdd ZdS )TestPathUsagec              
   C   s   t ddr}t|}tjd tjdd}d|d< |d}|| W 5 Q R X tj	j
j|ddd	}t|| W 5 Q R X d S )
Nz.bin)suffix{   rq   rc   )g      ?rq   r   r3   wb)r<   r.   )r
   r   r   randomseedZrandZastyperg   Ztofilecorerecordsri   r   )r$   r   r)   ro   xr&   r&   r'   test_tofile_fromfileE  s    
z"TestPathUsage.test_tofile_fromfileN)r   r   r   r   r&   r&   r&   r'   r   C  s   r   c                   @   s   e Z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ejdddd gd!d" Zejdddd gd#d$ Zd%d& Zd'S )(
TestRecordc                 C   s    t jjddgdddgd| _d S )N)r0   r   r1   )r2   r3   r4   r   r|   r   r|   )r   r|   r+   )r   r   r   r6   r$   r&   r&   r'   setup_methodT  s    zTestRecord.setup_methodc                 C   s4   | j }t|jd d d|d _t|jd d d S Nr   r0   r6   r   r   r   r&   r&   r'   test_assignment1Z  s    
zTestRecord.test_assignment1c                 C   s4   | j }t|jd d d|jd< t|jd d d S r   r   r   r&   r&   r'   test_assignment2`  s    
zTestRecord.test_assignment2c                 C   s   | j }dd }tt|| d S )Nc                 S   s   d| d _ d S )Nr0   r   )Zcol5)r   r&   r&   r'   assign_invalid_columni  s    zATestRecord.test_invalid_assignment.<locals>.assign_invalid_column)r6   r	   AttributeError)r$   r)   r   r&   r&   r'   test_invalid_assignmentf  s    z"TestRecord.test_invalid_assignmentc              	   C   sp   t jjddgdgd}d|j_tt ddg|_W 5 Q R X tt" |jddgf|j	j
d   W 5 Q R X d S )	Nr,   )r0   )r   r   r+   Fr   r1   r   )r   r   r?   flags	writeabler	   
ValueErrorr   Zsetfieldr    r   r#   r&   r&   r'   test_nonwriteable_setfieldn  s    

z%TestRecord.test_nonwriteable_setfieldc                    sb   | j ddg }t|jjd t|jjdddg | j ddg  t jjd tt fdd	 d S )
Nr   r   )r   r   r   r   )r   z|V4)r   r   c                      s    j jS )N)r    descrr&   yr&   r'   <lambda>  r   z5TestRecord.test_out_of_order_fields.<locals>.<lambda>)r6   r   r    r   r   r	   r   )r$   r   r&   r   r'   test_out_of_order_fieldsw  s    z#TestRecord.test_out_of_order_fieldsc              	   C   s|   t jdg fgdt jfdt jdfgd}tdtjd D ]@}t|ttj||d t|d ttj|d |d q6d S )Nr0   r)   r*   r   r+   r   protocol)	r   r?   r   ru   r   HIGHEST_PROTOCOLr   loadsdumpsr$   r)   protor&   r&   r'   test_pickle_1  s    &zTestRecord.test_pickle_1c              	   C   s\   | j }tdtjd D ]@}t|ttj||d t|d ttj|d |d qd S )Nr   r0   r   r   )r6   ru   r   r   r   r   r   r   r&   r&   r'   test_pickle_2  s    zTestRecord.test_pickle_2c                 C   sh   | j }tdtjd D ]L}ttj|d |d}t|jj t|jj	 t|jj
 t|jj qd S )Nr   r0   r   r   )r6   ru   r   r   r   r   r   r   c_contiguousf_contiguousr   Zaligned)r$   r)   r   r   r&   r&   r'   test_pickle_3  s    zTestRecord.test_pickle_3c           
   	   C   s   t ddg}t jd|d}tdf}||d< d|d< |d	  \}}|t jjjksXt|\}}t	|t
rnttt||d
 t|d	 }t|}	|d	 |	ksttt |t d||kstW 5 Q R X d S )N)objrr   )r5   r   r0   r+   s   emanr   *   r5   r      rr   )r   r    empty	bytearray
__reduce__r   Z
multiarrayZscalarAssertionErrorr   bytesr	   RuntimeErrorr   r   r   pytestZwarnsDeprecationWarning)
r$   r   r)   r6   Zctorargsr    r   dumpZ	unpickledr&   r&   r'   test_pickle_void  s    

zTestRecord.test_pickle_voidc                 C   sf   t ddg}t jd|dt j}t dddg|_t jdd	tfd
tfdt	fgd}|d	d
g  d S )N)r{   r   )r}   rr   r   r+   r0   r   r1   )r   r   r   z)
r   r    rt   r   r   r?   r{   r   r-   r5   )r$   r   r%   r   r&   r&   r'   test_objview_record  s
     zTestRecord.test_objview_recordc                 C   s:   t jddtdfgd}d|d _t|d jt d d S )Nr0   r   r3   r+   r   )r   r   r-   r   r   r   )r$   r   r&   r&   r'   test_record_scalar_setitem  s    
z%TestRecord.test_record_scalar_setitemc                    s0   t jddtfdtfgd tt fdd d S )N)r1   r   r   r+   c                      s
    dg S )NZnofieldr&   r&   r   r&   r'   r     r   z/TestRecord.test_missing_field.<locals>.<lambda>)r   rt   r5   r	   KeyErrorr   r&   r  r'   test_missing_field  s    zTestRecord.test_missing_fieldc                 C   s,   t dt jdddgdg}t j|}d S )Nrq   )r)   z<u2)r*   z<f4r+   )r   Zaranger   r   r_   )r$   Zarraysr   r&   r&   r'   (test_fromarrays_nested_structured_arrays  s    z3TestRecord.test_fromarrays_nested_structured_arraysnfieldsr   r0   r   c                 C   s|   t dt jfdt jfdt jfgd | }t d|t j}|jjt jksPt|jt jks`t||_|jjt jksxtd S )Nr)   r*   rG   r1   )	r   r    uint8rt   r   r   r   r   r   )r$   r  r   r6   r&   r&   r'   test_assign_dtype_attribute  s    *z&TestRecord.test_assign_dtype_attributec                 C   s   t dt jfdt jfdt jfgd| }t d|fg}t d|t j}t|t js^tt|d t jsrt|d }t|t jstt|d t jstdS )z> Test that nested structured types are treated as records too r)   r*   rG   Ninnerr1   r   )	r   r    r  rt   r   r   r   r   r   )r$   r  r   dt_outerr6   data0r&   r&   r'   test_nested_fields_are_records  s    *z)TestRecord.test_nested_fields_are_recordsc                 C   s   t dt jfdt jfdt jfg}|ddg }|j|jks>tt d|fg}t d|t j}t|d j| |d }t|d j| dS )z) test that trailing padding is preserved r)   r*   rG   r  r1   r   N)	r   r    r  r"   r   rt   r   r   r   )r$   r   Zdt_padded_endr  r6   r  r&   r&   r'   test_nested_dtype_padding  s    "z$TestRecord.test_nested_dtype_paddingN)r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r	  r
  r   markZparametrizer  r  r  r&   r&   r&   r'   r   S  s&   	



r   c                  C   s   ddddddg} t tj| g k ddddddg}t tj|dgk ddddddddg}t tj|ddgk ddddddddg}t tj|ddgk d S )Nr0   r   r1   r2   r3   r4   )r   r   r   Zfind_duplicate)l1l2l3r&   r&   r'   test_find_duplicate  s    r  )collections.abcr   r   ior   osr   pathlibr   r   r   r   Znumpy.testingr   r   r   r   r	   r
   Znumpy.compatr   r   r   r   r  r&   r&   r&   r'   <module>   s      5 +