
    HR-e2V                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dlm
Z 	 d dlZdZn# e$ r dZY nw xY wd dlmZ d dlmZmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZ d dlm Z m!Z! d dl"m#Z#m$Z$ ddl%m&Z& d Z'd Z(d Z) G d de&          Z*e j+        d             Z, G d de&          Z- G d de&          Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d  Z6dS )!    N)charTF)fits)
NUMPY2FITSColumnAttributeDelayed)decode_ascii)VerifyErrorTable)UnitUnitsWarningUnrecognizedUnit)NUMPY_LT_1_22NUMPY_LT_1_22_1)AstropyDeprecationWarningAstropyUserWarning   )FitsTestCasec                    | }|}|j         j        dk    s|j         j        dk    rd}nd}d}t          j        ||z
            }|dk    }|dk    }t          j        |          r ||                                         dk    rdS t          j        |          r;||         t          j        ||                   z                                  |k    rdS dS )	z
    Compare two float scalars or arrays and see if they are consistent

    Consistency is determined ensuring the difference is less than the
    expected amount. Return True if consistent, False if any differences.
    float32gư>gؗҜ<gh㈵>r           FT)dtypenamenpabsoluteanymax)abaabb	precisiondiffmask0masknzs           @lib/python3.11/site-packages/astropy/io/fits/tests/test_table.pycomparefloatsr'   "   s     
B	
B	x}	!!RX]i%?%?		&	I;rBwD!GE3YF	ve}} ;??##5	vf~~ L2;r&z2227799IEE54    c           	         t          | j        j                  }t          |j        j                  }||k    rt          d           dS t	          |          D ]}|                     |          }|                    |          }|j        j        dk    rt          |          }|j        j        dk    rt          |          }t          |t          |                    sqt          |t          |                    sTt          dt          |          d|           t          dt          |          d|           t          d| d	            dS t          |          rht          |d
         t          j                  rHt          ||          s6t          d|           t          d|           t          d| d            dS pt          |t          j        j                  st          |t          j        j                  rt	          t          |                    D ]q}t          j        ||         ||         k              rKt          d| d||                     t          d| d||                     t          d| d|            r>t          j        ||k              r6t          d|           t          d|           t          d| d            dS dS )z
    Compare two record arrays

    Does this field by field, using approximation testing for float columns
    (Complex not yet handled.)
    Column names not compared, but column types and sizes are.
    znumber of fields don't matchFSztype(fielda): z	 fielda: ztype(fieldb): z	 fieldb: zfield z type differsr   zfielda: zfieldb: z differszfielda[z]: zfieldb[z differs in row T)lenr   namesprintrangefieldr   r   
isinstancetyper   floatingr'   r   column_VLFr   )r   r   nfieldsanfieldsbifieldafieldbrows           r&   comparerecordsr;   >   s    17=!!H17=!!H8,---u8__ ! !<##!&))F<##!&))F&$v,,// 	
DLL9
 9
 	 "DLL+vFFF"DLL+vFFF+1+++,,,55v;; 	:fQi== 	 00 j&)))j&)))*q***+++uu	
  011 	ZDK$6
 6
 	 S[[)) = =6&+455 =9C99F3K99:::9C99F3K99:::;1;;c;;<<<	= vf&'' j&)))j&)))*q***+++uu	
 4r(   c                 |   |j         j        | j         j        k    sJ d t          j        j                                        D             }|j         j        D ]e}|j         |         }| j         |         }|D ]F}t          ||          r4t          ||          r$t          ||          t          ||          k    sJ GfdS )z6
    Helper function to compare column attributes
    c                 B    g | ]\  }}t          |t                    |S  )r0   r   ).0kvs      r&   
<listcomp>z$_assert_attr_col.<locals>.<listcomp>w   s;       ajO6T6T	  r(   N)columnsr,   r   Column__dict__itemsgetattr)	new_tbhdutbhduattrsr   colnew_colattrs          r&   _assert_attr_colrN   q   s    
 =)"3"99999 k*0022  E # D DmD!#D) 	D 	DDsD!! Dggt&<&< DsD))WWd-C-CCCCC	DD Dr(   c                      e 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 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 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. Z0d/ Z1d0 Z2e3j4        5                    d1d2d3g          d4             Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;d: Z<d; Z=d< Z>d= Z?d> Z@d? ZAd@ ZBdA ZCdB ZDdC ZEdD ZFdE ZGdF ZHe3j4        I                    eJ dGH          dI             ZKe3j4        I                    eJ dGH          e3j4        jL        dJ                         ZMdK ZNdL ZOdM ZPdN ZQdO ZRdPS )QTestTableFunctionsc                 (   t          j        t          j                    t          j                    g          }|d         j        }d|d<   t          j        |          }t          j        |          }d|d         j        d<   |d         dk    sJ dS )a  
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/153

        Ensure that a header from one HDU is copied when used to initialize new
        HDU.

        This is like the test of the same name in test_image, but tests this
        for tables as well.
        r   zlabq01i3q_rawtag.fitsFILENAMEheaderzlabq01i3q_flt.fitsr   N)r   HDUList
PrimaryHDUBinTableHDUrT   )selfifdthdrthduofds        r&   test_constructor_copies_headerz1TestTableFunctions.test_constructor_copies_header   s     lDO--t/?/A/ABCC1v}2Zt,,,l4  $8Aj! J#:::::::r(   c           
      $   t          j        |                     d                    }t          j        |                     d                    }t          j        g d          }t          j        g dt
          j                  }t          j        dd|          }t          j        d	d
|          }t          j        g dd          }t          j        dd|          }	t          j        g dd          }
t          j        dd|
          }t          j        g dd          }t          j        dd|          }t          j        dgdgdggt
          j                  }t          j        dd|          }t          j        g dd          }t          j        dd|          }t          j        g dg dg dgt
          j                  }t          j        d d!|          }t          j	        |||	|||||g          }t           j
                            |          }t          j	        |d                   }t           j
                            |d"#          }t
          j                            d$d%gd&'          }t          |j        |          sJ |j        d         d         |d         k    sJ |j        d         d         |d         k    sJ |j        d         d"         |d         k    sJ |j        d         d(         |
d         k    sJ |j        d         d)         |d         k    sJ |j        d         d*         |d                             d+          k                                    sJ |j        d         d,         |d         k    sJ |j        d         d-         |d         k                                    sJ t!          |j                            d                    d.k    sJ t          j	        |d                   }t          j        t          j                              }|                    |           |                    |                     d/          d01           t          j        |                     d/                    5 }g d2}|d         j                            d-          }|d         |k                                    sJ 	 d d d            n# 1 swxY w Y   t          j        |                     d3          d4          }|                    |d                    |                    |           |                                 |                                 |                                 d S )5Ntb.fitsz
test0.fits)abcdefxx)      &@      (@      *@r   r`   3Ar   formatarrayra   E         i2xyzIr      rm   t1)y      @      @y      @      @y      @      @c8t2Cr   r   t3X)e   f   g   i4t4J)r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   t511Xrt   nrowsr   r`   g   @r   rt   zxy g   @r   c1, c2, c3, c4r,   rm   rn   ro   bool      z['abc' 'def' 'xx']ztableout1.fitsT	overwrite)TTFTFTTTFFTztableout2.fitsappend)r   opendata	chararrayrj   r   r   rD   uint8ColDefsrW   from_columnsrecr;   viewallstrr/   rU   rV   r   writetotempclose)rX   home_is_datattfda1r1c1c2a3c3a4c4a5c5a6c6a7c7a8rv   xrI   x2rw   ra_foutf2expr   fout2s                                  r&   	test_openzTestTableFunctions.test_open   sk   Ytyy++,,Ytyy..// _11122X(((
;;; [eD;;;[eCr:::Xiiit,,,[eCr:::Xiiit,,,[d3b999X...d;;;[d3b999 XsQC!oRX666[d3b999XoooT222[d3b999X111111111
 (
 
 
 [d5;;; L"b"b"b"b9:: --a00
 \"Q%  **2Q*77V\\.0QR"  
 

 bgr*****
 z!}Q2a5((((z!}Q2a5((((z!}Q2a5((((z!}Q2a5((((z!}Q2a5((((
1a BqEJJv$6$66;;=====z!}Q2a5((((
1a BqE)..00000 5:##E**++/CCCCC LA |DO--..ETYY/00DAAAYtyy!12233 	*rXXXCa5:##A&&DGsN''))))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	$))$455x@@RUU









s   AS11S58S5c                    t          j        |                     d                    }|d         j        d         dk    sJ g dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dd}|d         j                            d          |k    sJ t          j                            ddgd          }t          |d         j        |d d                   sJ d|d         j        
                    d          d<   |d         j                                         t          t          j        j        
                    |d         j        d                    dk    sJ |d         j        
                    d          t          j        ddg          k                                    sJ |                                 d S )Nr_   r   tform11Jr   r   r   r   )r   rg   1E1L) r   r   r   )i  r   r   r   )r   r   rm   r   )r   r   g?r   )I11A3zG15.7L6)r   ri   unitnullbscalebzerodispstartdim	coord_inc
coord_type
coord_unitcoord_ref_pointcoord_ref_valuetime_ref_posFoutputr   r   r   r   rt   r   r   z[84 84])r   r   r   rT   rC   infor   r   rj   r;   r/   _scale_backr   recarrayr   r   )rX   tr   r   s       r&   test_binary_tablez$TestTableFunctions.test_binary_table   s   Idii	**++t{8$,,,, -,,...$$$---%oo&&&000%%%###)))******//////,,,
 
$ t|   ..$6666V\\.0QR"  
 

 adiBQB00000 $%!	a 	!	26?((1D99::iGGGG !	""bh1v&6&66;;===== 	
					r(   c                 
   t          j        |                     d                    }t          j                            g dd          }t          |d         j        |          sJ |d         j        dd          dd          }t          j                            dgd          }t          ||          sJ |                    d          t          j        dg          k                                    sJ t          j                            g d	d          }t          |d         j        d d d         |          sJ t          j        d
dg          }t          j        ddg          }t          j
        ddd|          }t          j
        ddd|          }	t          j
        ddg d          }
t           j                            |	||
g          }t          |j        j        j                  t          j        d          dft          j        d          dft          j        d          dfdk    sJ |                    |                     d          d            t          j        |                     d                    }t          |j        |d         j                  sJ |                                 t          j        ddg          }t          j
        dd!|d"d#$          }	t           j                            |	g          }|                    |                     d          d            t          |                     d                    5 }d%|                                v sJ 	 d d d            n# 1 swxY w Y   t          j        |                     d                    5 }t          |j        |d         j                  sJ 	 d d d            n# 1 swxY w Y   t          j
        d&d'g d          }t          j
        d(d)g d          }	t          j
        d*d+g d          }
t           j                            ||	|
g          }|j        j        t          j        k    sJ |	j        j        t          j        k    sJ |
j        j        t          j        k    sJ |                    |                     d          d            t          j        |                     d                    5 }t          |j        |d         j                  sJ 	 d d d            n# 1 swxY w Y   |                                 d S ),N
ascii.fits)g   >$@%   )g   @   g   Q8/@   )r   r   g     u@Y  zc1, c2r   r   rt   r   r   )r   r   r   abcdra   rc   rd   r`   r      )r   ri   r   rj   rk   rm   ru   rr   )[   \   ]   rh   z|S3   z|S15z|S10   )r`   ra   ru   	toto.fitsTr   Dffffff@g333333?)r   ri   rj   r   r   z4.95652173913043548D+00rw   I2r   I5t8I10)r   r   r   r   r   rj   r;   r/   r   r   rD   TableHDUr   dictr   fieldsr   r   r   readint16int32int64)rX   r   ra1a2ra2ra3r   r   r   r   r   hduhdulfs                 r&   test_ascii_tablez#TestTableFunctions.test_ascii_table"  s   Idii--..fll     	
 	
 adi----- qTYqrr]122fllL>l::b#&&&&&rx.3355555fllNNN  
 

 adi!nc22222 _fe_--XtTl##[eD"EEE[eCqCCC[d3lllCCCm(("b"66CHN)**HUOOR(HV$$a(8F##R(/
 /
 
 
 
 

 	DIIk**d;;;y;//00chQ55555

 XtTl##[eCr#SQQQm(("..DIIk**d;;;$))K(()) 	9Q,88888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9Ytyy--.. 	:$!#(DGL999999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:
 [d4|||DDD[d4|||DDD[d5EEEm(("b"66x~))))x~))))x~))))DIIk**d;;;Ytyy--.. 	:$!#(DGL999999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	
					s6   NN	N	7#O''O+.O+#T44T8;T8c                 j   t          j        dt                    }t          j        dgd          }||d<   t	          j        dd|          }t	          j        |g          }t          j                            |          }d	|_	        |
                    |                     d
          d           t	          j        |                     d
                    }|d	         }|j        }|                    d          d         }	||	k                                    sJ |                                 d S )Nr   rf   rm   r   r   ChannelszPB()rh   RFItestendian.fitsTr   )r   ndarrayobjectrj   r   rD   r   rW   r   r   r   r   r   r   r/   r   r   )
rX   r   
channelsInrK   colsrI   hduLrfiHDUr   channelsOuts
             r&   test_endiannessz"TestTableFunctions.test_endiannessn  s   Jt6***Xqc111
!kz&BBB|SE"" --d33
dii 122dCCCy#45566e{jj,,Q/k)..00000

r(   c                 B   g d}t          j        |d          }t          j        |d          }t          j        dd|          }t          j        dd|          }t          j        ||g          }t          j                            |          }|j        d         |k                                    sJ |j        d         |k                                    sJ |	                    | 
                    d	          d
           t          j        | 
                    d	                    5 }|d         j        d         |k                                    sJ |d         j        d         |k                                    sJ 	 ddd           dS # 1 swxY w Y   dS )z
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/77
        (Astropy doesn't preserve byte order of non-native order column arrays)
              ?       @      @      @z<f8rf   z>f8r   r   rh   r   r   Tr   r   N)r   rj   r   rD   r   rW   r   r   r   r   r   r   )	rX   r   r   r   col1col2r  rI   r   s	            r&   test_column_endiannessz)TestTableFunctions.test_column_endianness~  s    !  Xau%%%Xau%%%{Cr:::{Cr:::|T4L)) --d33
32%**,,,,,
32%**,,,,, 	dii 122dCCCYtyy!23344 	3GL%+0022222GL%+00222222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   /AFFFc                    t           j                            g ddd          }t          j        |          }t          |j        |          sJ |                    |                     d          d           t          j	        |                     d                    }t          |j        |d         j                  sJ t          ||d         j                  sJ |
                                 d S )	Nr   Serius333333A1Vrt   Canopys\(\F0Ib)rm   z
Rigil KentgG2Vzint16,a20,float32,a10order,name,mag,Spformatsr,   r   Tr   r   )r   r   rj   r   rW   r;   r   r   r   r   r   )rX   brightr   r   s       r&   test_recarray_to_bintablehduz/TestTableFunctions.test_recarray_to_bintablehdu  s      
 ,%  
 
 v&&ch/////DIIk**d;;;y;//00chQ55555fd1gl33333

r(   c                 
   t          j        g dg dd          }t          j        g d|          }t          j        |          }t          |j        |                    t          j                            sJ |	                    | 
                    d          d           t          j        | 
                    d                    }t          |j        |d	         j                  sJ |                                 d S )
Norderr   magSp)intS20r   S10r,   r  r  rf   r   Tr   r   r   r   rj   r   rW   r;   r   r   FITS_recr   r   r   r   rX   descr   r   r   s        r&   !test_numpy_ndarray_to_bintablehduz4TestTableFunctions.test_numpy_ndarray_to_bintablehdu      x777;;; 
 
 H  
 
 
 
 q!!cht}(=(=>>>>>DIIk**d;;;y;//00chQ55555

r(   c                 
   t          j        g dg dd          }t          j        g d|          }t          j        |          }t          |j        |                    t          j                            sJ |	                    | 
                    d          d           t          j        | 
                    d                    }t          |j        |d	         j                  sJ |                                 d S )
Nr"  )r&  U20r   U10r)  r  rf   r   Tr   r   r*  r,  s        r&   .test_numpy_ndarray_to_bintablehdu_with_unicodezATestTableFunctions.test_numpy_ndarray_to_bintablehdu_with_unicode  r/  r(   c                    t           j                            g ddd          }t          j                            |d          }t          |j        j        j	        d         j                  t          |j        j        j
        d                   k    sJ t          |j        j        j	        d         j                  t          |j	        j	        d         j                  k    sJ t          |j        j        j	        d         j                  t          |j	        j
        d                   k    sJ d|j        d         d<   |j        d         d         dk    sJ |j        j        j
        d         d         dk    sJ |j        j        j	        d         j        d         dk    sJ |j	        j
        d         d         dk    sJ |j	        j	        d         j        d         dk    sJ d	|j        j        j
        d         d<   |j        d         d         d	k    sJ |j        j        j
        d         d         d	k    sJ |j        j        j	        d         j        d         d	k    sJ |j	        j
        d         d         d	k    sJ |j	        j	        d         j        d         d	k    sJ d
|j        j        j	        d         j        d<   |j        d         d         d
k    sJ |j        j        j
        d         d         d
k    sJ |j        j        j	        d         j        d         d
k    sJ |j	        j
        d         d         d
k    sJ |j	        j	        d         j        d         d
k    sJ d|j	        j
        d         d<   |j        d         d         dk    sJ |j        j        j
        d         d         dk    sJ |j        j        j	        d         j        d         dk    sJ |j	        j
        d         d         dk    sJ |j	        j	        d         j        d         dk    sJ d|j	        j	        d         j        d<   |j        d         d         dk    sJ |j        j        j
        d         d         dk    sJ |j        j        j	        d         j        d         dk    sJ |j	        j
        d         d         dk    sJ |j	        j	        d         j        d         dk    sJ |j                            d          t          j        ddgt           j                  k                                    sJ |j        d         d         dk    sJ |j        d         d         dk    sJ |j                            d          t          j        ddgt           j                  k                                    sJ |j        d         d         dk    sJ |j        d         d         dk    sJ |                    |                     d          d           t          j        |                     d                    5 }|d         j                            d          t          j        ddgt           j                  k                                    sJ |d         j        d         d         dk    sJ |d         j        d         d         dk    sJ |d         j                            d          t          j        ddgt           j                  k                                    sJ |d         j        d         d         dk    sJ |d         j        d         d         dk    sJ 	 d d d            n# 1 swxY w Y   ~t          j                            |d          }t           j                            ddgdd          }t'          |j        |          sJ |                    |                     d          d           t          j        |                     d                    5 }t'          |j        |d         j                  sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  zint16,a20,float64,a10r  r  rt   r   r      d     X     rf   r   r  r  r  r  rm   r  r  r   Tr   r  r  )r   r   rj   r   r   r   idr   _coldefsrC   _arraysr/   r   r   float64r   r   r   rW   r;   )rX   r  r   r   tmps        r&   test_new_table_from_recarrayz/TestTableFunctions.test_new_table_from_recarray  s     
 ,%  
 
 m((q(99 #(#+A.455H%a(:
 :
 
 
 
 
 #(#+A.455K"(:
 :
 
 
 
 
 #(#+A.455CK<OPQ<R9S9SSSSS Ax{1~$$$$x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555*-!!$Q'x{1~$$$$x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#555503!!$*1-x{1~$$$$x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555$'Aq!x{1~$$$$x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555*-A$Q'x{1~$$$$x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555q!!RXsAhbh%G%G%GGLLNNNNNx{1~))))x{1~****q!!RXuenBJ%O%O%OOTTVVVVVx{1~&&&&x{1~''''DIIk**d;;;Ytyy--.. 	0$GL&&q))RXsAhbh-O-O-OOTTVVVVV7<?1%11117<?1%2222Q""1%%5%.
)S)S)SScee   7<?1%....7<?1%/////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 ++F!+<<fll(*GH+%  
 

 ch,,,,,DIIk**d;;;Ytyy--.. 	:$!#(DGL999999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s%   >D-]88]<?]<1#a""a&)a&c                    t          j        |                     d                    5 }|d         j        }ddd           n# 1 swxY w Y   t          j        dg|j                  }t          j        ||                              t           j                  }t          |          
                    d          sJ dS )zR
        Tests creating a new FITS_rec object from a multi-field ndarray.
        r_   r   N)rm   qwe      @Frf   z	FITS_rec()r   r   r   r   rj   r   r   r   r+  repr
startswith)rX   hr   new_dataappendeds        r&   test_new_fitsrecz#TestTableFunctions.test_new_fitsrec1  s    
 Ytyy++,, 	Q49D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	834DJGGG9T8,,11$-@@H~~((5555555   AA	Ac                 ,   t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        d
d          }t          j        dd          }t          j        ddg d          }t          j        |||||g          }t          j                            |          }	|	                    |                     d                     t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        d
d          }t          j        dd          }t          j        ddg d          }t          j        |||||g          }t          j                            |          }	|	                    |                     d                     t          j	        |                     d                    }
t          j	        |                     d                    }|
d         j
        j        d         }|
d         j
        j        d         |d         j
        j        d         z   }|
