
    IR-e.                         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 Zej                            d           G d	 d
                      Zd Zd Zd ZdS )    N)table)units)Row   )MaskedTablec                      t          j        dggdgd          } d| d         _        | d         d         dk    sJ d| d         _        | d         d         t          j        j        u sJ 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maskedFcol0r   N)r   Tablemasknpmar   )ts    <lib/python3.11/site-packages/astropy/table/tests/test_row.pytest_masked_row_with_object_colr      sr    
 	aSE#t444AAfINQ4<1AfINQ4<25<''''''    table_typesc                       e Zd Zd Zed             Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd ZdS )TestRowc                 6    |j         | _        |j        | _        d S N)r   _table_typeColumn_column_type)selfr   s     r   _setupzTestRow._setup   s    &,'.r   c                     | j         d S t          | d          sP|                      dg dd          }|                      dg dd          }|                     ||g          | _        | j        S )N_tar         i8)namedatar
   b         )r   hasattrr   r    )r   r!   r(   s      r   r   z	TestRow.t!   s    
 $4tT"" 	/!!s$!GGA!!s$!GGA&&1v..DGwr   c                     |                      |           t          | j        d          }t          |t                    sJ dS )z"Row is subclass of ndarray and Rowr#   N)r   r   r   
isinstance)r   r   cs      r   test_subclasszTestRow.test_subclass.   s?    K   NN!S!!!!!!!r   c                     |                      |           | j        }|d         }|d         dk    sJ |d         dk    sJ |d         dk    sJ |d         dk    sJ |j        |j        u sJ |j        |j        k    sJ |j        |j        u sJ t          j        t                    5  |d          ddd           n# 1 swxY w Y   t          j	        dk    rt          |j                  d	k    sJ dS t          |j                  d
k    sJ 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   rows       r   test_valueszTestRow.test_values4   sb   K   Ah3x1}}}}3x1}}}}1v{{{{1v{{{{x5:%%%%|u~----{em++++]:&& 	 	FF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	=H$$sy>>%CCCCCCCsy>>%CCCCCCCs   (	B==CCc                     |                      |           | j        }|d         }d|d<   |j        t          ur|d         d         dk    sJ dS dS )z+Row is a reference into original table datar   
   r!   N)r   r   r   r   r=   s       r   test_refzTestRow.test_refG   sb    K   AhCK//:a=B&&&& 0/&&r   c                 ~   |                      |           | j                                        }|j        t          u rKt          j        t                    5  | j        d         |d         k     ddd           dS # 1 swxY w Y   dS t          | j        |          D ]\  }}t          j
        ||k              sJ  dS )=Compare a table row to the corresponding structured array rowr   Nr   r   as_arrayr   r   r7   r8   
ValueErrorzipr   allr   r   np_tr>   np_rows        r   test_left_equalzTestRow.test_left_equalP   s   K   v  ++z** % %q	T!W$$% % % % % % % % % % % % % % % % % %  #46400 - -VvcVm,,,,,,- -   A;;A?A?c                    |                      |           | j                                        }g d|d<   |j        t          u rKt          j        t                    5  | j        d         |d         k     ddd           dS # 1 swxY w Y   dS t          | j        |          D ]\  }}t          j
        ||k              sJ  dS )rD   )r   r   r   r!   r   NrE   rJ   s        r   test_left_not_equalzTestRow.test_left_not_equal[   s   K   v  IIS	++z** % %q	T!W$$% % % % % % % % % % % % % % % % % %  #46400 - -VvcVm,,,,,,- -s   BB	Bc                 ~   |                      |           | j                                        }|j        t          u rKt          j        t                    5  | j        d         |d         k     ddd           dS # 1 swxY w Y   dS t          | j        |          D ]\  }}t          j
        ||k              sJ  dS )zTest right equalr   NrE   rJ   s        r   test_right_equalzTestRow.test_right_equalg   s   K   v  ++z** % %q	T!W$$% % % % % % % % % % % % % % % % % %  #46400 - -Vvfm,,,,,,- -rN   c                 
   |                      |           | j        d         }t          j        |          }|j        t
          ur,t          j        ||                                k              sJ ||                                usJ |j        t          |j
        j                  k    sJ t          j        |d          }|j        t
          ur,t          j        ||                                k              sJ ||                                usJ |j        t          |j
        j                  k    sJ t          j        t                    5  t          j        |ddg          }d d d            d S # 1 swxY w Y   d S )Nr   F)copy)r0   r%   )dr%   )r
   )r   r   r   arrayr   r   rI   as_voidr5   listr
   namesr7   r8   rG   )r   r   rU   np_datas       r   test_convert_numpy_arrayz TestRow.test_convert_numpy_arrayr   s   K   F1I(1++K//6'QYY[[011111aiikk))))zT'-"5666666(15)))K//6'QYY[[011111aiikk))))zT'-"5666666]:&& 	D 	Dhqk(BCCCG	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   E88E<?E<c                    |                      |           | j        }|d         }t          |                                          d                    |j        j        d|j        rdnd          dddd	gk    sJ t          |                                          g d
k    sJ |	                                                                d                    |j        j        d|j        rdnd          dt          |           dddddgk    sJ 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   r<   _repr_html_idr=   s       r   test_format_rowzTestRow.test_format_row   sB   K   AhCyy##%%&"',6B 
 
*
 

 

 

 

 3xx""$$(I(I(IIIII  ++--##&"',6B 
 -r%yy,,,:B+2
 
 
 
 
 
 
r   c                 ,   |                      |           | j        }|d         }|                                }|j        r"t	          |t
          j        j                  sJ nt	          |t
          j                  sJ |d         dk    sJ |d         dk    sJ d|d         d<   |d         dk    sJ |d         dk    sJ |j        rJd|d         _	        |d         dk    sJ |                                }|d         t
          j        j        u sJ dS dS )	zTest the as_void() methodr   r!   r   r(   r*   iTN)
