o
    1ή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   sz   t jjg dg d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)i  dbeg333333?)   de?zcol1,col2,col3namesr   col1icol2U   col3f)nprecfromrecordsr   itemdtypekinditemsizeselfr r$   D/tmp/pip-target-vg8gfxp4/lib/python/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   g dg dg}g dg dg}g dg d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   )      )      ))r2   r1   )r0   r/   )r   r.   )r.   r/   r1   )r2   r0   r   )r   r0   r2   )r1   r/   r.   r'   r(   r)   r   )r   r   r   intr   )r"   data
expected_a
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,i4r/   bigformatsr,   	byteorderr.   )idc  s   efgidcbar   r   arrayr   r   r!   r$   r$   r%   test_method_array4   s   z!TestFromrecords.test_method_arrayc                 C   s*   t jjg ddd}t|d  d d S )N)r.      r'   )r      r(   )r/   !   c)r0   ,   d)r1   7   ex)r2   B   r   )   M   gu1,f4,a1r<   r.   )r   g      6@   br>   r!   r$   r$   r%   test_method_array28   s   z"TestFromrecords.test_method_array2c                 C   s4   t jjg ddd}t|dd d d  d d S )NrA   rN   rO   r.   r   )r0   g      F@   dr>   r!   r$   r$   r%   test_recarray_slices=   s    z$TestFromrecords.test_recarray_slicesc                 C   st   t g d}t g d}t g d}t jj|||gdd}t|d  d d|d< t|jt g d d S )	N)r.   r   r/   r0   )r'   ddxyz12)皙?r   r/   r0   za,b,cr   r.   )r   rT          @"   )r   r?   r   
fromarraysr   r   r'   )r"   x1x2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 )
Nr4   zrecarray_from_file.fitsrbi  f8,i4,a5r/   r:   r;   r   )r   joindirname__file__openseekr   r   fromfiler?   r   writereadcloser   )r"   data_dirfilenamefdr7   r8   bytes_array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 ]"}t|j| ttddk t|j	| dk t|j
| dk q:d S )	N
   Or)   f8r.   zdate,data1,data2r   g        )r   zerosrangelenlistr   rZ   r   datedata1data2)r"   countr'   r(   rE   r   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)r.   g?)r   g?)foo<i4)barz<f8r)   zi            rec.array([(1, 0.1), (2, 0.2)],
                      dtype=[('foo', '<i4'), ('bar', '<f8')])r0   rr   z	rec.arrayr/   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   sv   t jjddd}tt|td |d }tt|d zt jdd tt|d	 W t jd
d d S t jd
d w )N)r.   rX   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')z1.13)legacyz#(1, 2.0, datetime.date(2003, 1, 1))F)r   r   r?   r   r   r   r   set_printoptions)r"   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r.   ABCr   DEFr}   r   S4r)   znumpy.numpy)r   r?   r3   r   viewrecarrayr   r   evalr   r   typendarray)r"   r'   	recordarrrecarr
recordviewrecordarr_rrecarr_r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g d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g d
d}t|d jjt j tt|d t j	 G dd dt j	}|
|}tt|d | g d}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 ](}	t j|	}
|

|
jjph|
jt j}t|jj|	jj tt|t|	 qWd S )Nr   r   r}   r   r)   )r.   r   r/   r0   r1   r0   zf4,i4rr   ))r'   r   )r(   r   )rE   r   rE   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)rE   )f4r   )rG   i8r   r.   r.   s   11111111r.   r   r   )r   r   r   r   )r   r?   r3   int64r   r   r   r   r   r   r   r   r'   r(   voidrE   float32rG   int32fieldsr   )r"   r'   r(   r#   rvr   rE   
test_dtypearrsarrr   arr2r$   r$   r%   test_recarray_views   sX   


z#TestFromrecords.test_recarray_viewsc                 C   sz   t jjg ddd}t jjg ddd}t|j|jk t|j|jk tt|D ]}t|| 	 || 	 k q*d S )N))r.   abcg   @r   )r   xyg   @r.   )r    g   ?r   zc1, c2, c3, c4r   )
r   r   r?   r   r   r   r,   rt   ru   r   )r"   rapakr$   r$   r%   test_recarray_from_names   s   z(TestFromrecords.test_recarray_from_namesc                 C   s   t jjg ddd}g d|_t|d g d tt|jt|ju  d|_t|jdk g d|_t	|d g dg d	|_
t	|d
 g dg tt|j