d         j        j        d         |
d         j        j        d         j        u sJ t          j                            |
d         j        |          }t          t          |
d         j                            D ]?}|d         j
                            |          |j
                            |          |d <   @|                    |                     d                     ddg}t          j        |                     d          d          |k    sJ t          j        g dt           j                   }t           j                            d!d"d#|d$fd%d&d#|dfd'd(d#|d$fd)d*d#|d$fd+d,d#|dfd-d.d#|d$fd/d0d#|dfd1d2d#|dfgd34          }t)          |j
        |          sJ d5|j
        d         d<   |j
        j        j        d         d         d5k    sJ |j
        j        j        d         j        d         d5k    sJ |j        j        d         d         d5k    sJ |j        j        d         j        d         d5k    sJ |j
        d         d         d5k    sJ d6|j
        j        j        d         d<   |j
        j        j        d         d         d6k    sJ |j
        j        j        d         j        d         d6k    sJ |j        j        d         d         d6k    sJ |j        j        d         j        d         d6k    sJ |j
        d         d         d6k    sJ d7|j
        j        j        d         j        d<   |j
        j        j        d         d         d7k    sJ |j
        j        j        d         j        d         d7k    sJ |j        j        d         d         d7k    sJ |j        j        d         j        d         d7k    sJ |j
        d         d         d7k    sJ d8|j        j        d         d<   |j
        j        j        d         d         d8k    sJ |j
        j        j        d         j        d         d8k    sJ |j        j        d         d         d8k    sJ |j        j        d         j        d         d8k    sJ |j
        d         d         d8k    sJ d9|j        j        d         j        d<   |j
        j        j        d         d         d9k    sJ |j
        j        j        d         j        d         d9k    sJ |j        j        d         d         d9k    sJ |j        j        d         j        d         d9k    sJ |j
        d         d         d9k    sJ t          j	        |                     d                    }|d         }d5|j
        d         d<   |j
        j        j        d         d         d5k    sJ |j
        j        j        d         j        d         d5k    sJ |j        j        d         d         d5k    sJ |j        j        d         j        d         d5k    sJ |j
        d         d         d5k    sJ d6|j
        j        j        d         d<   |j
        j        j        d         d         d6k    sJ |j
        j        j        d         j        d         d6k    sJ |j        j        d         d         d6k    sJ |j        j        d         j        d         d6k    sJ |j
        d         d         d6k    sJ d7|j
        j        j        d         j        d<   |j
        j        j        d         d         d7k    sJ |j
        j        j        d         j        d         d7k    sJ |j        j        d         d         d7k    sJ |j        j        d         j        d         d7k    sJ |j
        d         d         d7k    sJ d8|j        j        d         d<   |j
        j        j        d         d         d8k    sJ |j
        j        j        d         j        d         d8k    sJ |j        j        d         d         d8k    sJ |j        j        d         j        d         d8k    sJ |j
        d         d         d8k    sJ d9|j        j        d         j        d<   |j
        j        j        d         d         d9k    sJ |j
        j        j        d         j        d         d9k    sJ |j        j        d         d         d9k    sJ |j        j        d         j        d         d9k    sJ |j
        d         d         d9k    sJ |
                                 |                                 |                                 d S ):N8  N  4  =  NGC1NGC2NGC3NCG4target10Arh   countsr   DNr   ri   r   rj   notesA10r   ri   spectrum5EflagLr   r   r   r   table1.fits        NGC5NGC6NGC7NCG8r   r   r   r   table2.fitsr   r   r   newtable.fitsr   PRIMARYr   rV   rn   r>   r   r   )r   r   r   rW   r   z8R x 5Cz[10A, J, 10A, 5E, L]r   Fr   r   r   r   r   r   rf   rQ  rL  r   TrR  rM  rS  rN  rT  rO  ri  rd  rj  re  rk  rf  rl  rg  a10,u4,a10,5f4,lr  ,     r6  Z   P   )r   rj   r   rD   r   rW   r   r   r   r   r   shaperC   r<  r.   r+   r/   r   r   r   r;   r;  r   )rX   rW  r,   r   r   r   r   r   coldefsrI   ru   rw   nrows1r   r   r7   r   zrj   r   s                       r&   test_appending_a_columnz*TestTableFunctions.test_appending_a_column@  s   ...//999::[huEBBB[hsVLLL[ge444[j666[fSEEE,BB344 --g66dii..///...//999::[huEBBB[hsVLLL[ge444[j666[fSEEE,BB344 --g66dii../// Ytyy//00Ytyy//00 A!!$ 1
 #bej&6q&99!u}$Q'2a5=+@+C+IIIII ++BqEM+GG s2a5=))** 	= 	=A)+A)9)9!)<)<CHNN1fgg&&DIIo../// ;P

 y?33EBBBdJJJJH...bjAAAb!T*b!U+b!T*b!T*b!U+b!T*b!U+b!U+	 '  
 
 ch..... Ax (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555x{1~$$$$*-!!$Q'x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555x{1~$$$$03!!$*1-x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555x{1~$$$$$&Aq!x (+A."4444x (+1!4::::{"1%a(B....{"1%+A."4444x{1~####*,A$Q'x (+A."4444x (+1!4::::{"1%a(B....{"1%+A."4444x{1~#### y?33441gAx (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555x{1~$$$$*-!!$Q'x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555x{1~$$$$03!!$*1-x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555x{1~$$$$$&Aq!x (+A."4444x (+1!4::::{"1%a(B....{"1%+A."4444x{1~####*,A$Q'x (+A."4444x (+1!4::::{"1%a(B....{"1%+A."4444x{1~####









r(   c           
      0   t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        d
d          }t          j        dd          }t          j        ddg d          }t          j        ||||g          }t          j                            |          }	|	j        j        g dk    sJ ||z   }
t          j                            |
          }|j        j        g dk    sJ t          j        g dt           j	                  }t           j
                            ddd|dfddd|dfddd|dfdd d|dfgd!"          }t          |j        |          sJ d S #NrK  rP  rU  rV  rh   rW  r   rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rU  rW  rZ  r]  rU  rW  rZ  r]  r_  rr  rf   rQ  rL  r   TrR  rM  FrS  rN  rT  rO  rs  rt  )r   rj   r   rD   r   rW   r   rC   r,   r   r   r;   r   )rX   rW  r,   r   r   r   r   r   rz  rI   coldefs1tbhdu1r|  rj   s                 r&   test_adding_a_columnz'TestTableFunctions.test_adding_a_column  s   ...//999::[huEBBB[hsVLLL[ge444[j666[fSEEE,BB/00 --g66}"&O&O&OOOOOR<!..x88~#'X'X'XXXXXH...bjAAAb!T*b!U+b!T*b!T*	 '  
 
 fk51111111r(   c           
         t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        d
d          }t          j        dd          }t          j        ddg d          }t          j        ||||g          }t          j                            |          }	|	j        j        g dk    sJ |	j        	                    |           |	j        j        g dk    sJ t          j        g dt           j
                  }
t           j                            ddd|
dfddd|
dfddd|
dfdd d|
dfgd!"          }t          |	j        |          sJ d S r  )r   rj   r   rD   r   rW   r   rC   r,   add_colr   r   r;   r   rX   rW  r,   r   r   r   r   r   rz  rI   r|  rj   s               r&   test_adding_a_column_inplacez/TestTableFunctions.test_adding_a_column_inplace  s   ...//999::[huEBBB[hsVLLL[ge444[j666[fSEEE,BB/00 --g66}"&O&O&OOOOOb!!!}"&W&W&WWWWWH...bjAAAb!T*b!U+b!T*b!T*	 '  
 
 ej%0000000r(   c                    t          j        |                     d                    }|d         }t          j        dt	          j        ddg          d          }|j                            |           |j        j        g dk    sJ t          j	                            g dd	
          }t          |j        |          sJ |                                 d S )N
table.fitsr   r   rt   Kr   rj   ri   )rU  V_magr   ))NGC1001333333&@r   )NGC1002g(@rt   )NGC1003gffffff.@r   z	a20,f4,i8rt  )r   r   r   rD   r   rj   rC   r  r,   r   r;   r   )rX   r   rI   rK   rj   s        r&   test_adding_a_column_to_filez/TestTableFunctions.test_adding_a_column_to_file  s    y<0011Qks"(Aq6*:*:3GGGc"""}"&>&>&>>>>>NNN  
 
 ej%00000

r(   c           	      .   t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        d
d          }t          j        dd          }t          j        ddg d          }t          j        |||||g          }t          j                            |          }	|	j        j        g dk    sJ |	j        	                    d           |	j        j        g dk    sJ t          j        g dt           j
                  }
t           j                            ddd|
fddd|
fddd|
fddd|
fgd           }t          |	j        |          sJ |	j        	                    d           |	j        	                    d
           |	j        j        ddgk    sJ t           j                            d|
fd|
fd|
fd|
fgd!           }t          |	j        |          sJ d S )"NrK  rP  rU  rV  rh   rW  r   rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  r  r  rr  rf   rQ  rL  r   rR  rM  rS  rN  rT  rO  za10,u4,a10,5f4rt  za10,5f4)r   rj   r   rD   r   rW   r   rC   r,   del_colr   r   r;   r   r  s               r&   test_removing_a_column_inplacez1TestTableFunctions.test_removing_a_column_inplace   sH   ...//999::[huEBBB[hsVLLL[ge444[j666[fSEEE,BB344 --g66}"&W&W&WWWWWf%%%}"&O&O&OOOOOH...bjAAAb!$b!$b!$b!$	 %  
 
 ej%00000h'''g&&&}"x&<<<<<a[61+{VQK@)  
 
 ej%0000000r(   c                 Z   t          j        |                     d                    }|d         }|j                            d           |j        j        dgk    sJ t          j                            g dd          }t          |j        |          sJ |
                                 d S )Nr  r   r  rU  ))r  )r  )r  a20rt  )r   r   r   rC   r  r,   r   r   rj   r;   r   )rX   r   rI   rj   s       r&    test_removing_a_column_from_filez3TestTableFunctions.test_removing_a_column_from_fileF  s    y<0011Qg&&&}"xj0000GGGQVWWej%00000

r(   c                    t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        d
d          }t          j        dd          }t          j        ddg d          }t          j        |||||g          }t          j                            |          }	|	                    |                     d                     t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        dd          }t          j        dd          }t          j        ddg d          }t          j        |||||g          }t          j                            |          }	|	                    |                     d                     t          j	        |                     d                    }
t          j	        |                     d                    }t          j                            |
d         j
        |d         j
        z             }t          j        g dt           j                  }t           j                            dd d!|d"d#d$d!|d%f
d&d'd!|d%d(d)d!|d"f
d*d+d!|d"d,d-d!|d%f
d.d/d!|d"d0d1d!|d%f
gd23          }t          |j        |          sJ |                    |                     d4                     d5|j        d6         d<   |j        j        j        d         d6         d5k    sJ |j        j        j
        d         j        d6         d5k    sJ |j
        j        d         d6         d5k    sJ |j
        j
        d         j        d6         d5k    sJ |j        d6         d         d5k    sJ d7|j        j        j        d         d6<   |j        j        j        d         d6         d7k    sJ |j        j        j
        d         j        d6         d7k    sJ |j
        j        d         d6         d7k    sJ |j
        j
        d         j        d6         d7k    sJ |j        d6         d         d7k    sJ d8|j        j        j
        d         j        d6<   |j        j        j        d         d6         d8k    sJ |j        j        j
        d         j        d6         d8k    sJ |j
        j        d         d6         d8k    sJ |j
        j
        d         j        d6         d8k    sJ |j        d6         d         d8k    sJ d9|j
        j        d         d6<   |j        j        j        d         d6         d9k    sJ |j        j        j
        d         j        d6         d9k    sJ |j
        j        d         d6         d9k    sJ |j
        j
        d         j        d6         d9k    sJ |j        d6         d         d9k    sJ d:|j
        j
        d         j        d6<   |j        j        j        d         d6         d:k    sJ |j        j        j
        d         j        d6         d:k    sJ |j
        j        d         d6         d:k    sJ |j
        j
        d         j        d6         d:k    sJ |j        d6         d         d:k    sJ d;}d<dd!dd=d>d?|d!fg}t          j        |                     d4          d%@          |k    sJ t          j	        |                     d4                    }|d         }|j
        j        g dAk    sJ t          j        g dt           j                  }t           j                            dd d!|d"d#d$d!|d%f
d&d'd!|d%d(d)d!|d"f
d*d+d!|d"d,d-d!|d%f
d.d/d!|d"d0d1d!|d%f
gd23          }t          |j        |          sJ d5|j        d6         d<   |j        j        j        d         d6         d5k    sJ |j        j        j
        d         j        d6         d5k    sJ |j
        j        d         d6         d5k    sJ |j
        j
        d         j        d6         d5k    sJ |j        d6         d         d5k    sJ d7|j        j        j        d         d6<   |j        j        j        d         d6         d7k    sJ |j        j        j
        d         j        d6         d7k    sJ |j
        j        d         d6         d7k    sJ |j
        j
        d         j        d6         d7k    sJ |j        d6         d         d7k    sJ d8|j        j        j
        d         j        d6<   |j        j        j        d         d6         d8k    sJ |j        j        j
        d         j        d6         d8k    sJ |j
        j        d         d6         d8k    sJ |j
        j
        d         j        d6         d8k    sJ |j        d6         d         d8k    sJ d9|j
        j        d         d6<   |j        j        j        d         d6         d9k    sJ |j        j        j
        d         j        d6         d9k    sJ |j
        j        d         d6         d9k    sJ |j
        j
        d         j        d6         d9k    sJ |j        d6         d         d9k    sJ d:|j
        j
        d         j        d6<   |j        j        j        d         d6         d:k    sJ |j        j        j
        d         j        d6         d:k    sJ |j
        j        d         d6         d:k    sJ |j
        j
        d         j        d6         d:k    sJ |j        d6         d         d:k    sJ |
                                 |                                 |                                 d S )BNrK  rP  rU  rV  rh   rW  r   rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rh  target1counts1notes1	spectrum1flag1rm  rn  r   rr  rf   rQ  rL  r   Tri  rd  FrR  rM  rj  re  rS  rN  rk  rf  rT  rO  rl  rg  z!a10,u4,a10,5f4,l,a10,u4,a10,5f4,lrt  ro  ru  r   rv  r6  rw  rx  z([10A, J, 10A, 5E, L, 10A, J, 10A, 5E, L]rp  rW      z4R x 10Cr   )
rU  rW  rZ  r]  r_  r  r  r  r  r  )r   rj   r   rD   r   rW   r   r   r   r   rC   r   r   r;   r   r;  r<  r   r,   r   )rX   rW  r,   r   r   r   r   r   rz  rI   ru   rw   r   r|  rj   columns_infor   r   s                     r&   test_merge_tablesz$TestTableFunctions.test_merge_tablesO  s   ...//999::[huEBBB[hsVLLL[ge444[j666[fSEEE,BB344 --g66dii..///...//999::[iUCCC[i$fMMM[hu555[k$777[gcFFF,BB344 --g66dii../// Ytyy//00Ytyy//00++BqEMBqEM,IJJH...bjAAAb!T63AuEb!UFCQEb!T63AuEb!T63AuE	 8  
 
 ch.....DIIo../// Ax (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555x{1~$$$$*-!!$Q'x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555x{1~$$$$03!!$*1-x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555x{1~$$$$$&Aq!x (+A."4444x (+1!4::::{"1%a(B....{"1%+A."4444x{1~####*,A$Q'x (+A."4444x (+1!4::::{"1%a(B....{"1%+A."4444x{1~####A:A}b*lBG

 y?33EBBBdJJJJy?33441g{  %
 %
 %
 
 
 
 
 H...bjAAAb!T63AuEb!UFCQEb!T63AuEb!T63AuE	 8  
 
 ch..... Ax (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555x{1~$$$$*-!!$Q'x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555x{1~$$$$03!!$*1-x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555x{1~$$$$$&Aq!x (+A."4444x (+1!4::::{"1%a(B....{"1%+A."4444x{1~####*,A$Q'x (+A."4444x (+1!4::::{"1%a(B....{"1%+A."4444x{1~####









r(   c           
      J   dddd}t          j        t          t          g dg dg d                    dt          fd	d
t
          fg          }t          j        |          }|j        D ]}||j	                 |_
        |                    |                     d          d           t          j        |                     d                    5 }|d         j        }|d         dk    sJ |d         dk    sJ |d         dk    sJ 	 ddd           dS # 1 swxY w Y   dS )zRegression test for https://github.com/astropy/astropy/issues/996

        This just tests one particular use case, but it should apply pretty
        well to other similar cases.
        rt   r   r   r   r   cr   rt   rm   rn   )r   r   r  d)r   rB  @g!@r   )r   S1r  rf   r   	test.fitsTr   r   TNULL1TNULL2TNULL3N)r   rj   listzipr&  floatr   rW   rC   r   r   r   r   r   rT   )rX   NULLSr   r   rK   r   rT   s          r&   test_modify_column_attributesz0TestTableFunctions.test_modify_column_attributes  s    c,,x\\\#7#7#79M9M9MNNOO:{S%L9
 
 

 $'''9 	' 	'CSXCHH			$))K((D	999Ytyy--.. 	+$!W^F(#q(((((#s****(#s*****		+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   8DDDc                    dt           dffdt           dfdfg}t          j        d|          }dd	g|d<   g d
|d         d<   g d|d         d<   t          |          }t	          j        |                     d          |           t	          j        |                     d                    }|d         j        |d         j        k    sJ |d         j        |d         j        k    sJ t          j	        |d         |d         k              sJ d|d          d|d                      t          j	        |d         |d         k              sJ d|d          d|d                      t	          j
                    }t	          j        |          }t	          j        ||g          }|                    |                     d                     t	          j        |                     d                    }|d         j        }|                                 |d         j        |d         j        k    sJ |d         j        |d         j        k    sJ t          j	        |d         |d         k              sJ d|d          d|d                      t          j	        |d         |d         k              sJ d|d          d|d                      |                    |                     d                     t          j        |                     d          d          }	|d         j        |	d         j        k    sJ |d         j        |	d         j        k    sJ t          j	        |d         |	d         k              sJ d|d          d|	d                      t          j	        |d         |	d         k              sJ d|d          d|	d                      dS )zRegression test for https://github.com/astropy/astropy/issues/5280
        and https://github.com/astropy/astropy/issues/5287

        multidimentional tables can now be written with the correct TDIM.
        Author: Stephen Bailey.
        r   ro   yrm   )rn   rt   rf   abcderq   )ABCDEF123r   )rz   YZPQR999r   r  zx: z != zy: 
