U
    e»{jó.  ã                   @   s†   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m	Z	 ddl
mZ dd„ Zej d	¡G d
d„ dƒƒZdd„ Zdd„ Zdd„ ZdS )é    N)Útable)Úunits)ÚRowé   )ÚMaskedTablec                  C   sZ   t jdggdgdd�} d| d _| d d dks4t‚d| d _| d d tjjksVt‚dS )	zu
    Numpy < 1.8 has a bug in masked array that prevents access a row if there is
    a column with object type.
    r   ÚOT)ÚdtypeÚmaskedFZcol0r   N)r   ÚTableÚmaskÚAssertionErrorÚnpÚmar	   )Út© r   ú[/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/table/tests/test_row.pyÚtest_masked_row_with_object_col   s
    

r   Útable_typesc                   @   s˜   e Zd Zdd„ Ze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 )$ÚTestRowc                 C   s   |j | _|j| _d S ©N)r
   Ú_table_typeÚColumnÚ_column_type)Úselfr   r   r   r   Ú_setup   s    zTestRow._setupc                 C   sZ   | j d krd S t| dƒsT| j ddddgdd�}| j dd	d
dgdd�}|  ||g¡| _| jS )NÚ_tÚar   é   é   Úi8)ÚnameÚdatar   Úbé   é   é   )r   Úhasattrr   r   )r   r   r"   r   r   r   r   !   s    

z	TestRow.tc                 C   s(   |   |¡ t| jdƒ}t|tƒs$t‚dS )z"Row is subclass of ndarray and Rowr   N)r   r   r   Ú
isinstancer   )r   r   Úcr   r   r   Útest_subclass.   s    
zTestRow.test_subclassc              	   C   sÚ   |   |¡ | j}|d }|d dks(t‚|d dks8t‚|d dksHt‚|d dksXt‚|j|jksht‚|j|jksxt‚|j|jksˆt‚t t¡� |d  W 5 Q R X t	j
dkrÄt|jƒdksÖt‚nt|jƒd	ksÖt‚d
S )z3Row accurately reflects table values and attributesr   r   r   r"   r$   r   Úlittlez[('a', '<i8'), ('b', '<i8')]z[('a', '>i8'), ('b', '>i8')]N)r   r   r   ÚmetaÚcolnamesÚcolumnsÚpytestÚraisesÚ
IndexErrorÚsysÚ	byteorderÚstrr   ©r   r   r   Úrowr   r   r   Útest_values4   s    

zTestRow.test_valuesc                 C   sB   |   |¡ | j}|d }d|d< |jtk	r>|d d dks>t‚dS )z+Row is a reference into original table datar   é
   r   N)r   r   r
   r   r   r4   r   r   r   Útest_refG   s    

zTestRow.test_refc              	   C   st   |   |¡ | j ¡ }|jtkrHt t¡� | jd |d k W 5 Q R X n(t| j|ƒD ]\}}t	 
||k¡sTt‚qTdS )ú=Compare a table row to the corresponding structured array rowr   N©r   r   Zas_arrayr
   r   r.   r/   Ú
ValueErrorÚzipr   Úallr   ©r   r   Znp_tr5   Znp_rowr   r   r   Útest_left_equalP   s    


zTestRow.test_left_equalc              	   C   s‚   |   |¡ | j ¡ }dddg|d< |jtkrVt t¡� | jd |d k W 5 Q R X n(t| j|ƒD ]\}}t	 
||k¡sbt‚qbdS )r9   r   r   Nr:   r>   r   r   r   Útest_left_not_equal[   s    


zTestRow.test_left_not_equalc              	   C   st   |   |¡ | j ¡ }|jtkrHt t¡� | jd |d k W 5 Q R X n(t| j|ƒD ]\}}t	 
||k¡sTt‚qTdS )zTest right equalr   Nr:   r>   r   r   r   Útest_right_equalg   s    


zTestRow.test_right_equalc              	   C   sä   |   |¡ | jd }t |¡}|jtk	r>t || ¡ k¡s>t‚|| ¡ k	sNt‚|j	t
|jjƒksdt‚tj|dd�}|jtk	r’t || ¡ k¡s’t‚|| ¡ k	s¢t‚|j	t
|jjƒks¸t‚t t¡� tj|ddgd�}W 5 Q R X d S )Nr   F)Úcopy)r(   r   )Údr   )r   )r   r   r   Úarrayr
   r   r=   Úas_voidr   r,   Úlistr   Únamesr.   r/   r;   )r   r   rC   Znp_datar   r   r   Útest_convert_numpy_arrayr   s    