tjj d S )N))r.   r   gffffff@)r   rU   g@)r/   wrsr   zfield, shape, meanr   )rW   g@gffffff
@meanr.   r/   )ABr   r,   r1   field)r1   r1   r1   )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)r.   r'   )r   bbbr'   r(   r)   r.   r   r   r   r   )	r   r   r   r3   objectr   r'   r(   r   )r"   r'   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 r.   )r   r   r}   r   r   r)   r   r.   F)r   r?   r3   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 )NS5r   r2   )r   D)r   r   r.   )abcdefgehi)r   )r   r/   r.   )r   jklmnr   r   r   r   bazquxr)   r}   r.   s   fgehir   )r   r   r   r?   r3   r   r   r}   r   r   r   r   r   dictr   r   r   r   )r"   
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 g d t|d g d t dd	g}t jj||d
}t|jd t|d g d t|d g d d S )Ntestr/    f0)r   r   r   f1)r   r   r   )r   z|S4)r   z|Sr)   r0   )   testr   r   )    r   r   )r   r   rZ   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@   rQ   rS   r^   ro   r|   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I}t|}tjd tjdd}d|d< |d}|| W d    n1 s2w   Y  tj	j
j|ddd	}t|| W d    d S 1 sQw   Y  d S )
Nz.bin)suffix{   rp   r`   )g      ?rp   r   r1   wb)r<   r,   )r
   r   r   randomseedrandastyperd   tofilecorerecordsrf   r   )r"   r   r'   rl   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g ddd  Zejdg dd!d" Zd#d$ Zd%S )&
TestRecordc                 C   s   t jjddgg dd| _d S )Nr.   r   r/   )r0   r1   r2   )r   r~   r   r~   )r   r~   r)   )r   r   r   r4   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   r.   r4   r   r   r   r$   r$   r%   test_assignment1Z     
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`  r   zTestRecord.test_assignment2c                 C   s   | j }dd }tt|| d S )Nc                 S   s   d| d _ d S )Nr.   r   )col5)r   r$   r$   r%   assign_invalid_columni  s   zATestRecord.test_invalid_assignment.<locals>.assign_invalid_column)r4   r	   AttributeError)r"   r'   r   r$   r$   r%   test_invalid_assignmentf  s   z"TestRecord.test_invalid_assignmentc                 C   s   t jjddgdgd}d|j_tt ddg|_W d    n1 s#w   Y  tt |jddgg|j	j
d R   W d    d S 1 sGw   Y  d S )	Nr*   )r.   )r   r   r)   Fr   r/   r   )r   r   r?   flags	writeabler	   
ValueErrorr   setfieldr   r   r!   r$   r$   r%   test_nonwriteable_setfieldn  s   

 "z%TestRecord.test_nonwriteable_setfieldc                    s`   | j ddg }t|jjd t|jjg d | 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>  s    z5TestRecord.test_out_of_order_fields.<locals>.<lambda>)r4   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 qd S )Nr.   r'   r(   r   r)   r   protocol)	r   r?   r   rt   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   r.   r  r   )r4   rt   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 ]&}ttj|d |d}t|jj t|jj	 t|jj
 t|jj qd S )Nr   r.   r   r  )r4   rt   r   r  r  r  r   r  c_contiguousf_contiguousr  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u s,J |\}}t|t	r7J t
t||d
 t|d	 }t|}	|d	 |	ksRJ tt |t d||u sdJ W d    d S 1 sow   Y  d S )N)objrq   )r3   r   r.   r)   s   emanr  *   r3   r      rq   )r   r   empty	bytearray
__reduce__r   
multiarrayscalarr   bytesr	   RuntimeErrorr   r  r  pytestwarnsDeprecationWarning)
r"   r   r'   r4   ctorargsr   r  dump	unpickledr$   r$   r%   test_pickle_void  s    

"zTestRecord.test_pickle_voidc                 C   sd   t ddg}t jd|dt j}t g d|_t jddtfdtfd	t	fgd}|ddg  d S )
N)r}   r   )r   rq   r   r)   r   )r   r   r  z)
r   r   rs   r   r   r?   r}   r   r+   r3   )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 )Nr.   r   r1   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)r/   r   r  r)   c                      s
    dg S )Nnofieldr$   r$   r   r$   r%   r	    s   
 z/TestRecord.test_missing_field.<locals>.<lambda>)r   rs   r3   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 )Nrp   )r'   z<u2)r(   z<f4r)   )r   aranger   r   rZ   )r"   arraysr   r$   r$   r%   (test_fromarrays_nested_structured_arrays  s   z3TestRecord.test_fromarrays_nested_structured_arraysnfields)r   r.   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s(J |jt jks0J ||_|jjt jks<J d S )Nr'   r(   rE   r/   )r   r   uint8rs   r   r   r   r   )r"   r4  r   r4   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/J t|d t js9J |d }t|t jsEJ t|d t jsOJ dS )z> Test that nested structured types are treated as records too r'   r(   rE   Ninnerr/   r   )r   r   r5  rs   r   r   r   r   )r"   r4  r   dt_outerr4   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J 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(   rE   r7  r/   r   N)r   r   r5  r    rs   r   r   r   )r"   r   dt_padded_endr8  r4   r9  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,  r0  r3  r"  markparametrizer6  r:  r<  r$   r$   r$   r%   r   S  s(    	



r   c                  C   s~   g d} t tj| g k g d}t tj|dgk g d}t tj|ddgk g d}t tj|ddgk d S )N)r.   r   r/   r0   r1   r2   )r.   r   r.   r0   r1   r2   r.   )r.   r   r.   r0   r.   r2   r   r/   r   )r   r   r.   r0   r.   r2   r   r/   )r   r   r   find_duplicate)l1l2l3r$   r$   r%   test_find_duplicate  s   rC  )collections.abcr   r   ior   osr   pathlibr   r"  r   r   numpy.testingr   r   r   r   r	   r
   numpy.compatr   r   r   r   rC  r$   r$   r$   r%   <module>   s        5 +