a
    ߙfb/                     @   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)Row)units   )MaskedTablec                  C   sZ   t jdggdgdd} d| d _| d d dks4J d| d _| d d tjju sVJ 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npmar	   )t r   ;lib/python3.9/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_typeZColumn_column_type)selfr   r   r   r   _setup   s    zTestRow._setupc                 C   sV   | j d u rd S t| dsP| j dg ddd}| j dg ddd}| ||g| _| jS )N_tar         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$J dS )z"Row is subclass of ndarray and Rowr   N)r   r   r   
isinstance)r   r   cr   r   r   test_subclass-   s    
zTestRow.test_subclassc                 C   s   |  | | j}|d }|d dks(J |d dks8J |d dksHJ |d dksXJ |j|ju shJ |j|jksxJ |j|ju sJ tt |d  W d   n1 s0    Y  tj	dkrt
|jd	ksJ nt
|jd
ksJ dS )z3Row accurately reflects table values and attributesr   r   r   r!   r$   r   Nlittlez[('a', '<i8'), ('b', '<i8')]z[('a', '>i8'), ('b', '>i8')])r   r   metacolnamescolumnspytestraises
IndexErrorsys	byteorderstrr   r   r   r   rowr   r   r   test_values3   s    
&
zTestRow.test_valuesc                 C   sB   |  | | j}|d }d|d< |jtur>|d d dks>J dS )z+Row is a reference into original table datar   
   r   N)r   r   r
   r   r4   r   r   r   test_refF   s    

zTestRow.test_refc                 C   s   |  | | j }|jtu r\tt" | jd |d k W d   q1 sP0    Y  n(t| j|D ]\}}t	
||kshJ qhdS )=Compare a table row to the corresponding structured array rowr   Nr   r   Zas_arrayr
   r   r.   r/   
ValueErrorzipr   allr   r   Znp_tr5   Znp_rowr   r   r   test_left_equalO   s    


2zTestRow.test_left_equalc                 C   s   |  | | j }g d|d< |jtu rhtt" | jd |d k W d   q1 s\0    Y  n(t| j|D ]\}}t	
||kstJ qtdS )r9   )r   r   r   r   r   Nr:   r>   r   r   r   test_left_not_equalZ   s    


2zTestRow.test_left_not_equalc                 C   s   |  | | j }|jtu r\tt" | jd |d k W d   q1 sP0    Y  n(t| j|D ]\}}t	
||kshJ qhdS )zTest right equalr   Nr:   r>   r   r   r   test_right_equalf   s    


2zTestRow.test_right_equalc                 C   s   |  | | jd }t|}|jtur>t|| ks>J || usNJ |jt	|j
jksdJ tj|dd}|jturt|| ksJ || usJ |jt	|j
jksJ tt" tj|ddgd}W d    n1 s0    Y  d S )Nr   F)copy)r(   r   )dr   )r   )r   r   r   Zarrayr
   r   r=   as_voidr,   listr   namesr.   r/   r;   )r   r   rC   Znp_datar   r   r   test_convert_numpy_arrayq   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sNJ t| g d
ksfJ |	  d|jjd|jrdnddt
| dddddgksJ dS )zTest formatting rowr   z	<{} {}{}>zindex=0z masked=True z  a     b  zint64 int64z----- -----z    1     4)z 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	   r3   Z_repr_html_idr4   r   r   r   test_format_row   s4    


zTestRow.test_format_rowc                 C   s   |  | | j}|d }| }|jr:t|tjjsJJ nt|tjsJJ |d dksZJ |d dksjJ d|d d< |d dksJ |d dksJ |jrd|d _	|d dksJ | }|d tjju sJ dS )	zTest the as_void() methodr   r   r   r!   r#   iTN)
r   r   rD   r	   r'   r   r   ZmvoidZ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s4J |d d ddiksLJ |d  d ddikshJ |d  d ddiksJ dS )	z6Test the deprecated data property and as_void() methodr   r   r!   r   )r   rF   r   N)r
   rD   )r   r   r   r   r   r   !test_row_and_as_void_with_objects   s
    z)TestRow.test_row_and_as_void_with_objectsc              	   C   sL   |  | dD ]8}tt | j|  W d   q1 s<0    Y  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   sN   |j g dg dgdd}t|dd |D |jjd}t||ksJJ dS )	z.https://github.com/astropy/astropy/issues/8976r   r"   r   r!   rQ   c                 S   s   g | ]}|qS r   r   ).0r5   r   r   r   