r   r   rW   r   r/   r   r   mvoidvoidr   )r   r   r   r>   row_voids        r   test_as_voidzTestRow.test_as_void   s;   K   Ah ;;==< 	1h444444h00000}!!!!}!!!! c
13x4}!!!! < 	,"E#JO C=A%%%%{{}}Hs8ru|++++	, 	, ,+r   c                 :   |                     ddiddiggd          }|d         d         ddik    sJ |d         d         ddik    sJ |d                                         d         ddik    sJ |d                                         d         ddik    sJ dS )	z6Test the deprecated data property and as_void() methodr!   r   r(   r#   )r!   rY   r   N)r   rW   )r   r   r   s      r   !test_row_and_as_void_with_objectsz)TestRow.test_row_and_as_void_with_objects   s    a3(34FCCtAw3(""""tCyS!H$$$$t||~~a S!H,,,,t||~~c"sAh......r   c                     |                      |           dD ]@}t          j        t                    5  | j        |          ddd           n# 1 swxY w Y   AdS )z;Row gives index error upon creation for out-of-bounds index)r$   r*   N)r   r7   r8   r9   r   )r   r   ibads      r   test_bounds_checkingzTestRow.test_bounds_checking   s    K   " 	 	Dz**  t              	 	s   AA	A	c                     |                     g dg dgd          } t          |          d |D             |j        j                  }t	          j        ||k              sJ dS )z.https://github.com/astropy/astropy/issues/8976r"   r)   r!   r(   rl   c                     g | ]}|S  rv   ).0r>   s     r   
<listcomp>z6TestRow.test_create_rows_from_list.<locals>.<listcomp>   s    ***##***r   )rowsrY   N)r   typer
   rY   r   rI   )r   r   orig_tabnew_tabs       r   test_create_rows_from_listz"TestRow.test_create_rows_from_list   s~    $$iii%;:$NN $x..*****(.2F
 
 
 vh')*******r   c                    |                      |           | j        d         }t          |                                | j        j                                                  D ]\  }}||k    sJ t          |                                | j        j                                                  D ]\  }}||d         k    sJ d S )Nr   )r   r   rH   keysr6   values)r   r   r>   row_keycol_key	row_valuecols          r   test_row_keys_valueszTestRow.test_row_keys_values   s    K   fQi #CHHJJ0C0C0E0E F F 	& 	&GWg%%%%%!#**,,0E0E0G0GHH 	' 	'NIsA&&&&&	' 	'r   c                    |                      |           | j        d         }t          |          }|                                D ]\  }}||         |k    sJ d } |di |}|                                D ]\  }}||         |k    sJ d S )Nr   c                      | S r   rv   )kwargss    r   fz&TestRow.test_row_as_mapping.<locals>.f   s    Mr   rv   )r   r   dictitems)r   r   r>   row_dictkeyvaluer   row_splatteds           r   test_row_as_mappingzTestRow.test_row_as_mapping   s    K   fQi99"..** 	% 	%JCs8u$$$$$	 	 	 qxx3xx&,,.. 	% 	%JCs8u$$$$$	% 	%r   c                 J   |                      |           | j        d         }t          |          }t          |                                          }t	          ||          D ]\  }}||         |k    sJ d } || }t	          ||          D ]\  }}||         |k    sJ d S )Nr   c                      | S r   rv   )argss    r   r   z'TestRow.test_row_as_sequence.<locals>.f   s    Kr   )r   r   tupler   rH   )	r   r   r>   	row_tupler   r   r   r   r   s	            r   test_row_as_sequencezTestRow.test_row_as_sequence   s    K   fQi#JJ	SXXZZ  dI.. 	% 	%JCs8u$$$$$	 	 	 q#wdL11 	% 	%JCs8u$$$$$	% 	%r   N)rb   
__module____qualname__r   propertyr   r1   r?   rB   rM   rP   rR   r[   re   rj   rm   rr   r}   r   r   r   rv   r   r   r   r      s%       / / / 
 
 X
" " "D D D&' ' '	- 	- 	-
- 
- 
-	- 	- 	-D D D&
 
 
>, , ,</ / /  + + +' ' '% % %% % % % %r   r   c                     t          j        g dt          j        z  g dg dg dgg d          } | d         }|d         }g d	}t	          |                                          |k    sJ |g d         }t	          |                                          |k    sJ d
|d<   d
t          j        z  df|d<   |d         dt          j        z  k    sJ |d         dk    sJ | d         d         dt          j        z  k    sJ | d         d         dk    sJ | d         d         d
k    sJ dt          j        z  df|ddg<   |d         dt          j        z  k    sJ |d         dk    sJ | d         d         dt          j        z  k    sJ | d         d         dk    sJ dt          j        z  df|d<   | d         d         dt          j        z  k    sJ | d         d         dk    sJ | d         d         dk    sJ t          j        t                    5 }| d         d          ddd           n# 1 swxY w Y   dt          |j                  v sJ t          j        t                    5 }dt          j        z  ddf| d         d<   ddd           n# 1 swxY w Y   dt          |j                  v sJ t          j        t                    5 }d| d         d<   ddd           n# 1 swxY w Y   dt          |j                  v sJ 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(   r0   rU   rl   r   )r!   r(   r0   )<Row index=1>z   a       b       c   z   m                   zfloat64 float64 float64z------- ------- -------z    2.0    20.0   200.0i  r0   r   rt   r!   rA   r(   d   i  r         i)r!   r0   g      $)r!   	not_thereNz'not_there'r#   r$   z"right hand side must be a sequence)r   QTableumr^   r_   cmr7   r8   KeyErrorr<   r   rG   )r   r1r1_abcr1_abc_reprerrs        r   test_row_tuple_column_slicer      s    	IIO!!!OO		
 #""	 	 	A 
1BF  K <<""$$3333  F<<""$$3333 BsG!$;%BxLc7b13hc7c>>>>S6!9QS    S6!9S6!9 AD[%'BSzNc7b13hc7c>>>>S6!9QS    S6!9 ACx}F8S6!9QS    S6!9S6!9 
x	 	  C	!              C	NN**** 
z	"	" 'cQS!Q!X' ' ' ' ' ' ' ' ' ' ' ' ' ' '/3sy>>AAAA 
z	"	" c!X              /3sy>>AAAAAAs6   H..H25H2*JJJK&&K*-K*c                  r   t          j        g dg dt          j        z  gddg          } |                                 }t          j        t                    5 }ddt          j        z  f| d         d<   d	d	d	           n# 1 swxY w Y   d
t          |j
                  v sJ | d         |d         k    sJ d	S )zc
    Test that setting a row that fails part way through does not
    change the table at all.
    r   r"   r!   r(   rl   r   r   rt   Nz/'s' (time) and 'm' (length) are not convertible)r   r   r   r   rT   r7   r8   rG   sr<   r   )r   tcr   s      r   'test_row_tuple_column_slice_transactionr   E  s    
 	IIO	
 Cj	 	 	A 
B 
z	"	" (cb13h!X( ( ( ( ( ( ( ( ( ( ( ( ( ( (<CINNNNQ42a5======s   B  BBc                     t          j        g dgd          } | d         d         dk    sJ | d         t          j        d                   dk    sJ | d         t          j        d                   dk    sJ | t          j        d                   d         dk    sJ g d}t          | d                                                   |k    sJ t          | t          j        d                                                             |k    sJ t          | t          j        d                                                             |k    sJ 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!   rl   r   r   )r   z   a   float64z-------z    2.0N)r   r   r   int_uintr^   r_   )r   treprs     r   test_uint_indexingr   Z  s@    	___%S111AS6!9S6"'!**$$$$S6"'!**$$$$RWQZZ=$$$$  E !::  ""e++++"'!**))++u4444"'!**))++u444444r   )r:   numpyr   r7   astropyr   r   r   astropy.tabler   conftestr   r   markusefixturesr   r   r   r   rv   r   r   <module>r      s   


                        ! ! ! ! ! !	( 	( 	( ''a% a% a% a% a% a% a% ('a%HBB BB BBJ  *5 5 5 5 5r   