test2.fits
test3.fitsF)character_as_bytesN)r   r   zerosr   r   r   r   getdatar   r   rV   rW   rU   r   r   r   writer   )
rX   r   r   tabledxhdu0hdu1hxfxtxs
             r&   0test_multidimension_table_from_numpy_rec_columnszCTestTableFunctions.test_multidimension_table_from_numpy_rec_columns  s    3(O3(D!
 x'''e$S	000S	!000S	!d 	TYY{++T222\$))K0011Cy"S'-////Cy"S'-////vd3i2c7*++KK-K49-K-K"S'-K-KKKKvd3i2c7*++KK-K49-K-K"S'-K-KKKK   %%\4,''


499\**+++Ytyy..//UZ



Cy"S'-////Cy"S'-////vd3i2c7*++KK-K49-K-K"S'-K-KKKKvd3i2c7*++KK-K49-K-K"S'-K-KKKK 	DIIl++,,,Z		,//EJJJSz2c7=0000Sz2c7=0000veCjBsG+,,MM.ME#J.M.MBsG.M.MMMMveCjBsG+,,MM.ME#J.M.MBsG.M.MMMMMMr(   c                 z   t          j        |                     d                    }|d         j        }|                    d          dk    }||         }t          j        |          }|                    |                     d                     t          j        |                     d                    }d}t          j        |t          |j                            sJ t          j        |t          |d         j                            sJ |
                                 |
                                 d S )Nr  r   r     ro  z<\[\('NGC1002',\s+12.3[0-9]*\) \(\'NGC1003\',\s+15.[0-9]+\)\])r   r   r   r/   rW   r   r   rematchr   r   )rX   r   tbdatamask	newtbdatar   r   expects           r&   test_mask_arrayz"TestTableFunctions.test_mask_array7  s    Idii--..1||G$$r)4L	y))DIIo..///y?3344 QxCH.....xDGL 1 122222				

r(   c                 &	   t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        d
d          }t          j        dd          }t          j        ddg d          }t          j        |||||g          }t          j                            |          }	|	                    |                     d                     t          j	        |                     d                    }
|
d         j
        d         }|d         dk    sJ |dd         \  }}}||d         k    sJ |dk    sJ |t          j        g dt           j                  k                                    sJ d|d<   |d         dk    sJ d|d<   |d         dk    sJ |dd         d         dk    sJ t          j        t          d |           d|dd         d<   |dd         d         dk    sJ |d         dk    sJ d|dd         d<   |dd         d         dk    sJ d|dd         d<   |dd         d         dk    sJ d |dd         d d d!         d!<   |dd         d         d k    sJ d|ddd         d<   |dd         d         dk    sJ t          j        t          d" |           |dd                             d          dk    sJ |dd                             d          dk    sJ t          j        t          |dd         j        d           |dd                             dd            |dd                             d          d k    sJ t          j        t          |dd         j        dd#           |
d         j
        j        j        d         d         d k    sJ |
d         j
        j        j        d         j        d         d k    sJ |
d         j        j        d         d         d k    sJ |
d         j        j        d         j        d         d k    sJ |
d         j
        d         d         d k    sJ |
                                 d S )$NrK  rP  rU  rV  rh   rW  r   rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  r   rt   rN  rn   r   rr  rf   i6  i;  c                 "    | dd         d         S Nr   rn   r_  r>   rs    r&   <lambda>z5TestTableFunctions.test_slice_a_row.<locals>.<lambda>d      !AaC&. r(   ru  i  r   r7  c                 "    | dd         d         S r  r>   r  s    r&   r  z5TestTableFunctions.test_slice_a_row.<locals>.<lambda>u  r  r(   F)r   rj   r   rD   r   rW   r   r   r   r   r   r   r   pytestraisesKeyErrorr/   setfieldr;  r<  rC   r   )rX   rW  r,   r   r   r   r   r   rz  rI   ru   r:   r   r   r  s                  r&   test_slice_a_rowz#TestTableFunctions.test_slice_a_rowI  s   ...//999::[huEBBB[hsVLLL[ge444[j666[fSEEE,BB344 --g66dii..///Ytyy//00ejm8}####ac(1aF1I~~~~BwwwwRX777rzJJJJOOQQQQQH8}####A8}####1Q3x!S((((h 8 8#>>> AaC1Q3x!S((((8}####AaC1Q3x!S(((( AaC1Q3x!S(((( !AaC2r1Q3x!S((((AaE
11Q3x!S((((h 8 8#>>>1Q3x~~a  C''''1Q3x~~h''3....hAaC777AaC(C(((1Q3x~~a  C''''hAaC 165AAA!uz"*1-a0C7777!uz"*1-3A6#====!u}$Q'*c1111!u}$Q'-a0C7777!uz!}Q3&&&&





r(   c                    t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        d
d          }t          j        dd          }t          j        ddg d          }t          j        |||||g          }t          j                            |          }	|	                    |                     d                     t          j	        |                     d                    }
t          |
d         j        d                   dk    sJ t          |
d         j        d         dd                   dk    sJ t          |
d         j        d         dd                   dk    sJ t          |
d         j        d         dd                   dk    sJ t          |
d         j        d         dd                   dk    sJ t          |
d         j        d         dd                   dk    sJ t          |
d         j        d         dd                   dk    sJ t          |
d         j        d         dd                   dk    sJ t          |
d         j        d         dd                   dk    sJ |
                                 d S )NrK  rP  rU  rV  rh   rW  r   rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  r   r   ro   rn   r   r   rm   )r   rj   r   rD   r   rW   r   r   r   r   r+   r   r   rX   rW  r,   r   r   r   r   r   rz  rI   ru   s              r&   test_fits_record_lenz'TestTableFunctions.test_fits_record_len  s   ...//999::[huEBBB[hsVLLL[ge444[j666[fSEEE,BB344 --g66dii..///Ytyy//002a5:a=!!Q&&&&2a5:a=1%&&!++++2a5:a=1%&&!++++2a5:a=1%&&!++++2a5:a=1%&&!++++2a5:a=1%&&!++++2a5:a=1%&&!++++2a5:a=1%&&!++++2a5:a=1%&&!++++





r(   c                 4   t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        d
d          }t          j        dd          }t          j        ddg d          }t          j        |||||g          }t          j                            |          }	t          j        dd          }t          j        ddd          }t          j        d
d          }t          j        dd          }t          j        dd          }t          j        |||||g          }t          j                            |d          }
|	j        d         |
j        d<   |	j        d         |
j        d<   dddt          j        g dt           j                  df|
j        d<   dd dt          j        g d!t           j                  dg|
j        d<   t          |
j        j
        j        d         j                  t          |
j        j
        j        d                   k    sJ t          |
j        j
        j        d         j                  t          |
j        j        d         j                  k    sJ t          |
j        j
        j        d         j                  t          |
j        j        d                   k    sJ |
j        d         d"         dk    sJ |
j        j
        j        d"         d         dk    sJ |
j        j
        j        d"         j        d         dk    sJ |
j        j        d"         d         dk    sJ |
j        j        d"         j        d         dk    sJ |
j        j        d         j        d         dk    sJ |
j        j        d         j        d         d#k    sJ |
j        j        d         j        d         t          j        g d$t           j                  k                                    sJ t          |
j        j        d         j        d         t           j        k    x}t           t           j        f          r|sJ |
j        d         d"         d%k    sJ |
j        j
        j        d"         d         d%k    sJ |
j        j
        j        d"         j        d         d%k    sJ |
j        j        d"         d         d%k    sJ |
j        j        d"         j        d         d%k    sJ |
j        j        d         j        d         dk    sJ |
j        j        d         j        d         dk    sJ |
j        j        d         j        d         t          j        g d!t           j                  k                                    sJ t          |
j        j        d         j        d         t           j        k    x}t           t           j        f          r|sJ d S )&NrK  rP  rU  rV  rh   rW  r   rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  r   ri   r   ro   r   r   rm   rn   rQ  rL  zA Note)皙?皙@ffffff
@g@g      @rf   Trt   JIM133r
  r  r  r        @r   r   rr  !   )r   rj   r   rD   r   rW   r   r   r   r:  r;  rC   r<  r   r0   True_r   bool_)rX   rW  r,   r   r   r   r   r   rz  r  rI   rA   s               r&   test_add_data_by_rowsz(TestTableFunctions.test_add_data_by_rows  s   ...//999::[huEBBB[hsVLLL[ge444[j666[fSEEE,BB344!..w77[hu555[hs>>>[ge444[j666[fS111,BB344 --gQ-?? A
1A
1 H...bjAAA

1 H...bjAAA

1 %*%-a06772J'*<
 <
 
 
 
 
 %*%-a06772M!!$*<
 <
 
 
 
 
 %*%-a06772em>STU>V;W;WWWWWz!}Q3&&&&z"*1-a0C7777z"*1-3A6#====}$Q'*c1111}$Q'-a0C7777}$Q'-a0F::::}$Q'-a0B6666M!!$*1-x111DDDE
#%%	 	 	
 m+A.4Q728CDtRXFV 	
 		
 	
 	
 z!}Q2%%%%z"*1-a0B6666z"*1-3A6"<<<<}$Q'*b0000}$Q'-a0B6666}$Q'-a0F::::}$Q'-a0H<<<<M!!$*1-x111DDDE
#%%	 	 	
 m+A.4Q728CDtRXFV 	
 		
 	
 	
 	
 	
r(   c                 l   t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        d
d          }t          j        dd          }t          j        ddg d          }t          j        |||||g          }t          j                            |          }	t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        d
d          }t          j        dd          }t          j        ddg d          }t          j        |||||g          }t          j                            |          }
t          j        g dt           j                  |
j        d         d<   t          j                            |	j        d          }|
j        |j        dd <   t          |j        j
        j        d         j                  t          |j        j
        j        d                   k    sJ t          |j        j
        j        d         j                  t          |j        j        d         j                  k    sJ t          |j        j
        j        d         j                  t          |j        j        d                   k    sJ |j        d         d         dk    sJ |j        j
        j        d         d         dk    sJ |j        j
        j        d         j        d         dk    sJ |j        j        d         d         dk    sJ |j        j        d         j        d         dk    sJ |j        j        d         j        d         dk    sJ |j        j        d         j        d         d k    sJ |j        j        d         j        d         t          j        g d!t           j                  k                                    sJ t          |j        j        d         j        d         t           j        k    x}t           t           j        f          r|sJ |j        d         d         d"k    sJ |j        j
        j        d         d         d"k    sJ |j        j
        j        d         j        d         d"k    sJ |j        j        d         d         d"k    sJ |j        j        d         j        d         d"k    sJ |j        j        d         j        d         d#k    sJ |j        j        d         j        d         d k    sJ |j        j        d         j        d         t          j        g dt           j                  k                                    sJ t          |j        j        d         j        d         t           j        k    x}t           t           j        f          r|sJ |j        j        d         j        d$         dk    sJ |j        j        d         j        d$         d k    sJ |j        j        d         j        d$         d k    sJ |j        j        d         j        d$         t          j        g d!t           j                  k                                    sJ t          |j        j        d         j        d$         t           j        k    x}t           t           j        f          r|sJ d S )%NrK  rP  rU  rV  rh   rW  r   rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  )p      l   u   rh  rm  r  rf   r   rm   	   r   rn   r   rL  rQ  rt   r   rr  r  ri     )r   rj   r   rD   r   rW   r   r   r   r:  r;  rC   r<  r   r0   r  r   r  False_)rX   rW  r,   r   r   r   r   r   rz  r  rI   tbhdu2rA   s                r&   "test_assign_multiple_rows_to_tablez5TestTableFunctions.test_assign_multiple_rows_to_table  s   ...//999::[huEBBB[hsVLLL[ge444[j666[fSEEE,BB344!..w77...//999::[huEBBB[hsVLLL[ge444[j666[fSEEE,BB344 --g668$=$=$=RZPPP
1a!..v{!.DD
  *ABB &+&.q1788BK (+=
 =
 
 
 
 
 &+&.q1788BN"1%+=
 =
 
 
 
 
 &+&.q1788BN"1%=
 =
 
 
 
 
 {1~a C''''{#+A.q1S8888{#+A.4Q73>>>>~%a(+s2222~%a(.q1S8888~%a(.q1V;;;;~%a(.q1R7777N"1%+A.x111DDDE
#%%	 	 	
 n,Q/5a8BHDEbhGW 	
 		
 	
 	
 {1~a C''''{#+A.q1S8888{#+A.4Q73>>>>~%a(+s2222~%a(.q1S8888~%a(.q1V;;;;~%a(.q1R7777N"1%+A.x111DDDE
#%%	 	 	
 n,Q/5a8BIEFrxHX 	
 		
 	
 	
 ~%a(.q1Q6666~%a(.q1R7777~%a(.q1R7777N"1%+A.x111DDDE
#%%	 	 	
 n,Q/5a8BIEFrxHX 	
 		
 	
 	
 	
 	
r(   c                    t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        d
d          }t          j        dd          }t          j        ddg d          }t          j        |||||g          }t          j                            |          }	t          |j        d                   t          |          k    sJ t          |j        d         j                  t          |          k    sJ t          |j        d         j                  t          |j                  k    sJ t          |j        d         j                  t          |j	        d                   k    sJ t          |          t          |	j                  k    sJ t          |j        d                   t          |	j        j        d                   k    sJ t          |j        d         j                  t          |	j        j        d         j                  k    sJ t          |	j                  t          |	j
        j                  k    sJ t          |	j
        j        j        d         j                  t          |	j
        j        j	        d                   k    sJ t          |	j
        j        j        d         j                  t          |	j        j        d         j                  k    sJ t          |	j
        j        j        d         j                  t          |	j        j	        d                   k    sJ |	                    |                     d                     t          j        |                     d                    }
d|
d         j
        d         d<   |
d         j
        d         d         dk    sJ |
d         j
        j        j	        d         d         dk    sJ |
d         j
        j        j        d         j        d         dk    sJ |
d         j        j	        d         d         dk    sJ |
d         j        j        d         j        d         dk    sJ d|
d         j
        j        j	        d         d<   |
d         j
        d         d         dk    sJ |
d         j
        j        j	        d         d         dk    sJ |
d         j
        j        j        d         j        d         dk    sJ |
d         j        j	        d         d         dk    sJ |
d         j        j        d         j        d         dk    sJ d|
d         j
        j        j        d         j        d<   |
d         j
        d         d         dk    sJ |
d         j
        j        j	        d         d         dk    sJ |
d         j
        j        j        d         j        d         dk    sJ |
d         j        j	        d         d         dk    sJ |
d         j        j        d         j        d         dk    sJ d|
d         j        j	        d         d<   |
d         j
        d         d         dk    sJ |
d         j
        j        j	        d         d         dk    sJ |
d         j
        j        j        d         j        d         dk    sJ |
d         j        j	        d         d         dk    sJ |
d         j        j        d         j        d         dk    sJ d|
d         j        j        d         j        d<   |
d         j
        d         d         dk    sJ |
d         j
        j        j	        d         d         dk    sJ |
d         j
        j        j        d         j        d         dk    sJ |
d         j        j	        d         d         dk    sJ |
d         j        j        d         j        d         dk    sJ |
                                 d S )NrK  rP  rU  rV  rh   rW  r   rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  r   rb  r5  r   r6  r7  r8  r9  )r   rj   r   rD   r   rW   r   r:  rC   r<  r   r;  r   r   r   r   r  s              r&   test_verify_data_referencesz.TestTableFunctions.test_verify_data_referencesX  s   ...//999::[huEBBB[hsVLLL[ge444[j666[fSEEE,BB344 --g66 '/!$%%B//// '/!$*++r%yy8888 '/!$*++r"(||;;;;'/!$*++r'/!2D/E/EEEEE '{{b////// '/!$%%EM,A!,D)E)EEEEE '/!$*++r%-2G2J2P/Q/QQQQQ %-  Buz':$;$;;;;; %*%-a06772J'*<
 <
 
 
 
 
 %*%-a06772M!!$*<
 <
 
 
 
 
 %*%-a06772em>STU>V;W;WWWWWdii..///Ytyy//001
1a!uz!}Q3&&&&!uz"*1-a0C7777!uz"*1-3A6#====!u}$Q'*c1111!u}$Q'-a0C7777,/1
#A&q)!uz!}Q3&&&&!uz"*1-a0C7777!uz"*1-3A6#====!u}$Q'*c1111!u}$Q'-a0C7777251
#A&,Q/!uz!}Q3&&&&!uz"*1-a0C7777!uz"*1-3A6#====!u}$Q'*c1111!u}$Q'-a0C7777&)1a #!uz!}Q3&&&&!uz"*1-a0C7777!uz"*1-3A6#====!u}$Q'*c1111!u}$Q'-a0C7777,/1a &q)!uz!}Q3&&&&!uz"*1-a0C7777!uz"*1-3A6#====!u}$Q'*c1111!u}$Q'-a0C7777





r(   c                    t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        d
d          }t          j        dd          }t          j        ddg d          }t          j        |||||g          }t          j                            |          }	t          j                            |	j                            t           j	                            }
t          |
j        j        j        d         j                  t          |
j        j        j        d                   k    sJ t          |
j        j        j        d         j                  t          |
j        j        d         j                  k    sJ t          |
j        j        j        d         j                  t          |
j        j        d                   k    sJ d|
j        d         d<   |
j        d         d         dk    sJ |
j        j        j        d         d         dk    sJ |
j        j        j        d         j        d         dk    sJ |
j        j        d         d         dk    sJ |
j        j        d         j        d         dk    sJ d|
j        j        j        d         d<   |
j        d         d         dk    sJ |
j        j        j        d         d         dk    sJ |
j        j        j        d         j        d         dk    sJ |
j        j        d         d         dk    sJ |
j        j        d         j        d         dk    sJ d|
j        j        j        d         j        d<   |
j        d         d         dk    sJ |
j        j        j        d         d         dk    sJ |
j        j        j        d         j        d         dk    sJ |
j        j        d         d         dk    sJ |
j        j        d         j        d         dk    sJ d|
j        j        d         d<   |
j        d         d         dk    sJ |
j        j        j        d         d         dk    sJ |
j        j        j        d         j        d         dk    sJ |
j        j        d         d         dk    sJ |
j        j        d         j        d         dk    sJ d|
j        j        d         j        d<   |
j        d         d         dk    sJ |
j        j        j        d         d         dk    sJ |
j        j        j        d         j        d         dk    sJ |
j        j        d         d         dk    sJ |
j        j        d         j        d         dk    sJ |
                    |                     d                     t          j        |                     d                    }d|d         j        d         d<   |d         j        d         d         dk    sJ |d         j        j        j        d         d         dk    sJ |d         j        j        j        d         j        d         dk    sJ |d         j        j        d         d         dk    sJ |d         j        j        d         j        d         dk    sJ d|d         j        j        j        d         d<   |d         j        d         d         dk    sJ |d         j        j        j        d         d         dk    sJ |d         j        j        j        d         j        d         dk    sJ |d         j        j        d         d         dk    sJ |d         j        j        d         j        d         dk    sJ d|d         j        j        j        d         j        d<   |d         j        d         d         dk    sJ |d         j        j        j        d         d         dk    sJ |d         j        j        j        d         j        d         dk    sJ |d         j        j        d         d         dk    sJ |d         j        j        d         j        d         dk    sJ d|d         j        j        d         d<   |d         j        d         d         dk    sJ |d         j        j        j        d         d         dk    sJ |d         j        j        j        d         j        d         dk    sJ |d         j        j        d         d         dk    sJ |d         j        j        d         j        d         dk    sJ d|d         j        j        d         j        d<   |d         j        d         d         dk    sJ |d         j        j        j        d         d         dk    sJ |d         j        j        j        d         j        d         dk    sJ |d         j        j        d         d         dk    sJ |d         j        j        d         j        d         dk    sJ |                                 d S )NrK  rP  rU  rV  rh   rW  r   rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  r   r5  r   r6  r7  r8  r9  rb  )r   rj   r   rD   r   rW   r   r   r   r   r:  r;  rC   r<  r   r   r   r   )rX   rW  r,   r   r   r   r   r   rz  rI   r  ru   s               r&   test_new_table_with_ndarrayz.TestTableFunctions.test_new_table_with_ndarray  s
   ...//999::[huEBBB[hsVLLL[ge444[j666[fSEEE,BB344 --g66!..uzrz/J/JKK &+&.q1788BK (+=
 =
 
 
 
 
 &+&.q1788BN"1%+=
 =
 
 
 
 
 &+&.q1788BN"1%=
 =
 
 
 
 
  Aq{1~a C''''{#+A.q1S8888{#+A.4Q73>>>>~%a(+s2222~%a(.q1S8888-0$Q'*{1~a C''''{#+A.q1S8888{#+A.4Q73>>>>~%a(+s2222~%a(.q1S888836$Q'-a0{1~a C''''{#+A.q1S8888{#+A.4Q73>>>>~%a(+s2222~%a(.q1S8888'*q!!${1~a C''''{#+A.q1S8888{#+A.4Q73>>>>~%a(+s2222~%a(.q1S8888-0q!'*{1~a C''''{#+A.q1S8888{#+A.4Q73>>>>~%a(+s2222~%a(.q1S8888tyy//000Ytyy//001
1a!uz!}Q3&&&&!uz"*1-a0C7777!uz"*1-3A6#====!u}$Q'*c1111!u}$Q'-a0C7777,/1
#A&q)!uz!}Q3&&&&!uz"*1-a0C7777!uz"*1-3A6#====!u}$Q'*c1111!u}$Q'-a0C7777251
#A&,Q/!uz!}Q3&&&&!uz"*1-a0C7777!uz"*1-3A6#====!u}$Q'*c1111!u}$Q'-a0C7777&)1a #!uz!}Q3&&&&!uz"*1-a0C7777!uz"*1-3A6#====!u}$Q'*c1111!u}$Q'-a0C7777,/1a &q)!uz!}Q3&&&&!uz"*1-a0C7777!uz"*1-3A6#====!u}$Q'*c1111!u}$Q'-a0C7777





r(   c                 *   t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        d
d          }t          j        dd          }t          j        ddg d          }t          j        |||||g          }t          j                            |          }	d|	j        d         d<   |	j        d         d         dk    sJ |	j        j        j	        d         d         dk    sJ |	j        j        j
        d         j        d         dk    sJ |	j
        j	        d         d         dk    sJ |	j
        j
        d         j        d         dk    sJ d|	j        j        j	        d         d<   |	j        d         d         dk    sJ |	j        j        j	        d         d         dk    sJ |	j        j        j
        d         j        d         dk    sJ |	j
        j	        d         d         dk    sJ |	j
        j
        d         j        d         dk    sJ d|	j        j        j
        d         j        d<   |	j        d         d         dk    sJ |	j        j        j	        d         d         dk    sJ |	j        j        j
        d         j        d         dk    sJ |	j
        j	        d         d         dk    sJ |	j
        j
        d         j        d         dk    sJ d|	j
        j	        d         d<   |	j        d         d         dk    sJ |	j        j        j	        d         d         dk    sJ |	j        j        j
        d         j        d         dk    sJ |	j
        j	        d         d         dk    sJ |	j
        j
        d         j        d         dk    sJ d|	j
        j
        d         j        d<   |	j        d         d         dk    sJ |	j        j        j	        d         d         dk    sJ |	j        j        j
        d         j        d         dk    sJ |	j
        j	        d         d         dk    sJ |	j
        j
        d         j        d         dk    sJ d|	j
        j
        d         j        d<   |	                    |                     d                     t          j        |                     d                    }