<listcomp>       z6TestRow.test_create_rows_from_list.<locals>.<listcomp>)ZrowsrF   N)r
   typer   rF   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*J q*t| | jj D ]\}}||d ksVJ qVd S )Nr   )r   r   r<   keysr-   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   sz   |  | | jd }t|}| D ]\}}|| |ks$J q$dd }|f i |}| D ]\}}|| |ks\J q\d S )Nr   c                  [   s   | S r   r   )kwargsr   r   r   f   s    z&TestRow.test_row_as_mapping.<locals>.f)r   r   dictitems)r   r   r5   Zrow_dictkeyvaluera   row_splattedr   r   r   test_row_as_mapping   s    

zTestRow.test_row_as_mappingc           	      C   s   |  | | jd }t|}t| }t||D ]\}}|| |ks2J q2dd }|| }t||D ]\}}|| |ksfJ qfd S )Nr   c                  W   s   | S r   r   )argsr   r   r   ra      s    z'TestRow.test_row_as_sequence.<locals>.f)r   r   tupler\   r<   )	r   r   r5   Z	row_tupler\   rd   re   ra   rf   r   r   r   test_row_as_sequence   s    

zTestRow.test_row_as_sequenceN)rM   
__module____qualname__r   propertyr   r)   r6   r8   r?   r@   rA   rG   rO   rP   rR   rU   r[   r_   rg   rj   r   r   r   r   r      s$   
		r   c                  C   s  t jg dtj g dg dg dgg dd} | d }|d }g d	}t| |ks\J |g d }t| |ks|J d
|d< d
tj df|d< |d dtj ksJ |d dksJ | d d dtj ksJ | d d dksJ | d d d
ksJ dtj df|ddg< |d dtj ks,J |d dks>J | d d dtj ksZJ | d d dkspJ dtj df|d< | d d dtj ksJ | d d dksJ | d d dksJ tt	}| d d  W d   n1 s0    Y  dt
|jv sJ tt(}dtj ddf| d d< W d   n1 sP0    Y  dt
|jv snJ tt}d| d d< W d   n1 s0    Y  dt
|jv sJ dS ) zN
    Test getting and setting a row using a tuple or list of column names
    r   g      $@g      4@g      >@)      Y@      i@g     r@)xyz)r   r!   r(   rC   rQ   r   )r   r!   r(   )<Row index=1>z   a       b       c   z   m                   zfloat64 float64 float64z------- ------- -------z    2.0    20.0   200.0i  r(   ro   rV   r   r7   r!   d   i  rp         i)r   r(   g      $)r   Z	not_thereNz'not_there'r   r   z"right hand side must be a sequence)r   QTableumrI   rJ   cmr.   r/   KeyErrorr3   re   r;   )r   Zr1Zr1_abcZr1_abc_reprerrr   r   r   test_row_tuple_column_slice   sL    ,8,r   c                  C   s   t jg dg dtj gddgd} |  }tt&}ddtj f| d d< W d	   n1 sb0    Y  d
t	|j
v s~J | d |d ksJ d	S )zc
    Test that setting a row that fails part way through does not
    change the table at all.
    rn   r   r   r!   rQ   rx   r   rV   Nz/'s' (time) and 'm' (length) are not convertible)r   ry   rz   r{   rB   r.   r/   r;   sr3   re   )r   Ztcr~   r   r   r   'test_row_tuple_column_slice_transaction9  s    
4r   c                  C   s   t jg dgdd} | d d dks(J | d td dksBJ | d td dks\J | td d dksvJ g d}t| d  |ksJ t| td  |ksJ t| td  |ksJ 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      @r   rQ   r   r   )rt   z   a   Zfloat64z-------z    2.0N)r   r
   r   Zint_ZuintrI   rJ   )r   Ztreprr   r   r   test_uint_indexingI  s    r   )r1   r.   Znumpyr   Zastropyr   Zastropy.tabler   r   rz   Zconftestr   r   ZmarkZusefixturesr   r   r   r   r   r   r   r   <module>   s   
 a>