z TestRow.test_convert_numpy_arrayc                 C   s°   |   |¡ | j}|d }t|ƒ ¡ d |jjd|jr8dnd¡dddd	gksNt‚t	|ƒ ¡ d
ddgksht‚| 
¡  ¡ d |jjd|jrˆdnd¡dt|ƒ› d�ddddgks¬t‚dS )zTest formatting rowr   z	<{} {}{}>zindex=0z masked=TrueÚ z  a     b  zint64 int64z----- -----z    1     4z a   b z--- ---z  1   4z<i>{} {}{}</i>z<table id="tablez">z,<thead><tr><th>a</th><th>b</th></tr></thead>z4<thead><tr><th>int64</th><th>int64</th></tr></thead>z<tr><td>1</td><td>4</td></tr>z</table>N)r   r   ÚreprÚ
splitlinesÚformatÚ	__class__Ú__name__r	   r   r3   Z_repr_html_Úidr4   r   r   r   Útest_format_row…   s6    

ý÷

ýözTestRow.test_format_rowc                 C   sÖ   |   |¡ | j}|d }| ¡ }|jr:t|tjjƒsJt‚nt|tj	ƒsJt‚|d dksZt‚|d dksjt‚d|d d< |d dks†t‚|d dks–t‚|jrÒd|d _
|d dks¶t‚| ¡ }|d tjjksÒt‚dS )	zTest the as_void() methodr   r   r   r"   r#   iœÿÿÿTN)r   r   rE   r	   r'   r   r   Zmvoidr   Úvoidr   )r   r   r   r5   Zrow_voidr   r   r   Útest_as_void¤   s"    

zTestRow.test_as_voidc                 C   sˆ   |j ddiddiggdd�}|d d ddiks4t‚|d d ddiksLt‚|d  ¡ d ddiksht‚|d  ¡ d ddiks„t‚dS )	z6Test the deprecated data property and as_void() methodr   r   r"   r   )r   ©rG   r   N)r
   r   rE   )r   r   r   r   r   r   Ú!test_row_and_as_void_with_objectsÂ   s
    z)TestRow.test_row_and_as_void_with_objectsc              
   C   s8   |   |¡ dD ]$}t t¡� | j|  W 5 Q R X qdS )z;Row gives index error upon creation for out-of-bounds index)éûÿÿÿéüÿÿÿr   r#   N)r   r.   r/   r0   r   )r   r   Zibadr   r   r   Útest_bounds_checkingÊ   s    
zTestRow.test_bounds_checkingc                 C   sR   |j dddgdddggdd�}t|ƒd	d
„ |D ƒ|jjd�}t ||k¡sNt‚dS )z.https://github.com/astropy/astropy/issues/8976r   r   r   r#   r$   r%   ©r   r"   rS   c                 S   s   g | ]}|‘qS r   r   )Ú.0r5   r   r   r   Ú
<listcomp>Õ   s     z6TestRow.test_create_rows_from_list.<locals>.<listcomp>)ÚrowsrG   N)r
   Útyper   rG   r   r=   r   )r   r   Zorig_tabZnew_tabr   r   r   Útest_create_rows_from_listÑ   s     ÿz"TestRow.test_create_rows_from_listc                 C   st   |   |¡ | jd }t| ¡ | jj ¡ ƒD ]\}}||ks*t‚q*t| ¡ | jj ¡ ƒD ]\}}||d ksVt‚qVd S )Nr   )r   r   r<   Úkeysr-   r   Úvalues)r   r   r5   Zrow_keyZcol_keyZ	row_valueÚcolr   r   r   Útest_row_keys_valuesÙ   s    

zTestRow.test_row_keys_valuesc                 C   sv   |   |¡ | jd }t|ƒ}| ¡ D ]\}}|| |ks$t‚q$dd„ }|f |Ž}| ¡ D ]\}}|| |ksXt‚qXd S )Nr   c                  [   s   | S r   r   )Úkwargsr   r   r   Úfé   s    z&TestRow.test_row_as_mapping.<locals>.f)r   r   ÚdictÚitemsr   )r   r   r5   Zrow_dictÚkeyÚvaluerc   Úrow_splattedr   r   r   Útest_row_as_mappingâ   s    