d|
d         j        d         d<   |
d         j        }|
d         j        d         d         dk    sJ |
d         j        j        j	        d         d         dk    sJ |
d         j        j        j
        d         j        d         dk    sJ |
d         j
        j	        d         d         dk    sJ |
d         j
        j
        d         j        d         dk    sJ |d         d         dk    sJ |j        j	        d         d         dk    sJ |j        j
        d         j        d         dk    sJ d|j        j
        d         j        d<   t          j                            |          }d}|j        D ]}t          t          |                    D ]s}t!          ||         t           j                  r2||         |	j        |         |         k                                    sJ T||         |	j        |         |         k    sJ t|dz   }d|j        d         d<   |
d         j        d         d         dk    sJ |
d         j        j        j	        d         d         dk    sJ |
d         j        j        j
        d         j        d         dk    sJ |
d         j
        j	        d         d         dk    sJ |
d         j
        j
        d         j        d         dk    sJ |d         d         dk    sJ |j        j	        d         d         dk    sJ |j        j
        d         j        d         dk    sJ |j        d         d         dk    sJ |j        j        j	        d         d         dk    sJ |j        j        j
        d         j        d         dk    sJ |j
        j	        d         d         dk    sJ |j
        j
        d         j        d         dk    sJ d|
d         j        d         d<   |
d         j        d         d         dk    sJ |
d         j        j        j	        d         d         dk    sJ |
d         j        j        j
        d         j        d         dk    sJ |
d         j
        j	        d         d         dk    sJ |
d         j
        j
        d         j        d         dk    sJ |d         d         dk    sJ |j        j	        d         d         dk    sJ |j        j
        d         j        d         dk    sJ |j        d         d         dk    sJ |j        j        j	        d         d         dk    sJ |j        j        j
        d         j        d         dk    sJ |j
        j	        d         d         dk    sJ |j
        j
        d         j        d         dk    sJ d|j        j        j	        d         d<   |
d         j        d         d         dk    sJ |
d         j        j        j	        d         d         dk    sJ |
d         j        j        j
        d         j        d         dk    sJ |
d         j
        j	        d         d         dk    sJ |
d         j
        j
        d         j        d         dk    sJ |d         d         dk    sJ |j        j	        d         d         dk    sJ |j        j
        d         j        d         dk    sJ |j        d         d         dk    sJ |j        j        j	        d         d         dk    sJ |j        j        j
        d         j        d         dk    sJ |j
        j	        d         d         dk    sJ |j
        j
        d         j        d         dk    sJ |
                                 d S )NrK  rP  rU  rV  rh   rW  r   rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  r5  r   r   r6  r7  r8  r9  rL  rb  
   i  )r   rj   r   rD   r   rW   r   r   r;  r<  rC   r   r   r   r.   r+   r0   r   r   r   )rX   rW  r,   r   r   r   r   r   rz  rI   ru   frr  r7   r:   js                   r&   test_new_table_with_fits_recz/TestTableFunctions.test_new_table_with_fits_rec  sX   ...//999::[huEBBB[hsVLLL[ge444[j666[fSEEE,BB344 --g66
1az!}Q3&&&&z"*1-a0C7777z"*1-3A6#====}$Q'*c1111}$Q'-a0C7777,/
#A&q)z!}Q3&&&&z"*1-a0C7777z"*1-3A6#====}$Q'*c1111}$Q'-a0C777725
#A&,Q/z!}Q3&&&&z"*1-a0C7777z"*1-3A6#====}$Q'*c1111}$Q'-a0C7777&)a #z!}Q3&&&&z"*1-a0C7777z"*1-3A6#====}$Q'*c1111}$Q'-a0C7777,/a &q)z!}Q3&&&&z"*1-a0C7777z"*1-3A6#====}$Q'*c1111}$Q'-a0C7777,/a &q)dii..///Ytyy//001
1aUZ!uz!}Q1$$$$!uz"*1-a0A5555!uz"*1-3A6!;;;;!u}$Q'*a////!u}$Q'-a0A5555!uQx1}}}}{"1%a(A----{"1%+A.!3333*-A$Q'!..r22; 	 	C3s88__ 6 6c!fbj11 6FejmA&66;;======q6UZ]1%555555AAAAq!uz!}Q3&&&&!uz"*1-a0C7777!uz"*1-3A6#====!u}$Q'*c1111!u}$Q'-a0C7777!uQx3{"1%a(C////{"1%+A.#5555{1~a C''''{#+A.q1S8888{#+A.4Q73>>>>~%a(+s2222~%a(.q1S88881
1a!uz!}Q2%%%%!uz"*1-a0B6666!uz"*1-3A6"<<<<!u}$Q'*b0000!u}$Q'-a0B6666!uQx2~~~~{"1%a(B....{"1%+A."4444{1~a C''''{#+A.q1S8888{#+A.4Q73>>>>~%a(+s2222~%a(.q1S8888-0$Q'*!uz!}Q2%%%%!uz"*1-a0B6666!uz"*1-3A6"<<<<!u}$Q'*b0000!u}$Q'-a0B6666!uQx2~~~~{"1%a(B....{"1%+A."4444{1~a C''''{#+A.q1S8888{#+A.4Q73>>>>~%a(+s2222~%a(.q1S8888





r(   c                 :   t          j        g d          }t          j        g d          }t          j        dd|          }t          j        ddd|	          }t          j        d
d          }t          j        dd          }t          j        ddg d          }t          j        |||||g          }t          j                            |          }	t          j        |	j                  }
t          |
j        j	        j
        d         j                  t          |
j        j	        j        d                   k    sJ t          |
j        j	        j
        d         j                  t          |
j
        j
        d         j                  k    sJ t          |
j        j	        j
        d         j                  t          |
j
        j        d                   k    sJ t          |	j        j	        j
        d         j                  t          |
j        j	        j        d                   k    sJ d|
j        d         d<   |
j        d         d         dk    sJ |
j        j	        j        d         d         dk    sJ |
j        j	        j
        d         j        d         dk    sJ |
j
        j        d         d         dk    sJ |
j
        j
        d         j        d         dk    sJ |	j        d         d         dk    sJ |	j        j	        j        d         d         dk    sJ |	j        j	        j
        d         j        d         dk    sJ |	j
        j        d         d         dk    sJ |	j
        j
        d         j        d         dk    sJ d|
j        j	        j        d         d<   |
j        d         d         dk    sJ |
j        j	        j        d         d         dk    sJ |
j        j	        j
        d         j        d         dk    sJ |
j
        j        d         d         dk    sJ |
j
        j
        d         j        d         dk    sJ |	j        d         d         dk    sJ |	j        j	        j        d         d         dk    sJ |	j        j	        j
        d         j        d         dk    sJ |	j
        j        d         d         dk    sJ |	j
        j
        d         j        d         dk    sJ d|
j        j	        j
        d         j        d<   |
j        d         d         dk    sJ |
j        j	        j        d         d         dk    sJ |
j        j	        j
        d         j        d         dk    sJ |
j
        j        d         d         dk    sJ |
j
        j
        d         j        d         dk    sJ |	j        d         d         dk    sJ |	j        j	        j        d         d         dk    sJ |	j        j	        j
        d         j        d         dk    sJ |	j
        j        d         d         dk    sJ |	j
        j
        d         j        d         dk    sJ d|
j
        j        d         d<   |
j        d         d         dk    sJ |
j        j	        j        d         d         dk    sJ |
j        j	        j
        d         j        d         dk    sJ |
j
        j        d         d         dk    sJ |
j
        j
        d         j        d         dk    sJ |	j        d         d         dk    sJ |	j        j	        j        d         d         dk    sJ |	j        j	        j
        d         j        d         dk    sJ |	j
        j        d         d         dk    sJ |	j
        j
        d         j        d         dk    sJ d|
j
        j
        d         j        d<   |
j        d         d         dk    sJ |
j        j	        j        d         d         dk    sJ |
j        j	        j
        d         j        d         dk    sJ |
j
        j        d         d         dk    sJ |
j
        j
        d         j        d         dk    sJ |	j        d         d         dk    sJ |	j        j	        j        d         d         dk    sJ |	j        j	        j
        d         j        d         dk    sJ |	j
        j        d         d         dk    sJ |	j
        j
        d         j        d         dk    sJ d S )NrK  rP  rU  rV  rh   rW  r   rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  r   r5  r   r6  r7  r8  r9  )r   rj   r   rD   r   rW   r   r   r:  r;  rC   r<  )rX   rW  r,   r   r   r   r   r   rz  r  r   s              r&   test_bin_table_hdu_constructorz1TestTableFunctions.test_bin_table_hdu_constructor  s	   ...//999::[huEBBB[hsVLLL[ge444[j666[fSEEE,BB344!..w77v{++ #(#+A.455H%a(:
 :
 
 
 
 
 #(#+A.455K"(:
 :
 
 
 
 
 #(#+A.455CK<OPQ<R9S9SSSSS &+&.q1788BH%a(=
 =
 
 
 
 
 Ax{1~$$$$x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555{1~a C''''{#+A.q1S8888{#+A.4Q73>>>>~%a(+s2222~%a(.q1S8888*-!!$Q'x{1~$$$$x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555{1~a C''''{#+A.q1S8888{#+A.4Q73>>>>~%a(+s2222~%a(.q1S888803!!$*1-x{1~$$$$x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555{1~a C''''{#+A.q1S8888{#+A.4Q73>>>>~%a(+s2222~%a(.q1S8888$'Aq!x{1~$$$$x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555{1~a C''''{#+A.q1S8888{#+A.4Q73>>>>~%a(+s2222~%a(.q1S8888*-A$Q'x{1~$$$$x (+A.#5555x (+1!4;;;;{"1%a(C////{"1%+A.#5555{1~a C''''{#+A.q1S8888{#+A.4Q73>>>>~%a(+s2222~%a(.q1S888888r(   c                    t           j        t           j        fD ]} |            }|j        dk    sJ d|j        vsJ d|_        |j        dk    sJ |j        d         dk    sJ  |d          }|j        dk    sJ |j        d         dk    sJ t          j                    }d|d<    ||d          }|j        dk    sJ |j        d         dk    sJ dS )ztestConstructorNameArg

        Passing name='...' to the BinTableHDU and TableHDU constructors
        should set the .name attribute and 'EXTNAME' header keyword, and
        override any name in an existing 'EXTNAME' value.
        r   EXTNAMEFOO)r   EVENTS)rT   r   N)r   rW   r   r   rT   HeaderrX   hduclsr   hdrs       r&   test_constructor_name_argz,TestTableFunctions.test_constructor_name_arg  s    '7 	2 	2F&((C8r>>>>CJ....CH8u$$$$:i(E1111 &e$$$C8u$$$$:i(E1111 +--C%C	N&%000C8u$$$$:i(E11111'	2 	2r(   c                    t           j        t           j        fD ]} |            }|j        dk    sJ d|j        vsJ d|_        |j        dk    sJ |j        d         dk    sJ  |d          }|j        dk    sJ |j        d         dk    sJ t          j                    }d|d<    ||d          }|j        dk    sJ |j        d         dk    sJ d S )	Nr   EXTVERrt   rm   )verrn   ro   )rT   r  )r   rW   r   r  rT   r  r  s       r&   test_constructor_ver_argz+TestTableFunctions.test_constructor_ver_arg  s   '7 	- 	-F&((C7a<<<<3:----CG7a<<<<:h'1,,,, &Q---C7a<<<<:h'1,,,, +--CCM&+++C7a<<<<:h'1,,,,,'	- 	-r(   c                 v    t          j        dddg          }t           j                            |g           dS )z
        Regression test for https://github.com/astropy/astropy/issues/5204
        "Handle unicode FITS BinTable column names on Python 2"
        spamrk   g      E@rh   N)r   rD   rW   r   )rX   rK   s     r&   test_unicode_colnamez'TestTableFunctions.test_unicode_colname2  s;    
 kvc$@@@%%se,,,,,r(   c                    t          j        ddddgddgg          }t          j        |g          }t           j                            |          }|j                            d          d         t          j        ddgt                    k    
                                sJ |j                            d          d         t          j        ddgt                    k    
                                sJ t           j                            |j                  }|j                            d          d         t          j        ddgt                    k    
                                sJ |j                            d          d         t          j        ddgt                    k    
                                sJ d S )	Nr_  2LTFrh   r   rf   r   )r   rD   r   rW   r   r   r/   r   rj   r   r   )rX   r   rz  r  rI   s        r&   !test_bin_table_with_logical_arrayz4TestTableFunctions.test_bin_table_with_logical_array;  s   [fT4-%QU9WXXX,t$$!..w77 Kf%%a(BHdE]$,O,O,OO
#%%	 	 	 Kf%%a(BHeT]$,O,O,OO
#%%	 	 	  --fk:: JV$$Q'28T5M+N+N+NN
#%%	 	 	 JV$$Q'28UDM+N+N+NN
#%%	 	 	 	 	r(   c           	      6   t          j        |                     d                    }|j        |                    d          k                                    sJ |j        |d         k                                    sJ t          j        |                     d                    }dD ]_}t          ||          }||                    |          k                                    sJ |||         k                                    sJ `t          j        |                     d                    }dD ]_}t          ||          }||                    |          k                                    sJ |||         k                                    sJ `t          j        ddt          j	        d	d
gg dgt          j
                            }t           j                            |g          }t          |j        d                   t          |j        j                  k    sJ |j        d         d         |j        j        d         k                                    sJ |j        d         d         |j        j        d         k                                    sJ d S )Nr  r  r_   r   r   )r   r   r   PI()-   8      r     rf   rh   r   r   )r   r  r   r  r/   r   rG   rD   r   rj   object_rW   r   r1   r   )rX   r  rK   r   r  r   s         r&   test_fits_rec_column_accessz.TestTableFunctions.test_fits_rec_column_accessQ  se   dii5566W 5 55::<<<<<w/4466666 dii	2233+ 	/ 	/C63''DFLL---2244444F3K',,...... dii5566 	/ 	/C63''DFLL---2244444F3K',,...... {(RHlll32:FFF
 
 

 ++TF33CHSM""d38:&6&66666a CHJqM16688888a CHJqM1668888888r(   c                    t          j        |                     d                    }|d         }d|j        j        v sJ d|j        j        v sJ d|j        j        j        v sJ |j        d         d         dk    sJ t          |j        d         d         t          j        g dt          j	        	                    sJ |j        d         d
         dk    sJ |j        d         d         dk    sJ |j        d         d         dk    sJ t          |j        d         d         t          j        g dt          j	        	                    sJ |j        d         d
         dk    sJ |j        d         d         dk    sJ |
                    |                     d                     |                                 t          j        |                     d                    }|d         }d|j        j        v sJ d|j        j        v sJ d|j        j        j        v sJ |j        d         d         dk    sJ t          |j        d         d         t          j        g dt          j	        	                    sJ |j        d         d
         dk    sJ |j        d         d         dk    sJ |j        d         d         dk    sJ t          |j        d         d         t          j        g dt          j	        	                    sJ |j        d         d
         dk    sJ |j        d         d         dk    sJ |                                 d S )Nzerowidth.fitsrt   ORBPARMr   ANNAMEzVLA:_W16STABXYZ)g~ϰ=@gs!gzarf   NOSTAr   MNTSTAr  zVPT:_OUT)r   r   r      ro  )r   r   r   rC   r,   r   r'   r   rj   r=  r   r   r   )rX   r   rI   s      r&   !test_table_with_zero_width_columnz4TestTableFunctions.test_table_with_zero_width_columno  s{   y#34455QEM///// EJ,,,,,EJ,22222 z!}X&*4444JqM)$HBBB"*UUU
 
 	
 	
 	
 z!}W%****z!}X&!++++z"~h':5555JrN9%rxrz'R'R'R
 
 	
 	
 	
 z"~g&",,,,z"~h'1,,,,TYY//000

y?3344Q EM/////EJ,,,,,EJ,22222z!}X&*4444JqM)$HBBB"*UUU
 
 	
 	
 	
 z!}W%****z!}X&!++++z"~h':5555JrN9%rxrz'R'R'R
 
 	
 	
 	
 z"~g&",,,,z"~h'1,,,,

r(   c                    g d}d}t          j        ddt          j        |                    }t           j                            |g          }|j                                                            d          |k    sJ |	                    | 
                    d                     t          j        | 
                    d                    5 }|d         j                                                            d          |k    sJ |d         j        d         |k                                    sJ 	 d d d            n# 1 swxY w Y   ~t           j                            |g          }|	                    | 
                    d          d	
           t          j        | 
                    d                    5 }|d         j                                                            d          |                    dd          k    sJ |d         j        d         |k                                    sJ t           j                            |d         j                                                  }d d d            n# 1 swxY w Y   ~|	                    | 
                    d          d	
           t          j        | 
                    d                    5 }|d         j                                                            d          |k    sJ |d         j        d         |k                                    sJ 	 d d d            d S # 1 swxY w Y   d S )N)img1img2img3apz(img1      img2      img3a     p         MEMNAMEr[  rh   zraw-unicode-escapero  r   Tr     )r   rD   r   rj   rW   r   r   tobytesdecoder   r   r   r   r   replacecopy)rX   r   sacolahdur   s         r&   test_string_column_paddingz-TestTableFunctions.test_string_column_padding  s   ***4 	
 {	%yq?Q?QRRR,,dV44y  ""))*>??1DDDDTYY//000Ytyy1122 	8d7<''))001EFF!KKKKGL+q055777777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 }))4&11TYY//4@@@Ytyy1122 	Fd7<''))001EFF!))K K     GL+q05577777#00a1B1B1D1DEED	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F  	TYY//4@@@Ytyy1122 	8d7<''))001EFF!KKKKGL+q055777777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s9   A$EE	E?B4I??JJA$MMMc           
         t           j                            g ddfg ddfg ddfgd          }t          j                            |          }|                    |                     d	                     t          j        |                     d	          d
          5 }d|d         j	        d<   d|d         j	        d<   ddd           n# 1 swxY w Y   t          j        |                     d	                    5 }|d         }|j
                            d          }|j
                            d          }|j        dk    sJ |j        dk    sJ |t          j        ddgddgddggddgddgddggddgddgddggg          k                                    sJ |t          j        ddgddgddgg          k                                    sJ 	 ddd           n# 1 swxY w Y   ~~~~t          j        dd d!g"          }d#|d$<   d%|d&<   t          j        |                     d	          |d'(           t          j        |                     d	                    }|                    d          j        j        d)         d*k    sJ |                    d          j        d+k    sJ t          j        dd d,g"          }d#|d$<   d%|d&<   ~t          j        |                     d	          |d'(           t          j        |                     d	                    }|                    d          j        j        d)         d*k    sJ |                    d          j        d-k    sJ dS ).zv
        Tests the multidimensional column implementation with both numeric
        arrays and string arrays.
        )r   r   rt   rm   rn   ro   row1row1)r   r   r  r  r   r   row2row2)rt   rm   rn   ro   r   r   row3row3z6i4,a8rt  ro  updatemode(2,3)r   TDIM1z(4,2)TDIM2Nr   )rm   rm   rt   rm   rt   rt   rm   rn   ro   r   r   r  r  row1row2row3)r   f4)r8  S5rn   rf   rs   r   okr8  Tr   r  5)rm   rn   )r8  rK  )rn   rm   )rm   rn   rm   )r   r   rj   r   rW   r   r   r   r   rT   r   r/   ry  r   r  r  r   r   )rX   r   r[   r   r   r   r   s          r&   test_multi_dimensional_columnsz1TestTableFunctions.test_multi_dimensional_columns  s    v||###Z0###Z0###Z0
   
 
 ,,T22TYY//000Ytyy11AAA 	.T&-DGN7#&-DGN7#	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.
 Ytyy1122 	d7D##B##B8y((((8v%%%%8Q!Q!Q0Q!Q!Q0Q!Q!Q0  cee	 	 	 bh 0662BVVDTUVVVcee   %	 	 	 	 	 	 	 	 	 	 	 	 	 	 	*  x+~!>???S	S	TYY//FFFFL?3344wwqzz#B'3....wwqzz6)))) x+/B!CDDDS	S	TYY//FFFFL?3344wwqzz#B'3....wwqzz9,,,,,,s%   !!CCC CG##G'*G'c                    t          j        ddgdg          }t          j                            |          }|                    |                     d                     t          j        |                     d                    5 }|d         }|j        	                    d          }|j
        dk    sJ |j        d	         d
k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   rt   )r   r~   r   rf   zonedtable.fitsr   r   )rt   r   rD  z(1))r   rj   r   rW   r   r   r   r   r   r/   ry  rT   )rX   r   r[   r   r  s        r&   test_oned_array_single_elementz1TestTableFunctions.test_oned_array_single_element  s   xt.?-@BBB,,T22TYY/00111Ytyy!12233 	1t7D	""A7f$$$$;w'500000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   ACC Cc                      ddgddgddgg}t          j        |f|f|f|f|fgdg          }t          j        |	          } fd
} ||           t          j                            |          } ||           dS )a}  
        Tests two ways of creating a new `BinTableHDU` from a column of
        string arrays.

        This tests for a couple different regressions, and ensures that
        both BinTableHDU(data=arr) and BinTableHDU.from_columns(arr) work
        equivalently.

        Some of this is redundant with the following test, but checks some
        subtly different cases.
        s   abcds   efghs   ijkls   mnops   qrsts   uvwx)r*   z(3, 2)S4rf   r  c                    | j         d         j        dk    sJ | j         d         j        j                            d          sJ |                                         d          d           t          j                            d                    5 }|d         }|j	        d         d	k    sJ |j         d         j        dk    sJ | j         d         j        j                            d          sJ t          j        |j         d         | j         d         k              sJ 	 d d d            d S # 1 swxY w Y   d S )
Nr*   )ro   rm   rt   U4r  Tr   r   rD  z(4,2,3))r   ry  r   r   endswithr   r   r   r   rT   r   r   )rI   r   r  rX   s      r&   test_dims_and_roundtripz`TestTableFunctions.test_bin_table_init_from_string_array_column.<locals>.test_dims_and_roundtrip1  s   :c?(I5555:c?(,55d;;;;;MM$))K00DMAAA499[1122 Cda}W-::::{3'-::::z#,099$?????vfk#.%*S/ABBBBBBC C C C C C C C C C C C C C C C C Cs   BD55D9<D9N)r   rj   r   rW   r   )rX   r   arrr  rV  r  s   `     r&   ,test_bin_table_init_from_string_array_columnz?TestTableFunctions.test_bin_table_init_from_string_array_column  s     '"Wg$6'8JKhWtgw$9BSAT
 
 
 !s+++	C 	C 	C 	C 	C 	 '''!..s33'''''r(   c                    ddgddgddgg}g d}t          j        ||f||fgdd	g
          }t          j        |          }|                    |                     d                     t          |                     d          d          5 }|                                }ddd           n# 1 swxY w Y   t          |                     d          d          5 }|                    |	                    dd                     ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|d         }|j
        d         dk    sJ |j
        d         dk    sJ |j        D ]J}	t          j        |	d         ddgddggk              sJ t          j        |	d         g dk              sJ K	 ddd           dS # 1 swxY w Y   dS )a  
        According to the FITS standard (section 7.3.2):

            If the number of elements in the array implied by the TDIMn is less
            than the allocated size of the ar- ray in the FITS file, then the
            unused trailing elements should be interpreted as containing
            undefined fill values.

        *deep sigh* What this means is if a column has a repeat count larger
        than the number of elements indicated by its TDIM (ex: TDIM1 = '(2,2)',
        but TFORM1 = 6I), then instead of this being an outright error we are
        to take the first 4 elements as implied by the TDIM and ignore the
        additional two trailing elements.
        s   abs   cds   efs   ghs   ijs   klr   rt   rm   rn   ro   )r   z(3, 2)S2)r   5i8rf   r  r  rbNwbs   (2,2,3)s   (2,2,2)r   rD  z(2,2,2)TFORM112Ar   abcdefghr   )r   rj   r   rW   r   r   r   r   r  r6  rT   r   r   )
rX   arr1arr2rW  rI   r   	raw_bytesr   r  r:   s
             r&   !test_columns_with_truncating_tdimz4TestTableFunctions.test_columns_with_truncating_tdimC  s   & ?hD\D$<(1BL0Q
 
 
  c***dii,,---$))K(($// 	!1I	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! $))K(($// 	?1GGI%%j*==>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? Ytyy--.. 	;$!WF=)Y6666=*e3333{ ; ;vc#hD$<$*FFGGGGGvc#h///9::::::;		; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s7   B//B36B3*DDDBGGGc                 p   g dg dg dg}t           j                            |f|fgdg          }t          j        |          }|                    |                     d                     t          j        |                     d                    5 }d|d	         j        v sJ |d	         j        d         d
k    sJ t          |d	         j
                  dk    sJ t          |d	         j
        d                   d	k    sJ |d	         j
                            d          d         t           j                            |                    d          d         d          k                                    sJ 	 ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|d	         j
        dd          |                    |                     d                     ddd           n# 1 swxY w Y   t          j        |                     d                    5 }d|d	         j        v sJ |d	         j        d         d
k    sJ t          |d	         j
                  dk    sJ t          |d	         j
        d                   d	k    sJ |d	         j
                            d          d         t           j                            |                    d          d         d          k                                    sJ 	 ddd           dS # 1 swxY w Y   dS )zERegression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/201)r`   ra   ghi)jklmnopqr)stuvwxzyz z(3,3)S3rt  r  r  rD  r   z(3,3,3)rt   r   asciiNr  )r   r   rj   r   rW   r   r   r   rT   r+   r   r/   r   r5  r   )rX   r   recarrr   rE  s        r&   test_string_array_round_tripz/TestTableFunctions.test_string_array_round_tripr  s    &%%'<'<'<>S>S>STw09+FF&)))			$))K(()))Ytyy--.. 	!adk))))Q4;w'94444qty>>Q&&&&qty|$$))))!	""1%Q8JG)T)TTcee   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 Ytyy--.. 	/! aDIaaaLLIIdii--...		/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ Ytyy..// 	1adk))))Q4;w'94444qty>>Q&&&&qty|$$))))!	""1%Q8JG)T)TTcee   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s8   C&F		FF;>HH	H	7C&L++L/2L/c                    t          j        ddgd          }t          j        ddgddggd          }t          j        d	d
gddggddgddggg          }t          j        dd|          t          j        ddd|          t          j        ddd|          g}t          j                            t          j        |                    }|                    |                     d                     t          j	        |                     d                    5 }|d	         j
        d                             d          |k                                    sJ |d	         j
        d                             d          |k                                    sJ |d	         j
        d         |k                                    sJ 	 ddd           dS # 1 swxY w Y   dS )zVRegression test for
        https://github.com/spacetelescope/PyFITS/issues/3
        r   r   z|S1rf   bcra  ez|S2r   rt   rm   rn   ro   r   r   r  r   1Arh   strarray4A(2,2)r   ri   r   rj   intarray4Iz(2, 2)r  ro  N)r   rj   r   rD   rW   r   r   r   r   r   r   encoder   )rX   arraarrbarrcr  r   rE  s          r&   test_new_table_with_nd_columnz0TestTableFunctions.test_new_table_with_nd_column  s
   
 xc
%000x#ttSk2%@@@x1a&1a&)QFQF+;<== KU4t<<<KZ'NNNKZ($OOO
 ++DL,>,>??DIIk**+++Ytyy--.. 	9! aDIe$++G44<AACCCCCaDIj)0099TAFFHHHHHaDIj)T166888888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   B(GGGc                    t          j        ddgddggddgddggg          }t          j        d	d
gddggddgddggg          }t          j        ddd|          t          j        ddd|          g}t          j                            t          j        |                    }|                    |                     d                     t          j	        |                     d                    5 }|d         j
        d         dk    sJ |d         j
        d         dk    sJ |d         j
        d         |d         j
        d         cxk    rdk    sn J |d         j        d         |k                                    sJ |d         j        d         |k                                    sJ |d         j        j        dk    sJ 	 ddd           n# 1 swxY w Y   t          j        t           t          j        ddd|           dS )ay  Normally the product of the dimensions listed in a TDIMn keyword
        must be less than or equal to the repeat count in the TFORMn keyword.

        This tests that this works if less than (treating the trailing bytes
        as unspecified fill values per the FITS standard) and fails if the
        dimensions specified by TDIMn are greater than the repeat count.
        r   rt   rm   rn   ro   r   r   r  r  r  r  r  r            r   20Irx  ry  r   r{  r  r^  TFORM2rD  rE  0   N2I)r   rj   r   rD   rW   r   r   r   r   r   rT   r   r   itemsizer  r  r	   )rX   r}  r~  r  r   rE  s         r&   test_mismatched_tform_and_tdimz1TestTableFunctions.test_mismatched_tform_and_tdim  sV    x1a&1a&)QFQF+;<==x1b'B8,Bx"b.BCDD KSG4HHHKS7$GGG
 ++DL,>,>??DIIk**+++Ytyy--.. 	,!Q4;x(E1111Q4;x(D0000Q4;w'1Q4;w+?JJJJ7JJJJJJaDIcNd*//11111aDIcNd*//11111Q49%+++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	3tPT	
 	
 	
 	
 	
 	
s   5CGGGc                     t          j        |                     d                    5 }|d         j        d         j        dk    sJ 	 ddd           dS # 1 swxY w Y   dS )z@Regression test for https://github.com/astropy/astropy/pull/3580z	tdim.fitsr   r  )rm   r   r   N)r   r   r   ry  )rX   hdulists     r&   test_tdim_of_size_onez(TestTableFunctions.test_tdim_of_size_one  s     Ytyy--.. 	?'1:?7+1Y>>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   AAAc                 z   t          j        |                     d                    5 }|d         j        }ddd           n# 1 swxY w Y   |                    d          }|dd         }|                    d          |k                                    sJ t          t          |          dz             D ]}|d|         }|                    d          |d|         k                                    sJ ||d         }|                    d          ||d         k                                    sJ |ddd         }|                    d          |ddd         k                                    sJ |ddd         }|                    d          |ddd         k                                    sJ dS )zDRegression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/52r  r   NrU  rt   r  )r   r   r   r/   r   r.   r+   )rX   r   r   targetsr8  ns         r&   test_slicingzTestTableFunctions.test_slicing  s    Ytyy..// 	1Q49D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	**X&&G!!W,1133333s7||a'(( 	< 	<ARaRAGGH%%!499;;;;;QRRAGGH%%499;;;;;;1I!!WSSqS\166888882J!!WTTrT]2779999999rI  c                    t          j        |                     d                    5 }|d         j        }ddd           n# 1 swxY w Y   ||d         dk             }|t          j        |d         dk                       }|dg         }|dd         }||||fD ]}t          |t           j                  sJ t          ||          sJ t          ||          sJ t          ||          sJ dS )zDRegression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/55r  r   NrU  r  r   r   r   r   r   wherer0   r+  r;   rX   r   r   s1s2s3s4r8  s           r&   test_array_slicingz%TestTableFunctions.test_array_slicing  s@    Ytyy..// 	1Q49D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	$x.I-."(4>Y67781#Y"1"Xb"b! 	0 	0Aa//////b"%%%%%b"%%%%%b"%%%%%%%rI  c           	         t          j        |                     d                    5 }|d         j        }d|d<   t          j        |d         dk              sJ d|d<   t          j        |d         dk              sJ t
          t          t          j        fD ]C} |g d          |d<   t          j        |d         t          j        g d                    sJ D	 ddd           dS # 1 swxY w Y   dS )zV
        Regression test for https://github.com/spacetelescope/PyFITS/pull/48
        r  r   r   r  rs   N)	r   r   r   r   r   r  tuplerj   array_equal)rX   r   r   	containers       r&   test_array_broadcastingz*TestTableFunctions.test_array_broadcasting  sS   
 Ytyy..// 
	J3q6;DDM6$w-1,-----DM6$w-1,-----"E284 J J	 )	))) 4 4W~d7mRXiii5H5HIIIIIIJ
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	Js   B5C++C/2C/c                    t          j        |                     d          d          5 }|d         j        }ddd           n# 1 swxY w Y   ||d         dk             }|t          j        |d         dk                       }|dg         }|dd         }||||fD ]}t          |t           j                  sJ t          ||          sJ t          ||          sJ t          ||          sJ dS )	z
        Like test_array_slicing but with the file opened in 'readonly' mode.
        Regression test for a crash when slicing readonly memmap'd tables.
        r  readonlyrA  r   NrU  r  r   r  r  s           r&   test_array_slicing_readonlyz.TestTableFunctions.test_array_slicing_readonly		  sE    Ytyy..Z@@@ 	AQ49D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	$x.I-."(4>Y67781#Y"1"Xb"b! 	0 	0Aa//////b"%%%%%b"%%%%%b"%%%%%%%s   AAA	tablenamer  r_   c                    t          j        |                     |                    5 }|d         }|                     d          }|                     d          }|                     d          }|                    |||           t           j                            |||          }t          |j        |j                  sJ t          ||d                    ddd           dS # 1 swxY w Y   dS )z
        A simple test of the dump/load methods; dump the data, column, and
        header files and try to reload the table from them.
        r   data.txtcoldefs.txt
header.txtN)	r   r   r   r   dumprW   loadr;   rN   )rX   r  r   rI   datafilecdfilehfilerH   s           r&   test_dump_load_round_tripz,TestTableFunctions.test_dump_load_round_trip	  s    Ytyy++,, 	1GEyy,,HYY}--FIIl++EJJx///(--hFFI!%*in=====YQ000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   B2C''C+.C+c                    t           j                            dg ddfdg ddfgd          }t          j                            |          }|                     d	          }|                     d
          }|                     d          }|                    |||           t          j                            |||          }t          |j
        |j
                  sJ t          |j                  t          |j                  k    sJ dS )z
        Regression test for https://github.com/spacetelescope/PyFITS/issues/22

        Ensures that a table containing a multi-value array column can be
        dumped and loaded successfully.
        r   r  g?r   )ro   r   r   r  g?z	a1,4i4,f8rt  r  r  r  N)r   r   rj   r   rW   r   r   r  r  r;   r   r   rT   )rX   r   rI   r  r  r  rH   s          r&   test_dump_load_array_columsz.TestTableFunctions.test_dump_load_array_colums0	  s     v||<<<%\\\3'?@+  
 
  --d3399Z((=))		,''

8VU+++$))(FEBB	ej).999995<  C	(8$9$9999999r(   c           
         t          j        g dt                    }t          j        dd|          }t          j        g dt           j                  }t          j        dd|          }t          j        g d	t           j                  }t          j        d
d|          }t          j        g dt           j                  }t          j        dd|          }t          j        g d          }	t          j        dd|	          }
t          j        g dt           j                  }t          j        dd|          }t          j        g dt           j	                  }t          j        dd|          }t          j        g dg dg dgt           j                  }t          j        dd|          }t          j
                            |||||
|||g          }|                     d          }|                    |           t          j
                            |          }t          |j        |j                  sJ dS )a9  
        Tests loading a table dump with no supplied coldefs or header, so that
        the table format has to be guessed at.  There is of course no exact
        science to this; the table that's produced simply uses sensible guesses
        for that format.  Ideally this should never have to be used.
        )FTFrf   c0r`  rh   )r         r   B)iЊr      r   rr   )iMJi  iVr   r   )r   r`   r`  r   r   r  r  r  r   r   )y?@yffffff
@@y      @ffffff@r   Mrs   )rn   ro   r   )r   r  r  rv   PJ()r  N)r   rj   r   r   rD   r   r   r   r=  
complex128rW   r   r   r  r  r;   r   )rX   a0r  r   r   r   r   r   r   r   r   r   r   r   r   r   rv   rI   r  rH   s                       r&   test_load_guess_formatz)TestTableFunctions.test_load_guess_formatE	  s    X***$777[d3b999 Xmmm28444[d3b999X&&&bh777[d3b999X33328DDD[d3b999X((())[d4r:::XoooRZ888[d3b999X:::"-PPP[d3b999Xyyy)))YYY7rxHHH[d6<<< --r2r2r2r2.NOO99Z((

8$))(33	 ej).9999999r(   c                    t          j        dddg          }t          j        dddg          }t          j        dddg          }t           j                            |||g          }|j        j        g d	k    sJ |j        j        dgdz  k    sJ |j        d         dgk                                    sJ |j        d         dgk                                    sJ |j        j        dgk                                    sJ d
S )a=  
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/86

        Numpy recarray objects have a poorly-considered feature of allowing
        field access by attribute lookup.  However, if a field name coincides
        with an existing attribute/method of the array, the existing name takes
        presence (making the attribute-based field lookup completely unreliable
        in general cases).

        This ensures that any FITS_rec attributes still work correctly even
        when there is a field with the same name as that attribute.
        r,   rr   r   rh   r  rt   otherrm   )r,   r  r  N)	r   rD   rW   r   r   r,   r  r   r  )rX   r   r   r   r   s        r&   test_attribute_field_shadowingz1TestTableFunctions.test_attribute_field_shadowingn	  s    [gc!===[iA3???[gc!===))2r2,77v|<<<<<<<v~#****wA3&++-----y!aS(--/////#((*******r(   c                    t           j                            ddgd          }t          j                            |          }|j        j        ddgk    sJ t          |j	        |          sJ |
                    |                     d                     t          j        |                     d          d          }|j        j        ddgk    sJ t          ||          sJ d	S )
z
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/113

        Tests creating a table from a recarray containing numpy.bool columns.
        )TF)FTz|b1,|b1rt  r`  r  r   )extN)r   r   rj   r   rW   r   rC   r  r;   r   r   r   r  )rX   rj   r[   r   s       r&   test_table_from_bool_fieldsz.TestTableFunctions.test_table_from_bool_fields	  s     m];YOO,,U33|#Sz1111di///// 	TYY|,,---|DIIl33;;;|#Sz1111dE*******r(   c                     t          j        g ddg          }t          j        |          }|j        d         |d         k                                    sJ dS )z
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/215

        Tests the case where a multi-field ndarray (not a recarray) containing
        a bool field is used to initialize a `BinTableHDU`.
        )F)Tr  )r   ?rf   r  r   N)r   rj   r   rW   r   r   )rX   rW  r   s      r&   test_table_from_bool_fields2z/TestTableFunctions.test_table_from_bool_fields2	  sa     h444ZLIIIC(((S)..0000000r(   c                 0   t          j        ddddg          }t          j        ddddg          }t           j                            t          j        ||g                    }|                    |                     d                     t          j        |                     d          d	          5 }d|d
         j        d         d
<   d|d
         j        d         d<   ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|d
         j        d         ddgk    	                                sJ |d
         j        d         ddgk    	                                sJ 	 ddd           dS # 1 swxY w Y   dS )zERegression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/139F1r`  TFrj   F2r  r@  rA  r   r   N)
r   rD   rW   r   r   r   r   r   r   r   )rX   r   r   r[   r   s        r&   test_bool_column_updatez*TestTableFunctions.test_bool_column_update	  s    [s4-888[s5$-888,,T\2r(-C-CDDTYY|,,---Ytyy..X>>> 	)$$(DGLq!$(DGLq!	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) Ytyy..// 	>4GL&4,6;;=====GL&4,6;;======	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s%   7-C00C47C4"AFFFc           	         t          j        dddt          j        g d          d          }t           j                            |g          }|                    |                     d                     t          j        |                     d          d	          5 d
d         j	        d<   d         j	        d= ddd           n# 1 swxY w Y   t          j        |                     d                    5 t          j        t          fd           ddd           n# 1 swxY w Y   	 t          j        |                     d                    5 d         j        d          ddd           dS # 1 swxY w Y   dS # t          $ r/}t          |                              d          sJ Y d}~dS d}~ww xY w)zERegression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/197r  r   ---)z1.0z2.0r  z3.0T)r   rj   ro  r  r@  rA  E3r   r^  r  Nc                  *     d         j         d         S )Nr   r  r  )rE  s   r&   r  z7TestTableFunctions.test_missing_tnull.<locals>.<lambda>	  s    adio r(   zYthe header may be missing the necessary TNULL1 keyword or the table contains invalid data)r   rD   r   rj   r   r   r   r   r   rT   r  r  
ValueErrorr   r   rU  )rX   r  r  rt  rE  s       @r&   test_missing_tnullz%TestTableFunctions.test_missing_tnull	  s    K(77788
 
 
 **A3//dii,,--- Ytyy--H=== 	&$(AaDK!!H%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& Ytyy--.. 	?!M*&=&=&=&=>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?	499[1122  a!	$                                    	 	 	q66??=          	s`    CCC=D''D+.D+3'F E;.F ;E??F E?F 
G$F<<Gc           	         d}t          j        dd|t          j        g d          d          }t           j                            |g          }|                    |                     d                     t          |                     d          d	          5 }|	                                
                    d
d          }|                    d           |                    |           ddd           n# 1 swxY w Y   t          j        |                     d          d          5 }|d         j        d         d         dk    sJ 	 ddd           n# 1 swxY w Y   d}t          j        dd|t          j        g d          d          }t           j                            |g          }|                    |                     d                     t          |                     d          d	          5 }|	                                
                    dd          }|                    d           |                    |           ddd           n# 1 swxY w Y   t          j        |                     d          d          5 }|d         j        d         d         dk    s-t          j        |d         j        d         d                   sJ ddd           dS # 1 swxY w Y   dS )aY  Regression test for https://github.com/astropy/astropy/issues/5134

        Blank values in numerical columns of ASCII tables should be replaced
        with zeros, so they can be loaded into numpy arrays.

        When a TNULL value is set and there are blank fields not equal to that
        value, they should be replaced with zeros.
        r3  r  I8r   r   rt   rm   rn   T)ri   r   rj   ro  zascii_null.fitszr+rA  z2       z        r   Nmemmapr   rt   NaNzF12.8r	  zascii_null2.fitsz