zTestRow.test_row_as_mappingc           	      C   s„   |   |¡ | jd }t|ƒ}t| ¡ ƒ}t||ƒD ]\}}|| |ks2t‚q2dd„ }||Ž }t||ƒD ]\}}|| |ksft‚qfd S )Nr   c                  W   s   | S r   r   )Úargsr   r   r   rc   ø   s    z'TestRow.test_row_as_sequence.<locals>.f)r   r   Útupler^   r<   r   )	r   r   r5   Z	row_tupler^   rf   rg   rc   rh   r   r   r   Útest_row_as_sequenceð   s    

zTestRow.test_row_as_sequenceN)rN   Ú
__module__Ú__qualname__r   Úpropertyr   r)   r6   r8   r?   r@   rA   rH   rP   rR   rT   rW   r]   ra   ri   rl   r   r   r   r   r      s$   
		r   c               	   C   s–  t jdddgtj dddgddd	gd
ddggddddgd�} | d }|d }ddddddg}t|ƒ ¡ |kspt‚|dddg }t|ƒ ¡ |ks’t‚d|d< dtj df|d< |d dtj ksÂt‚|d dksÒt‚| d d dtj ksìt‚| d d dk�st‚| d d dk�st‚dtj df|ddg< |d dtj k�sFt‚|d dk�sXt‚| d d dtj k�stt‚| d d dk�sŠt‚d tj d!f|d"< | d d d tj k�s¸t‚| d d dk�sÎt‚| d d d#k�sät‚t 	t
¡�}| d d$  W 5 Q R X d%t|jƒk�st‚t 	t¡�}dtj ddf| d d< W 5 Q R X d&t|jƒk�s\t‚t 	t¡�}d| d d< W 5 Q R X d&t|jƒk�s’t‚d'S )(zN
    Test getting and setting a row using a tuple or list of column names
    r   r   r   ç      $@ç      4@ç      >@g      Y@g      i@g     Àr@ÚxÚyÚzr   r"   r(   rC   rS   )r   r"   r(   ú<Row index=1>z   a       b       c   z   m                   zfloat64 float64 float64z------- ------- -------z    2.0    20.0   200.0iè  rX   r7   éd   iÐ  é   éÈ   éÿÿÿÿiöÿÿÿ)r   r(   g      $À)r   Z	not_therez'not_there'z"right hand side must be a sequenceN)r   ÚQTableÚuÚmrJ   rK   r   Úcmr.   r/   ÚKeyErrorr3   rg   r;   )r   Úr1Zr1_abcZr1_abc_reprÚerrr   r   r   Útest_row_tuple_column_slice   sZ    ü
ù
ú"r‚   c               	   C   s†   t jdddgdddgtj gddgd	�} |  ¡ }t t¡�}d
d
tj f| d d< W 5 Q R X dt	|j
ƒksnt‚| d |d ks‚t‚dS )zc
    Test that setting a row that fails part way through does not
    change the table at all.
    rp   rq   rr   r   r   r   r   r"   rS   rz   rX   z/'s' (time) and 'm' (length) are not convertibleN)r   r{   r|   r}   rB   r.   r/   r;   Úsr3   rg   r   )r   Ztcr�   r   r   r   Ú'test_row_tuple_column_slice_transactionE  s    þû r„   c                  C   sÞ   t jdddggdd�} | d d dks*t‚| d t d¡ dksDt‚| d t d¡ dks^t‚| t d¡ d dksxt‚ddd	d
dg}t| d ƒ ¡ |ksžt‚t| t d¡ ƒ ¡ |ks¼t‚t| t d¡ ƒ ¡ |ksÚt‚dS )a<  
    Test that accessing a row with an unsigned integer
    works as with a signed integer.  Similarly tests
    that printing such a row works.

    This is non-trivial: adding a signed and unsigned
    integer in numpy results in a float, which is an
    invalid slice index.

    Regression test for gh-7464.
    g      ð?g       @g      @r   rS   r   rv   z   a   Zfloat64z-------z    2.0N)r   r
   r   r   Úint_ZuintrJ   rK   )r   Ztreprr   r   r   Útest_uint_indexingZ  s    ûr†   )r1   Únumpyr   r.   Zastropyr   r   r|   Zastropy.tabler   Zconftestr   r   ÚmarkZusefixturesr   r‚   r„   r†   r   r   r   r   Ú<module>   s   
 eE