3.00000000z
          r   )r   rD   r   rj   r   r   r   r   r   r   r6  seekr  r   isnan)	rX   nullval1r   r  rE  nulledr   nullval2r   s	            r&   test_blank_field_zeroz(TestTableFunctions.test_blank_field_zero	  s    [(???++
 
 
 **B400dii 122333 $))-..T::: 	aVVXX%%j*==FFF1IIIGGFOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 Ytyy!233DAAA 	(QQ49Q<?a'''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( [(///00
 
 
 **B400dii 233444 $)).//d;;; 	qVVXX%%lLAAFFF1IIIGGFOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 Ytyy!344TBBB 	Ga Q49Q<?c))RXadil1o-F-F)))	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	GsK   AC;;C?C?/ EE #E AI!!I%(I%AK--K14K1c                 ~    dgdz  }t          j        dd|          }||j        k                                    sJ dS zERegression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/218i   r$  rk   ri   rj   Nr   rD   rj   r   rX   rW  rK   s      r&   test_column_array_type_mismatchz2TestTableFunctions.test_column_array_type_mismatch
  J     ebjk%3777sy %%'''''''r(   c                 H   t          j        |                     d                    5 }|d         j         d|d         _        t          |d         j        t           j                  sJ t          |d         j                  dk    sJ |d                             |                     d                     ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|d         j        d         dk    sJ |d         j        d         d	k    sJ |d         j        d
         dk    sJ t          |d         j        t           j                  sJ t          |d         j                  dk    sJ 	 ddd           dS # 1 swxY w Y   dS )zWRegression test
        for https://github.com/spacetelescope/PyFITS/issues/27
        r_   r   Nr   r  NAXISrt   NAXIS1r  NAXIS2)	r   r   r   r0   r+  r+   r   r   rT   )rX   rE  s     r&   test_table_nonez"TestTableFunctions.test_table_none
  s   
 Ytyy++,, 	1aDIIAaDIadi77777qty>>Q&&&&aDLL;//000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 Ytyy--.. 	'!Q4;w'1,,,,Q4;x(B....Q4;x(A----adi77777qty>>Q&&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's%   BCCC6BFFFc                    t          j        |                     d                    5 }|d                             |                     d                     ddd           n# 1 swxY w Y   d|d         j        vsJ t          j        |                     d                    5 }t          j        |                     d                    5 }t          |d         j                  t          |d         j                  k    sJ t          |d         j        |d         j                  sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )aC  Test unnecessary parsing and processing of FITS tables when writing
        directly from one FITS file to a new file without first reading the
        data for user manipulation.

        In other words, it should be possible to do a direct copy of the raw
        data without unnecessary processing of the data.
        r  r   r  Nr   )	r   r   r   r   r   rE   r   rT   r;   )rX   rE  h1h2s       r&   test_unncessary_table_loadz-TestTableFunctions.test_unncessary_table_load%
  s    Ytyy..// 	11aDLL;//000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1
 QqT]****Ytyy..// 	>2499[1122 >b2a5<((C1,=,=====%bej"Q%*======> > > > > > > > > > > > > > >	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>sH   /A##A'*A'&(EA!D<0E<E 	 EE 	EEEc                    t          j        |                     d                    }t          |d         j        j        d         t                    sJ t           j                            |d         j                  }t          |d         j        j        d         t                    rJ |	                    | 
                    d                     t          j        | 
                    d                    5 }t          |d         j        |d         j                  sJ 	 ddd           n# 1 swxY w Y   |                                 dS )a  Tests a rare corner case where the columns of an existing table
        are used to create a new table with the new_table function.  In this
        specific case, however, the existing table's data has not been read
        yet, so new_table has to get at it through the Delayed proxy.

        Note: Although this previously tested new_table it now uses
        BinTableHDU.from_columns directly, around which new_table is a mere
        wrapper.
        r  r   r   r  N)r   r   r   r0   rC   r<  r   rW   r   r   r   r;   r   )rX   r   r   hdul2s       r&   &test_table_from_columns_of_other_tablez9TestTableFunctions.test_table_from_columns_of_other_table:
  sM    y<0011 $q'/1!4g>>>>> ))$q'/:: d1go5a8'BBBBB			$))K(()))Ytyy--.. 	?%!$q',a>>>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	

s   ;)D11D58D5c           	         t          j        |                     d                    5 }|d         j        }t          j        |          }|                    |                     d          d           t          j        |                     d                    5 }|d         j        }t          j        |d         |d         k              sJ t          j        |d         |d         k              sJ t          j        |d	                             t          j	                  |d	                             t          j	                  k              sJ t          j        t          j
        |d
         dd          |d
         k              sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z?Tests initializing a TableHDU with the data from a BinTableHDU.r_   r   r  r  Tr   r   r   r   r   TFN)r   r   r   r   r   r   r   r   astyper   r  )rX   r   r  rI   r  tbdata2s         r&   test_bintable_to_asciitablez.TestTableFunctions.test_bintable_to_asciitableW
  s(    Ytyy++,, 	Q!W\FMv...EMM$))K00DMAAA499[1122 Qe(-vfTlgdm;<<<<<vfTlgdm;<<<<< v4L''
33wt}7K7KBJ7W7WW    
 vbhvd|S#>>'$-OPPPPPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q		Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Qs7   A4F5C4FF5F!	!F5$F!	%F55F9<F9c                    t          j        |                     d                    5 }t          |d         j        j        d         t                    sJ t          j        |d         j                  }t          j	        |          }t          |d         j        j        d         t                    rJ t          ||d         j                  sJ 	 ddd           n# 1 swxY w Y   t          j        |                     d                    5 }t          j        |d         j                  }t          j	        |          }t          ||d         j                  sJ 	 ddd           n# 1 swxY w Y   t          j        |                     d                    5 }t          j        |d         j                  }t          j	        |          }	t          |	|d         j                  sJ 	 ddd           n# 1 swxY w Y   t          j        |                     d                    5 }
t          j        |
d         j                  }t          j	        |          }t          j        t          d	
          5  t          ||
d         j                  sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )
        Regression test for https://github.com/astropy/astropy/issues/1597

        Tests for pickling FITS_rec objects
        r_   r   r   Nr   random_groups.fitsr$  rt   zField 2 has a repeat count of 0r  r   r   r   r0   rC   r<  r   pickledumpsloadsr;   r  warnsUserWarningrX   btbbtb_pdbtb_plascasc_pdasc_plrgrrgr_pdrgr_plzwczwc_pdzwc_pls                r&   test_picklezTestTableFunctions.test_picklel
  s    Ytyy++,, 
	7c!fn4Q7AAAAA\#a&+..F\&))F "#a&."8";WEEEEE!&#a&+666666
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 Ytyy..// 	73\#a&+..F\&))F!&#a&+666666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7
 Ytyy!56677 	73\#a&+..F\&))F!&#a&+666666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7
 Ytyy!12233 	;s\#a&+..F\&))Fk1RSSS ; ;%fc!fk::::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;		; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;o   B+C  C$'C$AE00E47E4"AH  HH2AKJ, K,J0	0K3J0	4KKKc                    t          j        g g d          }t          j        |          }|j        d         dk    sJ |j        d         dk    sJ |j        d         dk    sJ |j                            d	          }|j        d
k    sJ d S )N))r   i8)r   S64)r  )r~   rF  rf   r  `   r  r   TDIM3rC  r   )r   )r   rj   r   rW   rT   r   r/   ry  )rX   rj   r   r/   s       r&   test_zero_length_tablez)TestTableFunctions.test_zero_length_table
  s    #U#U#UVVVu%%z(#r))))z(#q((((z'"g----q!!{d""""""r(   c                    t          j        |                     d                    d         }t          j        d|dd          }t           j                            |g          }|                    |                     d                     t          j        |                     d                    5 }t          j
        |d         j        d         |k              sJ 	 d	d	d	           d	S # 1 swxY w Y   d	S )
a  
        When creating a table column with non-trivial TDIMn, and
        big-endian array data read from an existing FITS file, the data
        should not be unnecessarily byteswapped.

        Regression test for https://github.com/astropy/astropy/issues/3561
        r  DATATESTz(3,1,128,1,1)1152E)r   rj   r   ri   r  r   N)r   r  r   rD   rW   r   r   r   r   r   r   )rX   r   rK   r[   r   s        r&   #test_dim_column_byte_order_mismatchz6TestTableFunctions.test_dim_column_byte_order_mismatch
  s    |DII&:;;<<VDkvTwWWW,,cU33TYY{++,,,Ytyy--.. 	8$6$q',v.$6777777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   5,C//C36C3c                 h   t          j        |                     d                    }t          j        |                     d                    }t          |          t          |          z   }t           j                            ||          }||t          |          d<   |d         dk    }||         }t          |dd         |dd                   sJ t          |dd         |dd                   sJ t          |t          j        |                     d                              sJ dS )a*  
        Tests creating a `FITS_rec` object with `FITS_rec.from_columns`
        from an existing `FITS_rec` object read from a FITS file.

        This ensures that the per-column arrays are updated properly.

        Regression test for https://github.com/spacetelescope/PyFITS/issues/99
        r_   r   Nr   r   )r   r  r   r+   r+  r   r;   )rX   data1data2r   mergedr  maskeds          r&   test_fits_rec_from_existingz.TestTableFunctions.test_fits_rec_from_existing
  s    TYYy1122TYYy1122E

SZZ'++E+??$s5zz||d|a eABBi44444eABBi44444 eT\$))I2F2F%G%GHHHHHHHr(   c                 *   t          j        dgdg          }t          j        |                     d          |           t          j        |                     d          d          5 }d|d         j        d	         d
<   |d         j        d	         d
         dk    sJ 	 ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|d         j        d	         d
         dk    sJ 	 ddd           n# 1 swxY w Y   t          j        g dg dgfgdg          }t          j        |                     d          |           g dg dg}t          j        |                     d          d          5 }|d         j        d         dk    sJ d|d         j        d	         d<   t          j        |d         j        d	         d
         |k              sJ 	 ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|d         j        d         dk    sJ t          j        |d         j        d	         d
         |k              sJ 	 ddd           dS # 1 swxY w Y   dS )z
        Regression test for https://github.com/astropy/astropy/issues/4452

        Ensure that changes to values in a string column are saved when
        a file is opened in ``mode='update'``.
        )r`   )r   S3rf   r  r@  rA  XYZr   r   r   N)r`   ra   geh)ijklmnopq)r   )r"  rt   rm   r  )r%  r#  r'  rD  z(3,3,2))r   r   r   )	r   rj   r   r   r   r   r   rT   r   )rX   r   r   expecteds       r&   !test_update_string_column_inplacez4TestTableFunctions.test_update_string_column_inplace
  s    x
;-888TYY{++T222Ytyy--H=== 	1#(DGLa 7<$Q'500000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 Ytyy--.. 	1$7<$Q'500000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 x$$$&;&;&;<>?()
 
 

 	TYY|,,d333)))+@+@+@AYtyy..X>>> 		<$7>'*i7777 */DGLg&6$q',s+A.(:;;;;;;		< 		< 		< 		< 		< 		< 		< 		< 		< 		< 		< 		< 		< 		< 		< Ytyy..// 	<47>'*i77776$q',s+A.(:;;;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<sJ   *6B--B14B1 DDDA!G==HH/AJJJzrequires objgraphreasonc                     d }t          d          5   ||                     d                     ddd           dS # 1 swxY w Y   dS )z?Regression test for https://github.com/astropy/astropy/pull/520c                     t          j        |           5 }|d         j                                        }d d d            n# 1 swxY w Y   |j        j        D ]
}||          d S )Nr   )r   r   r   r7  r   r,   )filenamer   r   colnames       r&   readfilez8TestTableFunctions.test_reference_leak.<locals>.readfile
  s    8$$ +Aw|((**+ + + + + + + + + + + + + + +  :+  W s    AAAr+  zmemtest.fitsN)_refcountingr   )rX   r1  s     r&   test_reference_leakz&TestTableFunctions.test_reference_leak
  s    	 	 	 *%% 	0 	0HTYY~..///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   ?AAc                 z   ddl m} ddlm}  |            }|                                 	 t          d          5  |                                 ddd           n# 1 swxY w Y   |                                 n# |                                 w xY w~|                                 }dD ]}|                                 	 t          d          5   t          ||                       ddd           n# 1 swxY w Y   |                                 k# |                                 w xY w~ |            }|
                                 	 t          d          5  |                    |           ddd           n# 1 swxY w Y   |                                 n# |                                 w xY w~dS )aG  
        Regression test for https://github.com/astropy/astropy/pull/4539

        This actually re-runs a small set of tests that I found, during
        careful testing, exhibited the reference leaks fixed by #4539, but
        now with reference counting around each test to ensure that the
        leaks are fixed.
        r   )TestMultipleHDU)TestCorer+  N)r   r.  r?  rH  )test_connectr5  	test_corer6  setup_methodr2  test_add_del_columns2teardown_method	__class__rG   setup_class	test_readteardown_class)rX   tmp_pathr5  r6  ru   rw   	test_namery   s           r&   test_reference_leak2z'TestTableFunctions.test_reference_leak2  s    	211111''''''XZZ
	!j)) + +((***+ + + + + + + + + + + + + + +     B    ^^
 	% 	%I OO%!*-- - -*GB	**,,,- - - - - - - - - - - - - - - ""$$$$""$$$$_
	 j)) ' 'X&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' BBBs   A< AA< A  A< #A $A< <BDC7+D7C;	;D>C;	?DD-F! F5F! FF! F	F! !F7c                    t          j        |                     d                    5 }|d         }|                     d          }|                     d          }|                     d          }|                    |||           d}t          j        t          |          5  |                    |||           d d d            n# 1 swxY w Y   |                    |||d	           d d d            d S # 1 swxY w Y   d S )
Nr  r   r  r  r  zFile .* already exists\.  File .* already exists\.  File .* already exists\.  If you mean to replace the file\(s\) then use the argument 'overwrite=True'\.r  Tr   )r   r   r   r   r  r  r  OSError)rX   r   rI   r  r  r  msgs          r&   test_dump_overwritez&TestTableFunctions.test_dump_overwrite5  s   Ytyy..// 	@4GEyy,,HYY}--FIIl++EJJx///F 
 wc222 4 4

8VU3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4JJx$J???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s6   A<C9$C<C9C	C9C	C99C= C=c                 Z   t          j        g dt           j                  }t          j        ddd|          }t          j                            |g          }|                    |                     d                     t          j	        |                     d          d	          5 }|d
         }d|j
        v sJ |j
        d         dk    sJ |j        d         j        t          j        d          k    sJ t          j        |j        d         |k              sJ d|j        d         d<   |                    |                     d                     ddd           n# 1 swxY w Y   t          j	        |                     d          d	          5 }|d
         }d|j
        v sJ |j
        d         dk    sJ |j        d         j        t          j        d          k    sJ t          j        |j        d         g dk              sJ 	 ddd           dS # 1 swxY w Y   dS )zP
        Tests updating a table column containing pseudo-unsigned ints.
        rs   rf   r  r           )r   ri   r   rj   r  T)uintr   TZERO1uint32c   r   r  N)rL  rt   rm   )r   rj   rK  r   rD   rW   r   r   r   r   rT   r   r   r   )rX   r   rK   r[   r   r   s         r&   test_pseudo_unsigned_intsz,TestTableFunctions.test_pseudo_unsigned_intsE  s   
 x			333ks4uDIII,,cU33TYY{++,,, Ytyy--D999 		1Tq'Csz)))):h'500008C=&"(8*<*<<<<<6#(3-4/00000  "CHSM!KK		,//000		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 Ytyy..T::: 	7dq'Csz)))):h'500008C=&"(8*<*<<<<<6#(3-:::5666666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s&   ,B.E&&E*-E*A8H  H$'H$c                    t          j        dt          j        dgd          ddd          }t          j        t          j                    t           j                            |g          g          }d|d         j        d         d	<   |	                    | 
                    d
                     |d         j        d         dk    sJ t          j        | 
                    d
                    5 }d|d         j        d         d	<   |d         j        d         d	         dk    sJ |	                    | 
                    d                     ddd           n# 1 swxY w Y   t          j        | 
                    d                    5 }|d         j        d         d	         dk    sJ 	 ddd           dS # 1 swxY w Y   dS )zCheck that a scaled column if correctly saved once it is modified.
        Regression test for https://github.com/astropy/astropy/issues/6887
        r   r   z>i2rf   1I   )r   rj   ri   r   r   rt   r   za.fitsr  zb.fitsN)r   rD   r   rj   rU   rV   rW   r   r   r   r   r   )rX   r   r*   rz   r   s        r&   test_column_with_scalingz+TestTableFunctions.test_column_with_scalingb  s!    [(A3e,,,
 
 
 L$/++T-=-J-JB4-P-PQRR !	$			$))H%%&&&ty!#### Ytyy**++ 	+q!#AaDIdOAQ49T?1%++++ IIdii))***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ Ytyy**++ 	/t7<%a(B.....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s%   2AEE #E  F<<G G c                    t          j        g dd          }t          j        g dd          }t          j        g dd          }t          j        g dd          }t          ||d	z  |||g          }t          j        |                     d
                    }|j        |j        k    sJ t          ||          sJ dS )z
        Test correct integer dtypes according to ASCII table field widths.
        Regression for https://github.com/astropy/astropy/issues/9899
        )r     i  r  rS  r~   rf   )r  i   r  rT  r  )i       l         (   rU  )r      i 2   rW  rp   rt   zascii_i4-i20.fitsN)r   rj   r   r   r   r   r;   )rX   i08i10i20i02t0ru   s          r&   test_ascii_inttypesz&TestTableFunctions.test_ascii_inttypes  s    
 h999FFFhAAANNNhBBB$OOOh888EEECq#sC011Z		"56677x28####b"%%%%%%%r(   c                 l   t          j        ddt          j        ddg          d          }t          j        ddt          j        d	d
g          d          }t          j        ddt          j        ddg          d          }t           j                            |||g          }|                    |                     d                     t          j        |                     d          d          5 }t          |d         j
        |j
                  sJ 	 ddd           dS # 1 swxY w Y   dS )zTest different float formats.r   r   r  gffffff(@T)r   ri   rj   ro  r   D16g      /@g0@r  zD16.7r  r  zfoo.fitsFr  r   N)r   rD   r   rj   r   r   r   r   r   r;   r   )rX   r  r  col3r   r   s         r&   test_ascii_floattypesz(TestTableFunctions.test_ascii_floattypes  sl   {S$(>(>d
 
 
 {U"(D$<*@*@
 
 
 {WBHc3Z,@,@
 
 
 m(($d);<<DIIj))***Ytyy,,U;;; 	:t!$q',999999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   8#D))D-0D-N)S__name__
__module____qualname__r]   r   r   r   r  r  r   r.  r3  r?  rH  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r+  r;  rN  rQ  rX  rg  rq  r  r  r  r  r  r  r  r  markparametrizer  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r*  skipifHAVE_OBJGRAPHr3  slowrB  rF  rM  rQ  r^  rb  r>   r(   r&   rP   rP      s?       ; ; ;,[ [ [z* * *XJ J JX   3 3 32  $  ,  ,Z: Z: Z:x	6 	6 	6V V Vp2 2 2<1 1 1:  $1 $1 $1L  ] ] ]~+ + +4-N -N -N^  $> > >@  4W
 W
 W
rZ
 Z
 Z
xY Y Yvj j jX  B]9 ]9 ]9~2 2 2:- - -,- - -  ,9 9 9<- - -^"8 "8 "8HJ- J- J-X1 1 1%( %( %(N-; -; -;^     D9 9 92!
 !
 !
F? ? ?: : :$& & & J J J"& & &$ [[<*CDD1 1 ED1(: : :*': ': ':R+ + +2+ + +$
1 
1 
1> > >   >5G 5G 5Gn( ( (' ' '&> > >*  :Q Q Q*#; #; #;J# # #8 8 8"I I I@)< )< )<V [M)2EFF0 0 GF0 [M)2EFF[, ,  GF,\@ @ @ 7 7 7:/ / /<& & &: : : : :r(   rP   c              #      K   t          j                     t          t          j        |                     }|V  t          j                     t          t          j        |                     |k    s
J d            dS )z
    Perform the body of a with statement with reference counting for the
    given type (given by class name)--raises an assertion error if there
    are more unfreed objects of the given type than when we entered the
    with statement.
    z/More {0!r} objects still in memory than before.N)gccollectr+   objgraphby_type)type_refcounts     r&   r2  r2    st       JLLL8#E**++H
NNNJLLLHU##$$0008 	10000r(   c                   r   e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
ej                            e oeo
ej        d	k    d
          d             Zd Zd Zd Zej                            ej        dk     d          ej                            ej        d	k    d          ej        j        d                                     Zej                            ej        dk     d          ej                            ej        d	k    d          ej        j        d                                     Zd Zd Zd ZdS )TestVLATablesz;Tests specific to tables containing variable-length arrays.c                 2      fd}dD ]} ||           d S )Nc                    t          j        d| dgdz  gdz            }t           j                            |g          }t          j                    }t          j        ||g          }|                                        d          d           t          j                            d                    5 }|d	         j	        
                    d          }|d         d
d         t          j        g dt          j                  k                                    sJ |d	         j        d         j                            d          sJ 	 d d d            d S # 1 swxY w Y   d S )NQUAL_SPEr   i#     rh   r   Tr   r   rn   r  )r   r   r   r   rf   zJ(1571))r   rD   rW   r   rV   rU   r   r   r   r   r/   r   rj   r   r   rC   ri   rU  )format_coderK   tb_hdupri_hduhdu_listtotoqrX   s          r&   testz8TestVLATables.test_variable_length_columns.<locals>.test  s   +QC$J<#;M  C %22C599Fo''G|Wf$566HTYY{33tDDD499[1122 EdGL&&z22!QqS	RXlll"(%K%K%KKPPRRRRRAwq)099)DDDDDDE E E E E E E E E E E E E E E E E Es   ;BEE#&E#r  zQJ()r>   rX   r~  codes   `  r&   test_variable_length_columnsz*TestVLATables.test_variable_length_columns  sK    	E 	E 	E 	E 	E % 	 	DDJJJJ	 	r(   c                 ,    d }dD ]} ||           dS )zDRegression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/54c                    dgdz  gdz  }t          j        d| |          }t          j        dddgdz            }t           j                            ||gd          }t	          |j        d                   dk    sJ t	          |j        d                   dk    sJ |j        d         d	         |d	         k                                    sJ |j        d         d
         |d
         k                                    sJ |j        d         d         d	gdz  k                                    sJ |j        d         d         d	gdz  k                                    sJ d S )Nr   r  TESTVLFrh   TESTSCAr   r  r   r   r  r  )r   rD   rW   r   r+   r   r   )rx  rW  r  r  ry  s        r&   r~  z=TestVLATables.test_extend_variable_length_array.<locals>.test  sd   38*r/C;IkMMMD;Ic!rJJJD%22D$<r2JJFv{9-.."4444v{9-.."4444 K	*1-Q7<<>>>>>K	*1-Q7<<>>>>>K	*2.A38<AACCCCCK	*2.A38<AACCCCCCCr(   r  Nr>   r  s      r&   !test_extend_variable_length_arrayz/TestVLATables.test_extend_variable_length_array  s>    	D 	D 	D  % 	 	DDJJJJ	 	r(   c                 2      fd}dD ]} ||           d S )Nc                 4   t          j        t          j        ddg          t          j        dg          t          j        dg          gd          }t          j        d| |          }t          j                            |g          }|                                        d          d	           t          j                            d                    5 }|d
         j	        d         j
                            d          sJ t          d          D ]e}t          t          ||                             D ]@}|d
         j                            d          |         |         ||         |         k    sJ Af	 d d d            d S # 1 swxY w Y   d S )NnP*@;'x[;r   Otestarh   ro  Tr   r   r   D(2)rm   r   rj   r   rD   rW   r   r   r   r   rC   ri   rU  r.   r+   r   r/   rx  r   r9  rI   r  r  r7   rX   s          r&   r~  zRTestVLATables.test_variable_length_table_format_pd_from_object_array.<locals>.test  s   7G,--rx#PRU A ;GKqIIID$114&99EMM$))O44MEEE499_5566 H&ay(+2;;FCCCCCq H HA"3qt99-- H H%ay~33A66q9!<!QGGGGGHHH H H H H H H H H H H H H H H H H Hs   B#FFFzPD()zQD()r>   r  s   `  r&   6test_variable_length_table_format_pd_from_object_arrayzDTestVLATables.test_variable_length_table_format_pd_from_object_array  sK    	H 	H 	H 	H 	H % 	 	DDJJJJ	 	r(   c                 2      fd}dD ]} ||           d S )Nc                    t          j        ddg          t          j        dg          t          j        dg          g}t          j        d| |          }t          j                            |g          }|                                        d          d           t          j                            d                    5 }|d	         j	        d
         j
                            d          sJ t          d          D ]e}t          t          ||                             D ]@}|d	         j                            d
          |         |         ||         |         k    sJ Af	 d d d            d S # 1 swxY w Y   d S )Nr  r  r   r  rh   ro  Tr   r   r   r  rm   r  r  s          r&   r~  zJTestVLATables.test_variable_length_table_format_pd_from_list.<locals>.test  s   7G,--rx#PA;GKqIIID$114&99EMM$))O44MEEE499_5566 H&ay(+2;;FCCCCCq H HA"3qt99-- H H%ay~33A66q9!<!QGGGGGHHH H H H H H H H H H H H H H H H H Hs   	B#E::E>E>r  r>   r  s   `  r&   .test_variable_length_table_format_pd_from_listz<TestVLATables.test_variable_length_table_format_pd_from_list  sK    
	H 
	H 
	H 
	H 
	H % 	 	DDJJJJ	 	r(   c                 2      fd}dD ]} ||           d S )Nc                 6   t          j        t          j        g d          t          j        ddg          t          j        dg          gd          }t          j        d| |          }t          j                            |g          }|                                        d          d	
           t          j                            d                    5 }|d         j	        d         j
                            d          sJ t          d          D ]e}t          t          ||                             D ]@}|d         j                            d          |         |         ||         |         k    sJ Af	 d d d            d S # 1 swxY w Y   d S )Nr  r  rt  r   r  r  rh   ro  Tr   r   r   A(3)rm   r  rx  r   r9  rI   r   r  r7   rX   s          r&   r~  zRTestVLATables.test_variable_length_table_format_pa_from_object_array.<locals>.test   s   ///**BHc3Z,@,@"(C5//RTW A ;GKqIIID$114&99EMM$))O44MEEE499_5566 F$Awq)099&AAAAAq F FA"3qt99-- F F#Aw|11!44Q7:ad1gEEEEEFFF F F F F F F F F F F F F F F F F Fs   B#FFFzPA()zQA()r>   r  s   `  r&   6test_variable_length_table_format_pa_from_object_arrayzDTestVLATables.test_variable_length_table_format_pa_from_object_array  sK    	F 	F 	F 	F 	F % 	 	DDJJJJ	 	r(   c                 2      fd}dD ]} ||           d S )Nc                    g d}t          j        d| |          }t           j                            |g          }|                                        d          d           t          j                            d                    5 }|d         j        d         j        	                    d	          sJ t          d
          D ]e}t          t          ||                             D ]@}|d         j                            d          |         |         ||         |         k    sJ Af	 d d d            d S # 1 swxY w Y   d S )N)r   r`  r`   r  rh   ro  Tr   r   r   r  rm   )r   rD   rW   r   r   r   r   rC   ri   rU  r.   r+   r   r/   r  s          r&   r~  zJTestVLATables.test_variable_length_table_format_pa_from_list.<locals>.test  s   """A;GKqIIID$114&99EMM$))O44MEEE499_5566 F$Awq)099&AAAAAq F FA"3qt99-- F F#Aw|11!44Q7:ad1gEEEEEFFF F F F F F F F F F F F F F F F F Fs   B#D??EEr  r>   r  s   `  r&   .test_variable_length_table_format_pa_from_listz<TestVLATables.test_variable_length_table_format_pa_from_list  sK    
	F 
	F 
	F 
	F 
	F % 	 	DDJJJJ	 	r(   c                 2      fd}dD ]} ||           dS )zERegression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/200c                    t          j        d| t          j        d          gdz            }t           j                            |g          }t          j                    }t          j        ||g          }|                    	                    d          d           t          j
        	                    d                    }t          |d         |j                  D ]\  }}||k                                    sJ  d S )Nrv  i$  rw  rh   r   Tr   )r   rD   r   arangerW   r   rV   rU   r   r   r  r  rj   r   )	rx  rK   ry  rz  r{  r   row_arow_brX   s	           r&   r~  z,TestVLATables.test_getdata_vla.<locals>.test$  s    +BIdOO;Ls;R  C %22C599Fo''G|Wf$566HTYY{33tDDD<		+ 6 677D !$D$4ci @ @ . .u++------. .r(   r  Nr>   r  s   `  r&   test_getdata_vlazTestVLATables.test_getdata_vla!  sF    	. 	. 	. 	. 	.  % 	 	DDJJJJ	 	r(   win32z+https://github.com/numpy/numpy/issues/20699r+  c                    d t          d          D             }d t          d          D             }t          j        ddt          j        d                    }t          j        dd|          }t          j        d	d|          }t          j                            ||g          }t          j                            ||g          }t          j        t          j                    ||g          }|	                    | 
                    d
          d           t          j        | 
                    d
                    5 }	|	d         j        d         dk    sJ |	d         j        d         dk    sJ t          |	d         j        |j                  sJ t          |	d         j        |j                  sJ 	 ddd           n# 1 swxY w Y   t          j        | 
                    d
                    5 }	t          j        |	d         j        |	d         j                  }
|
	                    | 
                    d                     ddd           n# 1 swxY w Y   t          j        | 
                    d                    5 }t          |d         j        |j                  sJ 	 ddd           n# 1 swxY w Y   t          j        t          j                    g          }|	                    | 
                    d                     t          j        | 
                    d          d          5 }t          d          D ]p}t          j        | 
                    d
                    5 }	|                    |	d                    |                                 ddd           n# 1 swxY w Y   q	 ddd           n# 1 swxY w Y   t          j        | 
                    d                    5 }t          dd          D ]$}t          ||         j        |j                  sJ %	 ddd           dS # 1 swxY w Y   dS )zX
        Regression test for https://github.com/spacetelescope/PyFITS/issues/47
        c                 <    g | ]}t          j        |d z             S r   r   r  r?   r  s     r&   rB   z/TestVLATables.test_copy_vla.<locals>.<listcomp>A  s&    555Q	!a%  555r(   r  c                 >    g | ]}t          j        d d|z             S )r  r  r  r  s     r&   rB   z/TestVLATables.test_copy_vla.<locals>.<listcomp>B  s(    <<<A	#sQw''<<<r(   r~  r   r  r  PJr  r  Tr   r   r  zPJ(255)rt   N)r   rT   r  r  r   rA  rm   )r.   r   rD   r   r  rW   r   rU   rV   r   r   r   rT   r;   r   r   flush)rX   rd  re  r  r   r   ru   rw   r   rE  new_hdur  new_hdulr   idxs                  r&   test_copy_vlazTestVLATables.test_copy_vla7  sP    65%**555<<s<<< Ks")C..AAA[T666[T666**Ar733**Ar733|T_..B788TYY{++t<<< Ytyy--.. 	6!Q4;x(I5555Q4;x(I5555!!A$)RW55555!!A$)RW555555		6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 Ytyy--.. 	5!&AaDIadkJJJGOODIIl33444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 Ytyy..// 	72!"Q%*bg666666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 <!2!2 344<00111 Ytyy..X>>> 	%(1XX % %Ytyy5566 %!OOAaD)))NN$$$% % % % % % % % % % % % % % %%	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% Ytyy..// 	C8Q{{ C C%hsm&8"'BBBBBBC	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   A7G		GG;AII #I #J>>KK 9O90N5)O5N99O<N9=OOO 6QQQc                 "   t          j        |                     d                    }|d         j        }|j        dk    sJ |d         d         dk    sJ t	          j        |d         d         g d          sJ |                                 d S )Nztheap-gap.fitsr   )r7  r7   i  rW  r  )r   r   r   ry  r   r  r   )rX   r   r   s      r&   test_vla_with_gapzTestVLATables.test_vla_with_gapm  s    y#34455Aw|zV####Cy~$$$$~d5k#.@@@@@

r(   c           	      `   t          j        ddt          j        g dddggt          j                            }t           j                            |g          }|j                                        g dgddgggk    sJ |j        d                                         g dddggk    sJ d S )Nvarr  rs   r  r  rf   rh   )	r   rD   r   rj   r!  rW   r   r   tolist)rX   rK   r   s      r&   test_tolistzTestVLATables.test_tolistu  s    k(IIIBx0
CCC
 
 

 ++SE22x  iii[B8*$=====x%%''IIIBx+@@@@@@@r(   c                 L   |                      d          }t          j        |          5 }|d         }|j                                         ddgddggg ddd	gggk    sJ |j         d
                                         ddgg dgk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nzvariable_length_table.fitsr   r  r  r  rm   r  r  rn   r  )r   r   r   r  )rX   r/  r   r   s       r&   test_tolist_from_filez#TestVLATables.test_tolist_from_file  s   999::Yx   	HDq'C8??$$2r(RG)<|||bRSW>U(VVVVV8E?))++R,,,/GGGGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	Hs   A!BB Bl        zrequires 64-bit systemzCannot test on Windowsc                    d}t          j        dt           j                  }t          j        dt	          |dz                       |d<   t          j        dd| dd	|
          }t
          j                            |g          }d|_	        t          j        t          d          5  |                    |                     d                     ddd           dS # 1 swxY w Y   dS )z
        Regression test for https://github.com/astropy/astropy/issues/10812

        Check if the error is raised when the heap size is bigger than what can be
        indexed with a 32 bit signed int.
           r   rf   r   r   MATRIXzPD()r   rY  z3Please consider using the 'Q' format for your file.r  matrix.fitsN)r   r  r!  r  r  r   rD   rW   r   r   r  r  r  r   r   rX   nelemmatrixrK   r   s        r&   test_heapsize_P_limitz#TestVLATables.test_heapsize_P_limit  s     !2:...Ic5#3#344q	kxeRvVVV))3%00]S
 
 
 	0 	0 IIdii..///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   ))CC#&C#c                 p   d}t          j        dt           j                  }t          j        dt	          |dz                       |d<   t          j        dd| dd	|
          }t
          j                            |g          }d|_	        |
                    |                     d                     dS )z
        Regression test for https://github.com/astropy/astropy/issues/14808

        Check if the error is no longer raised when the heap size is bigger than what can be
        indexed with a 32 bit signed int.
        r  r   rf   r   r   r  zQD(r  r   rY  r  N)r   r  r!  r  r  r   rD   rW   r   r   r   r   r  s        r&   test_heapsize_Q_limitz#TestVLATables.test_heapsize_Q_limit  s     !2:...Ic5#3#344q	kxeRvVVV))3%00			$))M**+++++r(   c           	      j   t          j        ddd          t          j        ddg g f          g}t           j                            |                              |                     d                     t          j        |                     d                    5 }t          t          |d         j	        d                             D ]N}t          j        |d         j	        d         |         t          j        g t          j        	                    sJ O	 d
d
d
           d
S # 1 swxY w Y   d
S )z
        Regression test for https://github.com/astropy/astropy/issues/12881

        Check if empty vla are correctly read.
        integerr  )r   rt   rh   emptyr  zbug.fitsr   rf   N)r   rD   rW   r   r   r   r   r.   r+   r   r   r  rj   r   )rX   rC   r   r7   s       r&   test_empty_vla_raw_dataz%TestVLATables.test_empty_vla_raw_data  sa    KYs&AAAKWT"bBBB
 	%%g..66tyy7L7LMMMYtyy,,-- 	 3s1v{734455  ~FK(+RXb-I-I-I     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A=D((D,/D,c                 :
   t          j        d          }t          j        d          }t          j        ||gt                    }t	          j        ddd|          }t          j                            |g                              | 	                    d                     t	          j
        | 	                    d                    5 }t          |d	         j        d         d
                    |d	         j        j        dgk    sJ t          j        |d	         j        d         d
         t          j        g dg                    sJ t          j        |d	         j        d         d	         t          j        g dg                    sJ 	 ddd           n# 1 swxY w Y   t          j        d                              d          }t          j        d                              d          }t          j        ||gt                    }t	          j        ddd|          }t          j                            |g                              | 	                    d                     t	          j
        | 	                    d                    5 }|d	         j        j        dgk    sJ t          j        |d	         j        d         d
         t          j        ddgddgddgddgddgg                    sJ t          j        |d	         j        d         d	         t          j        ddgddgddgddgddgdd gd!d"gg                    sJ 	 ddd           n# 1 swxY w Y   t          j        d#                              d$          }t          j        d%                              d&          }t          j        ||gt                    }t	          j        dd'd(|          }t          j                            |g                              | 	                    d)                     t	          j
        | 	                    d)                    5 }|d	         j        j        d'gk    sJ t          j        |d	         j        d         d
         t          j        g d*g                    sJ t          j        |d	         j        d         d	         t          j        g d*g d+g                    sJ 	 ddd           dS # 1 swxY w Y   dS ),z
        Check if multidimensional VLF are correctly write and read.
        See https://github.com/astropy/astropy/issues/12860
        and https://github.com/astropy/astropy/issues/7810
        ro   r   rf   r~  zPD(7)z(7,1)ry  r  r   r   )r   r
  r  r  r  )r   r
  r  r  r  r        @Nr  )ro   rt   r  )r   rt   zPD(14)z(2,7)r  r   r
  r  r  r  r  r  g      @g       @g      "@g      $@rc   rd   re   rm   )r   rm   r   r(  zPD(6)z(3,2)r  )r   r
  r  )r  r  r  )r   r  rj   r  r   rD   rW   r   r   r   r   r-   r   rC   r  r  reshape)rX   r   r   rj   rK   hduss         r&   test_multidim_VLA_tablesz&TestVLATables.test_multidim_VLA_tables  sz    IaLLIaLL!Qv...kvg7%PPP%%se,,44TYY{5K5KLLLYtyy--.. 	$$q',v&q)***7?*wi7777>QV$Q'3L3L3L2M)N)N     >QV$Q'3V3V3V2W)X)X     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 IbMM!!&))IbMM!!&))!Qv...kvhG5QQQ%%se,,44TYY|5L5LMMMYtyy..// 	47?*xj8888>QV$Q'3*sCj3*sCj3PS*UVV     >QV$Q'c
c
c
c
c
tt
 
     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	* IaLL  ((IaLL  ((!Qv...kvg7%PPP%%se,,44TYY|5L5LMMMYtyy..// 	47?*wi7777>$q',v"6q"928___DU;V;VWWWWW>QV$Q'???OOO2T)U)U     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s9   CFF"%F"B>M$$M(+M(B#TTTc                    t          j        ddg          }t          j        g d          }t          j        ||gt                    }t          j        dd|          }t          j                            |g          }|j        d         j        j        d         j	        d         d	k    sJ t          j        dd
g          }t          j        g d          }t          j        ||gt                    }t          j        dd|          }t          j        t          d          5  t          j                            |g           ddd           dS # 1 swxY w Y   dS )zB
        Check the behaviour of heterogeneous VLA object.
        r  r  )rc   rd   r   rf   r  r  rh   r   r   thirtyz(invalid literal for int\(\) with base 10r  N)r   rj   r  r   rD   rW   r   r   r   subdtyper  r  r  )rX   r   r   r  r   r   s         r&   test_heterogeneous_VLA_tablesz+TestVLATables.test_heterogeneous_VLA_tables  s    Hb"XH%%%&&h1vV,,,[eF#>>>++RD11x{ &q)215@@@@ Hb(^$$H%%%&&h1vV,,,[eF#>>>]I
 
 
 	0 	0 ))2$///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   *!EEEN)rc  rd  re  __doc__r  r  r  r  r  r  r  r  rf  rh  r   r   sysplatformr  r  r  r  maxsizehugememr  r  r  r  r  r>   r(   r&   rs  rs    s       EE  $  ,  "     $     , [IoI#,'2I<   0C 0C	 0Cd  A A AH H H [e+4LMM[/8PQQ[0 0  RQ NM0. [e+4LMM[/8PQQ[, ,  RQ NM,(  (= = =~0 0 0 0 0r(   rs  c            
           e 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ej                            ddddddddddeej        ddddg          d             ZdS )TestColumnFunctionsc                 	   t          j                    D ]w\  }}t          j        dt	          j        |                    }|j        |k     t          j        d|          }|j        |k     t          j        d|          }|j        |k     xt          j        dd          }|j        dk    sJ |j        j        dk    sJ |j        j        dk    sJ t          j        dd          }|j        dk    sJ |j        j        dk    sJ |j        j        dk    sJ |j        j        dk    sJ t          j        dd	          }|j        j        d
k    sJ |j        j        dk    sJ |j        j        dk    sJ t          j        dd          }|j        j        dk    sJ |j        j        dk    sJ |j        j        dk    sJ t          j        dd          }|j        j        dk    sJ |j        j        dk    sJ |j        j        dk    sJ t          j        dd          }|j        j        d
k    sJ |j        j        dk    sJ |j        j        dk    sJ t          j        dd          }|j        j        dk    sJ |j        j        dk    sJ |j        j        dk    sJ t          j        dd          }|j        dk    sJ |j        j	        dk    sJ t          j        ddd          }|j        dk    sJ |j        j	        dk    sJ t          j        ddd          }|j        dk    sJ |j        j	        dk    sJ t          j        ddd          }|j        dk    sJ |j        j	        dk    sJ t          j        ddd          }|j        dk    sJ |j        j	        dk    sJ t          j        dd
          }|j        d
k    sJ |j        j	        dk    sJ t          j        dd
d          }|j        dk    sJ t          j        dd          }|j        dk    sJ t          j        dd          }|j        dk    sJ |j        j	        dk    sJ t          j        ddd          }|j        dk    sJ dS ) a  
        Test to ensure that when Numpy-style record formats are passed in to
        the Column constructor for the format argument, they are recognized so
        long as it's unambiguous (where "unambiguous" here is questionable
        since Numpy is case insensitive when parsing the format codes.  But
        their "proper" case is lower-case, so we can accept that.  Basically,
        actually, any key in the NUMPY2FITS dict should be accepted.
        r  I4rr   rn   zF15.8r  r  r  zE15.8rk   zD15.8r   zF10.0r  r   zE10.0zD10.0rp   T)ro  r   r~   I9I12r  rJ  zE15.7zF16.7f8zD25.17N)
r   rF   r   rD   r   r   ri   widthr"   	recformat)rX   r  
fitsformatr  s       r&   !test_column_format_interpretationz5TestColumnFunctions.test_column_format_interpretation)  s    &0%5%7%7 	# 	#!IzFBHY$7$788AH
""FI..AH
""FJ//AH
"""
 K%%x4x#%%%%x~""""K((x7""""x#%%%%x~####x!Q&&&&K((x#%%%%x~####x!Q&&&&K((x#%%%%x~####x!Q&&&& K((x#%%%%x~####x!Q&&&&K((x#%%%%x~####x!Q&&&&K((x#%%%%x~####x!Q&&&& K$$x3x!T))))K4000x5    x!T)))) KD111x4x!T))))KD111x4x!T))))KT222x5    x!T))))K$$x3x!T))))K4000x7"""" K$$x7""""K$$x3x!T))))K4000x8######r(   c                    t          j        ddg d          }t           j                            |g          }|                    |                     d                     t          j        |                     d                    5 }|d         j        d         dk    sJ |d         j        d         j	        t          j	        d          k    sJ t          j        |d         j        d         g d	k              sJ t          j        j                            |d         j        d          }|                                d
k    sJ 	 ddd           dS # 1 swxY w Y   dS )zT
        Regression test for https://github.com/astropy/astropy/issues/3422
        r  zF5.0r  r  r  r   r^  r=  )r
  r  r  s      1.   2.   3.N)r   rD   r   r   r   r   r   rT   r   r   r   r   r   r   r/   r4  )rX   r  r   r   raws        r&    test_zero_precision_float_columnz4TestColumnFunctions.test_zero_precision_float_column  s}   
 Kooo>>>M&&s++			$))K(()))Ytyy--.. 	7$7>(+v55557<'-)1D1DDDDD6$q',v.///ABBBBB &/''Qf==C;;==$666666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   	CEEEc                 ~    dgdz  }t          j        dd|          }||j        k                                    sJ dS r  r  r  s      r&   r  z3TestColumnFunctions.test_column_array_type_mismatch  r  r(   c                 T    t          j        t          t          j        g d           dS )zvTest that a TypeError is raised when a ColDefs is instantiated with
        a sequence of non-Column objects.
        rs   N)r  r  	TypeErrorr   r   )rX   s    r&   %test_new_coldefs_with_invalid_seqencez9TestColumnFunctions.test_new_coldefs_with_invalid_seqence  s$    
 	iyyy99999r(   c                     t          j        dddg          }t          j                            |          }d|d         j        k    sJ d|d         j        k    sJ d	S )
z}Test that ColDefs._init_from_array works with single element data-
        types as well as multi-element data-types
        r   )r  z<u4rP  )r  z>u2rf   rH  r  rP  r  N)r   r   r   r3   r   r   )rX   nd_arraycol_defss      r&   test_coldefs_init_from_arrayz0TestColumnFunctions.test_coldefs_init_from_array  si     :d+=|*LMMM;&&x00++++++++++++r(   c                    t          j        |                     d                    5 }t          |d         j        j        d         t                    sJ t          j        |d         j                  }t          j	        |          }t          |d         j        j        d         t                    rJ t          ||d         j                  sJ 	 ddd           n# 1 swxY w Y   t          j        |                     d                    5 }t          j        |d         j                  }t          j	        |          }t          ||d         j                  sJ 	 ddd           n# 1 swxY w Y   t          j        |                     d                    5 }t          j        |d         j                  }t          j	        |          }	t          |	|d         j                  sJ 	 ddd           n# 1 swxY w Y   t          j        |                     d                    5 }
t          j        |
d         j                  }t          j	        |          }t          j        t          d	
          5  t          ||
d         j                  sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )r  r_   r   r   Nr   r  r$  rt   z2Field 2 has a repeat count of 0 in its format coder  r  r  s                r&   r  zTestColumnFunctions.test_pickle  s    Ytyy++,, 
	7c!fn4Q7AAAAA\#a&+..F\&))F "#a&."8";WEEEEE!&#a&+666666
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 
	7 Ytyy..// 	73\#a&+..F\&))F!&#a&+666666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7
 Ytyy!56677 	73\#a&+..F\&))F!&#a&+666666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7
 Ytyy!12233 	;s\#a&+..F\&))FK   ; ; &fc!fk::::::	; ; ; ; ; ; ; ; ; ; ; ; ; ; ;		; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;r  c                     t          j        dd          }t          j        dd          }t          j        ||g          }|d         |d         k    sJ |d         |d         k    sJ dS )z5Tests that a `ColDefs` can be indexed by column name.r   r   r\  r   r   r   N)r   rD   r   )rX   r   r   r  s       r&   test_column_lookup_by_namez.TestColumnFunctions.test_column_lookup_by_name  sw     KS---KS---|QF##CyDG####CyDG######r(   c                    t           j                            t          j        dd          t          j        dd          g          }|j        d         }|j                            d           |j        j        j        dk    sJ d|_	        |j	        dk    sJ d|j
        vsJ |j
        d         dk    sJ |j        j        dgk    sJ t          j        t                    5  |j        d          d	d	d	           n# 1 swxY w Y   |j                            dd
           t          j        t                    5  |j        d          d	d	d	           n# 1 swxY w Y   |j        d
         j	        d
k    sJ |j        j        j        dk    sJ |j        j        d
gk    sJ |j        j        j        d
gk    sJ d|j        d
         _	        t          j        t                    5  |j        d
          d	d	d	           n# 1 swxY w Y   |j        d         j	        dk    sJ |j        j        j        dk    sJ |j        j        dgk    sJ |j        j        j        dgk    sJ d	S )a6  
        This is a test of the column attribute change notification system.

        After a column has been removed from a table (but other references
        are kept to that same column) changes to that column's attributes
        should not trigger a notification on the table it was removed from.
        r   r   )ri   r   )r   HELLOTTYPE2TTYPE1NGOODBYE)r  foo)r  )r   rW   r   rD   rC   r  r   r   r,   r   rT   r  r  r  change_name)rX   r  r   s      r&   *test_column_attribute_change_after_removalz>TestColumnFunctions.test_column_attribute_change_after_removal  s3     --[S)))4;s3+G+G+GH
 
 M#c"""z%////v    u|++++|H%,,,,}"se++++]8$$ 	 	M#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	!!#y111]8$$ 	 	M#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 }Y',	9999z%5555}"yk1111z!'I;6666(-i %]8$$ 	% 	%M)$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% }U#(E1111z%1111}"ug----z!'E7222222s6   &D  DD?EE E)HH
Hc                     t          j        ddg d          }t          j        |          }|j        |j        k    sJ |j        |j        k    sJ t          j        |j        |j        k              sJ dS )z
        Regression test for https://github.com/astropy/astropy/pull/4514

        Tests that columns with the X (bit array) format can be deep-copied.
        xcol5X)r   r   r   r   r   r  N	r   rD   r7  deepcopyr   ri   r   r   rj   )rX   r  r   s      r&   test_x_column_deepcopyz*TestColumnFunctions.test_x_column_deepcopy  s|     Kt???CCC]1w!&    yAH$$$$vbh!')*******r(   c                    t          j        ddddgg dg          }t          j        |          }|j        |j        k    sJ |j        |j        k    sJ t          j        |j        d         |j        d         k              sJ t          j        |j        d         |j        d         k              sJ t          j        dd	ddgg dg          }t          j        |          }|j        |j        k    sJ |j        |j        k    sJ t          j        |j        d         |j        d         k              sJ t          j        |j        d         |j        d         k              sJ d
S )z
        Regression test for https://github.com/astropy/astropy/pull/4514

        Tests that columns with the P/Q formats (variable length arrays) can be
        deep-copied.
        pcolr  r   rt   rl   r  r   qcolQJNr  )rX   r  r   r   r   s        r&   test_p_column_deepcopyz*TestColumnFunctions.test_p_column_deepcopy'  s^    KtQFIII3FGGG]1w!&    yAH$$$$vbhqkQWQZ/00000vbhqkQWQZ/00000[aVYYY4GHHH]2w"'!!!!yBI%%%%vbhqkRXa[011111vbhqkRXa[01111111r(   c                    t          j        t                    5 }t          j        ddg d          }ddd           n# 1 swxY w Y   dt          |j                  v sJ t          j        t                    5 }t          j        ddd	ddd
dddd
  
        }ddd           n# 1 swxY w Y   g d}|D ]}|t          |j                  v sJ dS )z
        Test that the keyword arguments used to initialize a Column, specifically
        those that typically read from a FITS header (so excluding array),
        are verified to have a valid value.
        r   rr   rZ  r  Nz(Column name must be a string able to fitrK   r   Nanrt   1)	ri   r   r   r   r   r   r   r   r   )
z(keyword arguments to Column were invalidTFORMTNULLTDISPTCTYPTCUNITCRPXTCRVLTCDLTTRPOS)r  r  AssertionErrorr   rD   r   valuer	   )rX   errr   err_msgsrE  s        r&   test_column_verify_keywordsz/TestColumnFunctions.test_column_verify_keywords=  s    ]>** 	BcAcAAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B9S^^KKKK];'' 	3 # #  A	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 
 
  	) 	)C#ci..(((((	) 	)s#   A  AA<B''B+.B+c                 X   t          j        t                    5 }t          j        dddg d          }ddd           n# 1 swxY w Y   dt          |j                  v sJ t          j        t                    5 }t          j        dddg d          }ddd           n# 1 swxY w Y   dt          |j                  v sJ t          j        t                    5 }t          j        ddd	g d          }ddd           n# 1 swxY w Y   d
t          |j                  v sJ dS )at  
        Regression test for https://github.com/astropy/astropy/pull/6359

        Test the validation of the column start position option (ASCII table only),
        corresponding to ``TBCOL`` keyword.
        Test whether the VerifyError message generated is the one with highest priority,
        i.e. the order of error messages to be displayed is maintained.
        r   r  rs   )ri   r   rj   Nz=start option (TBCOLn) is not allowed for binary table columnsrr   z;start option (TBCOLn) must be a positive integer (got 'a').z-56z;start option (TBCOLn) must be a positive integer (got -56).)r  r  r	   r   rD   r   r  )rX   r  r   s      r&   test_column_verify_startz,TestColumnFunctions.test_column_verify_startd  s=    ];'' 	I3C3iiiHHHA	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	INRUIS
 S
 
 
 
 
 ];'' 	I3C3iiiHHHA	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	ILPSIQ
 Q
 
 
 
 
 ];'' 	K3C5			JJJA	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	KLPSIQ
 Q
 
 
 
 
 
 
s5   AAA=B$$B(+B( DDDkeysZrk   )r  r  22Erm   g333333@r   zE.5c                 b   t          j        t                    5 }t          j        d|d         |d                   }ddd           n# 1 swxY w Y   |                                D ]E}|t          |j                  v sJ t          ||                   t          |j                  v sJ FdS )z
        Additional tests for verification of 'TFORM' and 'TDISP' keyword
        arguments used to initialize a Column.
        rK   r  r  )ri   r   N)r  r  r	   r   rD   r  r   r  )rX   r  r  r   keys        r&   test_column_verify_formatsz.TestColumnFunctions.test_column_verify_formats  s     ];'' 	M3E$w-d7mLLLA	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 99;; 	4 	4C#ci..((((tCy>>S^^33333	4 	4s   $A

AAN)rc  rd  re  r  r  r  r  r  r  r  r  r  r  r  r  r  rf  rg  r  r   r=  r  r>   r(   r&   r  r  (  s@       a$ a$ a$F7 7 7&( ( (: : :, , ,&; &; &;P	$ 	$ 	$/3 /3 /3b+ + +2 2 2,%) %) %)N
 
 
8 [C((D))#&&bj115))	
	 	
4 
4	 	
4 
4 
4r(   r  c                      t          j        g d          } t          j        d| d          }t          j                            |g          }|j        d= d|j        d         _        d S )Nrs   r   rk   r  r  r   r   )	r   rj   r   rD   rW   r   _headerrC   r   )r   rK   r   s      r&   test_regression_5383r    sc     	A
+3a
4
4
4C


'
'
.
.CHCKNr(   c                     ddl m}   | g dg dg dgg dg d          }d|d	         _        d
|d         _        d|j        d<   t	          j        t          d          5 }t          j        |t          j	        ddi                    }d d d            n# 1 swxY w Y   t          |          dk    sJ dD ]*}t          j        ||         |j        |                   sJ +|j                            d          |j                            d          k     sJ |j        d         dk    sJ |j        d         dk    sJ d S )Nr   r
   rs   r  )r   rB  r  )r7   U1r   )r,   r   zm/sr   z
not-a-unitr   barr  z''not-a-unit' did not parse as fits unitr  r  r   rS   r`   TUNIT1r  r	  )astropy.tabler   r   metar  r  r   r   rW   r  r+   r   r  r   rT   index)r   r  wr   r   s        r&   test_table_to_hdur'    s   ######E	OOO___5oo  E
 E#JO"E#JOEJu	E
 
 
 G	
uT[&!-E-EFFFG G G G G G G G G G G G G G G q66Q;;;; ; ;~eDk38D>:::::: :H%%
(8(8(B(BBBBB:e%%%%:f""""""s   !+BBBc                     t          j        ddgdt          fdt          fg                              t
          j                  } | d         }| d         }t          d t          ||          D                       sJ d S )	N)r
  rt   )r  rn   r   r  rf   r   r   c              3   (   K   | ]\  }}||k    V  d S )Nr>   )r?   r   r   s      r&   	<genexpr>z2test_regression_scalar_indexing.<locals>.<genexpr>  s*      00$!QqAv000000r(   )	r   rj   r  r&  r   r   r+  r   r  )r   x1ax1bs      r&   test_regression_scalar_indexingr-    s     	(H%sElS#J-GHHHMM	 	A A$C
D'C00#c3--0000000000r(   c                 8   g }|                     t          j        ddd                     |                     t          j        ddd                     |                     t          j        dd	                     t          j        |          }t          j                    }d|d
<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d |d!<   d"|d#<   t          j        t                    5 }t          j        	                    ||          }d d d            n# 1 swxY w Y   t          |d$         j                                      d%          sJ |j        d$         j        dk    sJ |j        d&         j        dk    sJ |j        d'         j        J |j        d
         dk    sJ |j        d         dk    sJ d|j        vsJ |j        d$         j        J |j        d&         j        J |j        d'         j        J d(|j        vsJ |j        d         dk    sJ |j        d         dk    sJ |j        d!         d k    sJ |j        d#         d"k    sJ | d)z  }|                    |           t%          j        d*+          5 }t          j        |          5 }|d&         }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t+          |          d$k    sJ |j        d$         j        dk    sJ |j        d&         j        dk    sJ |j        d'         j        J |j        d
         dk    sJ |j        d         dk    sJ d|j        vsJ |j        d$         j        J |j        d&         j        dk    sJ |j        d'         j        dk    sJ d(|j        vsJ |j        d         dk    sJ |j        d         dk    sJ |j        d!         d k    sJ |j        d#         d"k    sJ d S ),NTIMEr   r8  r  RAWXrO  pixelRAWYr\  r"  mTUNIT2TUNIT3zRA---TANTCTYP2ANGLETCTYP3g     8TCRVL2TCRVL3r
  TCRPX2TCRPX3i @  TALEN2i   TALEN3angstromTCUNI2degTCUNI3g      ?RAr  DECr   z4The following keywords are now recognized as specialr   rt   TCTYP1r  T)record)r   r   rD   r   r  r  r  r   rW   r   r   messagerD  rC   r   rT   r   r   warningscatch_warningsr   r+   )	r@  rK   ra  r  warning_listr   r/  r   hdu2s	            r&   $test_new_column_attributes_preservedrL    sj    CJJt{t#>>>???JJt{t'BBBCCCJJt{t444555	c		B
+--C CMCMCM CMCMCMCMCMCMCMCMCMCM CICJ	/	0	0 5L++B445 5 5 5 5 5 5 5 5 5 5 5 5 5 5|A&''22>     ;q>#%%%%;q>'))));q>&&&:h3&&&&:h7****3:%%%%
 ;q>$,,,;q>$,,,;q>$,,,3:%%%%:h:----:h7**** :ds"""":e#### +%HKK 
	 	-	-	- Yx   	D7D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	               |!!!! <?3&&&&<?7****<?''';x C'''';x G++++4;&&&&
 <?%---<?%3333<?%00004;&&&&;x J....;x G++++ ;t####;u$$$$$$sH   !D88D<?D<)K*>	KK*K	K*K	K**K.1K.c                    | dz  }t          j        d d d          }|                    |           t          j        |          5 }|d         j        j        dk    sJ 	 d d d            n# 1 swxY w Y   | dz  }t          j        d d d          }|                    |d           t          j        |          5 }|d         j        j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nzemptytable.fitsr  )rT   r   r   r   zemptytable.fits.gzTr   )r   rW   r   r   r   size)r@  ofiler   r   s       r&   test_empty_tablerP  ;  s   ((E

$T
?
?
?CKK	5		 +TF| %*****+ + + + + + + + + + + + + + + ++E

$T
?
?
?CKKK&&&	5		 +TF| %*****+ + + + + + + + + + + + + + + + + +s$   A,,A03A0>C%%C),C)c           	         | dz  }t           j                            t          j        ddt	          j        d                    g          }d|j        d<   |                    |d	           t          j        |          5 }|d
         j        d         dk    sJ t          j
        t                    5 }|                    d           d d d            n# 1 swxY w Y   t          |d         j                  dk    sJ t          |d         j                                      d          sJ |d
         j        d         dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r	  r   r  rh   A3DTABLEXTENSIONignoreoutput_verifyr   fixr   zVerification reported errors:rt   z+Converted the XTENSION keyword to BINTABLE.BINTABLE)r   rW   r   rD   r   r  rT   r   r   r  r  r   verifyr   rG  rU  )r@  testfiler   r   r&  s        r&   test_a3dtabler[  K  s   +%H


'
'	%29R==	A	A	AB C (CJzKKK111	8		 	8Aw~j)Z7777\,-- 	KK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 1Q4<  $CCCCC1Q4<  ))*WXXXXXAw~j)Z77777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s7   3E5CEC	EC	A+EEEc                 4   t          j                    }d |j        d<   t          j        |j        j        d         _        | dz  }|                    |d           t          j        |          5 }|d         j	        J 	 d d d            d S # 1 swxY w Y   d S )Nr	  r  rT  rU  r   )
r   rW   rT   r   nancards_valuer   r   r   )r@  r   rZ  r   s       r&   test_invalid_filer`  _  s    



CCJu%'VCJU"+%HKKK111	8		 (Aw|''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   /BBBc                 Z   | dz  }d}t          |          }t          dg di          }|                    |           t          j        |d          5 }||d         j        d<   d d d            n# 1 swxY w Y   t          j        t                    5  t          j	        |          }d d d            n# 1 swxY w Y   t          |d         j        t                    sJ t          j	        |d	
          }t          |d         j        t                    sJ t          j        t                    5  t          j	        |d
           d d d            n# 1 swxY w Y   t          j        t                    5  t          j	        |d
           d d d            d S # 1 swxY w Y   d S )Nzinvalid_unit.fitsz1 / (MeV sr s)r   rs   r@  rA  r   r"  silent)unit_parse_strictraisewarn)r   r   r  r   r   rT   r  r  r   r   r0   r   r   r  r  )r@  pathinvalid_unitr   r   r   s         r&   test_unit_parse_strictrh  k  s   ))D $LDsIIIAGGDMMM	4h	'	'	' 04#/Qx 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
l	#	#  Jt               afk#344444
48444Aafk#344444	z	"	" 4 4
4733334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 
l	#	# 3 3
4622223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3sH   A22A69A6B77B;>B;5EEE<F  F$'F$)7
contextlibr7  rl  r  r  r  rH  numpyr   r  r   r   rn  ri  ImportError
astropy.ior   astropy.io.fits.columnr   r   r   astropy.io.fits.utilr   astropy.io.fits.verifyr	   r#  r   astropy.unitsr   r   r   astropy.utils.compatr   r   astropy.utils.exceptionsr   r   conftestr   r'   r;   rN   rP   contextmanagerr2  rs  r  r  r'  r-  rL  rP  r[  r`  rh  r>   r(   r&   <module>ru     s        				  				 



       # # # # # #OOOMM   MMM       G G G G G G G G G G - - - - - - . . . . . .       > > > > > > > > > > ? ? ? ? ? ? ? ? R R R R R R R R " " " " " "  80 0 0fD D D"\,: \,: \,: \,: \,: \,: \,: \,:~X 9 9 9"o0 o0 o0 o0 o0L o0 o0 o0jl4 l4 l4 l4 l4, l4 l4 l4^  # # #:
1 
1 
1m% m% m%`+ + + 8 8 8(	( 	( 	(3 3 3 3 3s   3 ==