
    HR-eL                        d 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dl
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mZ ddlmZ dd	lmZmZ  eed
          rej        dk    Znej                             d          Zd Z!d Z"d Z#d Z$d>dZ%e
j&        '                    d          d             Z(e
j&        '                    d          d             Z)e
j&        '                    d          d             Z* G d d          Z+ G d d          Z,d Z-d Z. G d d          Z/ G d  d!e/          Z0 G d" d#e/          Z1 G d$ d%e/          Z2d& Z3 e	j4        d'(          d)             Z5d* Z6d+ Z7d?d,Z8 ej9        d-          d.             Z:d/ Z;d0 Z<d1 Z=d2 Z>d3 Z?d4 Z@d5 ZAd6 ZBd7 ZCd8 ZDd9 ZEd: ZFd; ZGd< ZHd= ZIdS )@z+
This is a set of regression tests for vo.
    N)mock)assert_array_equaltree)W39VOTableSpecError	VOWarning)parseparse_single_tablevalidate)validate_schema)get_pkg_data_filenameget_pkg_data_filenamesfloat_repr_stylelegacywinc                     t           j                            d          rd S 	 t          | |          \  }}}n# t          $ r Y d S w xY w|dk    s
J d            d S )Nr   r   z,File did not validate against VOTable schema)sysplatform
startswithr   OSError)filenameversionrcstdoutstderrs        @lib/python3.11/site-packages/astropy/io/votable/tests/vo_test.pyassert_validate_schemar   #   sx    
|u%% ,Xw??FFF    777B77777s   8 
AAc                     t          j        d          5  t          t          d                    } d d d            n# 1 swxY w Y   t	          | t
          j                  sJ t          | j                  dk    sJ d S )Nignoreoverdata/regression.xml   )	nperrstater   r   
isinstancer   Tablelenarray)tables    r   test_parse_single_tabler,   /   s    	(	#	#	# Q Q"#89N#O#OPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q eTZ(((((u{q      s   ?AAc                  P   t          j        d          5  t          t          d          d          } d d d            n# 1 swxY w Y   t	          | t
          j                  sJ t          | j                  dk    sJ t          | j        j	        j
                  dk    sJ d S )Nr    r!   r#      table_number   )r%   r&   r   r   r'   r   r(   r)   r*   dtypenames)table2s    r   test_parse_single_table2r5   7   s    	(	#	#	# 
 
#!"788q
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 fdj)))))v|!!!!v|!'((B......s   AAAc                      t          j        t                    5  t          t	          d          d           d d d            d S # 1 swxY w Y   d S )Nr#      r/   )pytestraises
IndexErrorr   r        r   test_parse_single_table3r=   B   s    	z	"	" Y Y01FGGVWXXXXY Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Ys   AA
A
Fr.   c                    t          t          d          |          }|                                }g d}t          j        dk    rYg }|D ]R}t          |          }|d                             dd          |d<   |                    t          |                     S|}|j	        j
        |k    sJ |                    t          | dz            |           t          t          | dz            |j                   |dk    r!d	|                                _        d
|_        nB|dk    r<d|                                j        d<   d|                                _        d|_        t#          t          | dz            d          5 }|                    ||           d d d            n# 1 swxY w Y   t          t          | dz            |j                   t#          t          | dz            d          5 }t          ||          }	d d d            n# 1 swxY w Y   d|	                                _        |	                    t          | dz            d|           t          t          | dz            |j                   t#          t          d|j         d          d          5 }|                                }
d d d            n# 1 swxY w Y   t#          t          | dz            d          5 }|                                }d d d            n# 1 swxY w Y   t          j                            t+          j        |
|dd                     |
|k    sJ |	                    t          | dz            d|           t/          j        t          | dz            d          5 }|                                }d d d            n# 1 swxY w Y   d |D             }d  |
D             }
|
|k    sJ d S )!Nr#   )_debug_python_based_parser)))zstring teststring_test|O8))fixed string teststring_test_2<U10)unicode_testrA   ))zunicode testfixed_unicode_testrD   ))zstring array teststring_array_testz<U4)unsignedBytez|u1)shortz<i2)int<i4)longz<i8)double<f8)floatz<f4)r*   rA   )bit|b1)bitarrayrQ   r7      )bitvararrayrA   )bitvararray2rA   )floatComplexz<c8)doubleComplex<c16)doubleComplexArrayrA   )doubleComplexArrayFixedrY   )rT   )booleanrQ   )booleanArrayrQ   )   )nullsrK   )nulls_arrayrK   rT   rT   )
precision1rN   )
precision2rN   )doublearrayrA   )	bitarray2rQ   )   bigr.   <>zregression.tabledata.xmlbinary1.1rT   Tversion_1_3_or_laterbinary21.3zregression.binary.xmlwbrb	tabledatazregression.bin.tabledata.xmltesting)_astropy_versionr?   z$data/regression.bin.tabledata.truth.z.xmlutf-8encodingtruthoutputfromfiletofilezregression.bin.tabledata.xml.gzc                 \    g | ])}|                     d                                           *S )rt   )decoderstrip.0xs     r   
<listcomp>z$_test_regression.<locals>.<listcomp>   s0    999Qahhw&&((999r<   c                 6    g | ]}|                                 S r;   )r~   r   s     r   r   z$_test_regression.<locals>.<listcomp>   s     '''AQXXZZ'''r<   )r
   r   get_first_tabler   	byteorderlistreplaceappendtupler*   r2   to_xmlstrr   r   format_configopen	readlinesr   
writelinesdifflibunified_diffgzipGzipFile)tmp_path_python_basedbinary_modevotabler+   dtypes
new_dtypesr2   fdvotable2rw   rx   gzfds                r   _test_regressionr   G   s   344#0  G ##%%E  F< }
 	, 	,EKKEQx''S11E!HeEll++++;&&&&NNH1122#0     3x*DDEEwWWWa+3!!(			DH!!)*@A+4!!( 
c(4455t	<	< ErmDDDE E E E E E E E E E E E E E E3x*AABBGOTTT	c(4455t	<	< GFFFG G G G G G G G G G G G G G G(3H%OOH5566"#0    
 H5566   
H7?HHH	
 	
 	
 
 
 
 
               
c(;;<<w	O	O	O  SU                             
 JUFWXNNN   F???? OOH8899"#0    
 
s8&GGHH$	O	O "SW!!" " " " " " " " " " " " " " "99&999F'''''EF??????sZ   F++F/2F/;HH H1KKK>LL#&L#4OOOlegacy_float_reprc                     t          j        t                    5  t          | d           d d d            d S # 1 swxY w Y   d S )NFr8   warnsr   r   r   s    r   test_regressionr      s     
c		 * *5)))* * * * * * * * * * * * * * * * * *   8<<c                     t          j        t                    5  t          | d           d d d            d S # 1 swxY w Y   d S )NTr   r   s    r   #test_regression_python_based_parserr      s     
c		 ) )4((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )r   c                     t          j        t                    5  t          | dd           d d d            d S # 1 swxY w Y   d S )NFrT   r   r   s    r   test_regression_binary2r      s     
c		 - -5!,,,- - - - - - - - - - - - - - - - - -s   9= =c                       e Zd Zd Zd ZdS )
TestFixupsc                    t          j        d          5  t          t          d                                                    | _        d d d            n# 1 swxY w Y   | j        j        | _        | j        j        j        | _        d S Nr    r!   r#   )r%   r&   r
   r   r   r+   r*   maskselfs    r   setup_classzTestFixups.setup_class   s    [h''' 	  	 %&;<< o J	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 
 Z%
J$)			s   4AAAc                 R    t          | j        d         | j        d                    d S )NrC   rB   r   r*   r   s    r   test_implicit_idzTestFixups.test_implicit_id   s'    4:o6
CV8WXXXXXr<   N)__name__
__module____qualname__r   r   r;   r<   r   r   r      s7        * * *Y Y Y Y Yr<   r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestReferencesc                 ,   t          j        d          5  t          t          d                    | _        d d d            n# 1 swxY w Y   | j                                        | _        | j        j        | _        | j        j        j        | _        d S r   	r%   r&   r
   r   r   r   r+   r*   r   r   s    r   r   zTestReferences.setup_class       [h''' 	O 	O !67L!M!MNNDL	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O \1133
Z%
J$)			   "AAAc                     | j         j        d         j        d         }t          |t          j                  sJ |                                j        dk    sJ |                                j        dk    sJ d S )Nr.   r   r\   )	r+   groupsentriesr'   r   FieldRefget_refnamedatatype)r   fieldrefs     r   test_fieldrefzTestReferences.test_fieldref   sw    :$Q'/2(DM22222!!&)3333!!*i777777r<   c                     | j         j        d         j        d         }t          |t          j                  sJ |                                j        dk    sJ |                                j        dk    sJ d S )Nr   INPUTrO   )	r+   r   r   r'   r   ParamRefr   r   r   )r   paramrefs     r   test_paramrefzTestReferences.test_paramref   sw    :$Q'/2(DM22222!!&'1111!!*g555555r<   c                     t          t          | j        j        d                                                             dk    sJ d S )Nr.   rT   )r)   r   r+   r   iter_fields_and_paramsr   s    r   &test_iter_fields_and_params_on_a_groupz5TestReferences.test_iter_fields_and_params_on_a_group   s?    4
)!,CCEEFFGG1LLLLLLr<   c                     t          t          | j        j        d                                                             dk    sJ d S Nr.   )r)   r   r+   r   iter_groupsr   s    r   test_iter_groups_on_a_groupz*TestReferences.test_iter_groups_on_a_group   s?    4
)!,88::;;<<AAAAAAr<   c                 x    t          t          | j                                                            dk    sJ d S )N	   )r)   r   r   r   r   s    r   test_iter_groupszTestReferences.test_iter_groups   s9     400223344999999r<   c                     t          | j                                                  }t          |d         j        j        d         |d         j        j        d                   D ]\  }}t          ||           d S )Nr   r.   )r   r   iter_tableszipr*   datar   )r   tablesr   ys       r   test_ref_tablezTestReferences.test_ref_table   ss    dl..0011q	,Q/1Ea1HII 	% 	%DAqq!$$$$	% 	%r<   c                 x    t          t          | j                                                            dk    sJ d S r   )r)   r   r   iter_coosysr   s    r   test_iter_coosyszTestReferences.test_iter_coosys   s7    400223344999999r<   N)r   r   r   r   r   r   r   r   r   r   r   r;   r<   r   r   r      s        * * *8 8 86 6 6M M MB B B: : :
% % %
: : : : :r<   r   c                  >   g d} t          t          d          |                                           }|j        }|j        j        }|d         d         dk    sJ g d} | D ]}t          j        ||                   rJ t          j        |d                   sJ d S )	N)r   r$      r#   columnsr@   r   String & testr@   rH   rR   rE   r
   r   r   r*   r   r%   allr   r+   r*   r   cs        r   test_select_columns_by_indexr     s    jjG344g  o 
 KE;D"o5555999G # #6$q'??""""6$~&'''''''r<   c                  6   g d} t          t          d          |                                           }|j        }|j        j        }|d         d         dk    sJ | D ]}t          j        ||                   rJ t          j        |d                   sJ d S )Nr   r#   r   r@   r   r   rE   r   r   s        r   test_select_columns_by_namer     s    999G344g  o 
 KE;D"o5555 # #6$q'??""""6$~&'''''''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#S )$	TestParsec                 ,   t          j        d          5  t          t          d                    | _        d d d            n# 1 swxY w Y   | j                                        | _        | j        j        | _        | j        j        j        | _        d S r   r   r   s    r   r   zTestParse.setup_class  r   r   c                     t          | j        d         j        j        t          j                  sJ t          | j        d         g d           d S )Nr@   )r   zString &amp; testXXXX r   
issubclassr*   r2   typer%   object_r   r   s    r   test_string_testzTestParse.test_string_test%  sV    $*]39>
KKKKKJ}%BBB	
 	
 	
 	
 	
r<   c                     t          | j        d         j        j        t          j                  sJ t          | j        d         g d           d S )NrC   )z
Fixed stri
0123456789r   r   r   r   r*   r2   r   r%   unicode_r   r   s    r   test_fixed_string_testz TestParse.test_fixed_string_test,  sV    $*_5;@"+NNNNNJ')U)U)U	
 	
 	
 	
 	
r<   c                     t          | j        d         j        j        t          j                  sJ t          | j        d         g d           d S )NrE   )u   Ceçi n'est pas un pipe   வணக்கம்r   r   r   r   r   s    r   test_unicode_testzTestParse.test_unicode_test2  sV    $*^4:?LLLLLJ~&PPP	
 	
 	
 	
 	
r<   c                     t          | j        d         j        j        t          j                  sJ t          | j        d         g d           d S )NrF   )u   Ceçi n'estr   r   r   r   r   r   s    r   test_fixed_unicode_testz!TestParse.test_fixed_unicode_test9  sX    $*%9:@Er{SSSSSJ+,JJJ	
 	
 	
 	
 	
r<   c                     t          | j        d         j        j        t          j                  sJ t          | j        d         g d           t	          j        | j        d                   rJ d S )NrH   )      r   r  r  )	r   r*   r2   r   r%   uint8r   anyr   r   s    r   test_unsignedBytezTestParse.test_unsignedByte@  sh    $*^4:?JJJJJ4:n57N7N7NOOO6$)N34444444r<   c                     t          | j        d         j        j        t          j                  sJ t          | j        d         g d           t	          j        | j        d                   rJ d S )NrI   )i     i r	  r	  )	r   r*   r2   r   r%   int16r   r  r   r   s    r   
test_shortzTestParse.test_shortE  sh    $*W-38"(CCCCC4:g.0R0R0RSSS6$)G,-------r<   c                     t          | j        d         j        j        t          j                  sJ t          | j        d         g d           t          | j        d         g d           d S )NrJ   )i   ii   i[FFFFT)r   r*   r2   r   r%   int32r   r   r   s    r   test_intzTestParse.test_intJ  sr    $*U+16AAAAAJuXXX	
 	
 	
 	49U+-O-O-OPPPPPr<   c                     t          | j        d         j        j        t          j                  sJ t          | j        d         g d           t          | j        d         g d           d S )NrL   )l   e:q r  l         l   r  )FTFFT)r   r*   r2   r   r%   int64r   r   r   s    r   	test_longzTestParse.test_longQ  sx    $*V,27BBBBBJv  		
 		
 		
 	49V,.O.O.OPPPPPr<   c                     t          | j        d         j        j        t          j                  sJ t          | j        d         ddt          j        t          j        t          j         g           t          | j	        d         g d           d S )NrM   g    !@        )FFFTF)
r   r*   r2   r   r%   float64r   infnanr   r   s    r   test_doublezTestParse.test_double_  s~    $*X.492:FFFFFJx <bfbfrvg"N	
 	
 	
 	49X.0R0R0RSSSSSr<   c                    t          | j        d         j        j        t          j                  sJ t          | j        d         ddt          j        t          j        t          j        g           t          | j	        d         g d           d S )NrO   g      ?r  r  )
r   r*   r2   r   r%   float32r   r  r  r   r   s    r   
test_floatzTestParse.test_floatf  ss    $*W-38"*EEEEE4:g.c2626260RSSS49W-/Q/Q/QRRRRRr<   c                 ,   t          | j        d         j        j        t          j                  sJ g ddgddggddgddgdd	gd
dggddggddggg}t          | j        d         |          D ]Q\  }}t          ||          D ];\  }}t          |j        j        t          j                  sJ t          ||           <R| j        j	        d         d         j
        d         d         sJ | j        j	        d         d         j
        d         d         sJ d S )Nr*   *          "   8   N   W   A   +            r7   r   r^   r.   )r   r*   r2   r   r%   r   r   r  r   r   r   r   matchaba0b0s         r   
test_arrayzTestParse.test_arrayk  s<   $*W-38"*EEEEE"XBx "XBx"bB84"XJ"XJ
 
7+U33 	+ 	+DAq a)) + +B!"(-:::::"2r****+ zw'*/215555zw'*/21555555r<   c                     t          | j        d         j        j        t          j                  sJ t          | j        d         g d           d S )NrP   TFTFFr   r*   r2   r   r%   bool_r   r   s    r   test_bitzTestParse.test_bit}  sK    $*U+16AAAAA4:e,.O.O.OPPPPPr<   c                 @    t          | j        d         g d           d S )NrP   r  r   r   r   s    r   test_bit_maskzTestParse.test_bit_mask  s&    49U+-O-O-OPPPPPr<   c                 2   t          | j        d         j        j        t          j                  sJ | j        d         j        dk    sJ t          | j        d         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ddgddgddggddgddgddggg           d S )NrR   )r$   r7   rT   TF)r   r*   r2   r   r%   r5  shaper   r   s    r   test_bitarrayzTestParse.test_bitarray  s    $*Z06;RXFFFFFz*%+y8888Jz"tudm<t=e}uen=%%@%%@		
 		
 		
 		
 		
r<   c                     t          | j        d         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ddgddgddggddgddgddggg           d S )NrR   FTr8  r   s    r   test_bitarray_maskzTestParse.test_bitarray_mask  s    Ij!%%@%%@%%@d|dD\:d|dD\:		
 		
 		
 		
 		
r<   c                 j   t          | j        d         j        j        t          j                  sJ g dg dg dg g g}t          | j        d         |          D ]\  }}t          ||           g dg dg dddg}t          | j        d         |          D ]\  }}t          |j        |           d S )NrU   )TTTFFFFF)TFTFT)FFFF)	r   r*   r2   r   r%   r   r   r   r   )r   r,  r-  r.  
match_masks        r   test_bitvararrayzTestParse.test_bitvararray  s    $*]39>
KKKKK///,,,
 
=1599 	% 	%DAqq!$$$$!!!//////

 
=1:>> 	* 	*DAqqvq))))	* 	*r<   c                    t          | j        d         j        j        t          j                  sJ g ddgddgddggddgddgddgggddgddgddgggg g g}t          | j        d         |          D ]^\  }}t          ||          D ]H\  }}|j        dk    sJ t          |j        j        t          j                  sJ t          ||           I_d S )NrV   FTrS   )
r   r*   r2   r   r%   r   r   r;  r5  r   r+  s         r   test_bitvararray2zTestParse.test_bitvararray2  s   $*^4:?LLLLLu>ue}= TlT4L4,78	
 
>2E:: 	+ 	+DAqa)) + +Bx6))))!"(-:::::"2r****+	+ 	+r<   c           	      0   t          | j        d         j        j        t          j                  sJ t          | j        d         t          j        dz   ddt          j        dz   t          j        dz   g           t          | j        d         g d           d S )NrW                                 TFFTT)	r   r*   r2   r   r%   	complex64r   r  r   r   s    r   test_floatComplexzTestParse.test_floatComplex  s    $*^4:?NNNNNJ~&Vb[&'26B;D	
 	
 	
 	49^46V6V6VWWWWWr<   c           	      J   t          | j        d         j        j        t          j                  sJ t          | j        d         t          j        dz   ddt          j        t          j        dz  z   t          j        dz   g           t          | j	        d         g d           d S )NrX   rF  rG  y              ?rH  )
r   r*   r2   r   r%   
complex128r   r  r  r   r   s    r   test_doubleComplexzTestParse.test_doubleComplex  s    $*_5;@"-PPPPPJ'Vb[&'26RVb[+A26B;O	
 	
 	
 	49_57W7W7WXXXXXr<   c                     t          | j        d         j        j        t          j                  sJ d | j        d         D             g dk    sJ d S )NrZ   c                 ,    g | ]}t          |          S r;   )r)   r   s     r   r   z5TestParse.test_doubleComplexArray.<locals>.<listcomp>  s    AAA1AAAAr<   )r   rT   rT   r   r   )r   r*   r2   r   r%   r   r   s    r   test_doubleComplexArrayz!TestParse.test_doubleComplexArray  sY    $*%9:@ErzRRRRRAA
+? @AAA___TTTTTTr<   c                     t          | j        d         j        j        t          j                  sJ t          | j        d         g d           d S )Nr\   r3  r4  r   s    r   test_booleanzTestParse.test_boolean  sK    $*Y/5:BHEEEEE4:i02S2S2STTTTTr<   c                 @    t          | j        d         g d           d S )Nr\   r  r8  r   s    r   test_boolean_maskzTestParse.test_boolean_mask  s&    49Y/1S1S1STTTTTr<   c           	          t          | j        d         j        j        t          j                  sJ t          | j        d         g dg dg dg dg dg           d S )Nr]   TTTT)TTFTFFFFr4  r   s    r   test_boolean_arrayzTestParse.test_boolean_array  s    $*^4:?JJJJJJ~&((()))))),,,,,,		
 		
 		
 		
 		
r<   c           	      Z    t          | j        d         g dg dg dg dg dg           d S )Nr]   rW  )FFTFrV  r8  r   s    r   test_boolean_array_maskz!TestParse.test_boolean_array_mask  sZ    In%,,,,,,+++((((((		
 		
 		
 		
 		
r<   c                 z    t          | j        d         g d           t          | j        d         g d           d S )Nr_   )r   rT   r\  r\  )FTFTTr   r*   r   r   s    r   
test_nullszTestParse.test_nulls  sD    4:g.0B0B0BCCC49W-/O/O/OPPPPPr<   c           
          t          | j        d         ddgddggddgddggddgddggddgddggddgddggg           t          | j        d         ddgddggddgddggddgddggddgddggddgddggg           d S )	Nr`   r\  r   r.   rT   r7   TFr]  r   s    r   test_nulls_arrayzTestParse.test_nulls_array  s    J}%bB8$Q!Q a2q'"R1b'"bB8$		
 		
 		
 	Im$d|,%0u..d|,		
 		
 		
 		
 		
r<   c           
         t          | j        d         j        j        t          j                  sJ t          | j        d         d                   dk    sJ t          | j        d         d         ddt          j        t          j         t          j	        ddg           t          | j        j
        d         d         j        g d           d S )Nrd   r   r.   r(  )FFFFFFT)r   r*   r2   r   r%   r   r)   r   r  r  r   r   r   s    r   test_double_arrayzTestParse.test_double_array  s    $*]39>
KKKKK4:m,Q/00A5555J}%a(1a"&"&!R*P	
 	
 	
 	JOM*1-2<<<	
 	
 	
 	
 	
r<   c                 L    t          | j        d         d         g d           d S )Nre   r   )TTTTFFFFTTTTFFFFr   r   s    r   test_bit_array2zTestParse.test_bit_array2  s<    J{#A&  	
 	
 	
 	
 	
r<   c                     t          j        | j        d         d                   rJ t          j        | j        d         dd                    sJ d S )Nre   r   r.   )r%   r  r   r   r   s    r   test_bit_array2_maskzTestParse.test_bit_array2_mask5  sP    6$)K0344444vdi,QRR01111111r<   c                 T    | j                             d          }|j        dk    sJ d S )NJ2000eq_FK5)r   get_coosys_by_idsystem)r   coosyss     r   test_get_coosys_by_idzTestParse.test_get_coosys_by_id9  s0    ..w77}((((((r<   c                     t          | j                            d                    }|d         j        dk    sJ |d         j        j        dk    sJ d S )Nmyintr   rJ   i)r   r   get_fields_by_utyper   valuesmin)r   fieldss     r   test_get_field_by_utypez!TestParse.test_get_field_by_utype=  sW    dl66w??@@ay~&&&&ay#u,,,,,,r<   c                     | j                             d          }|j        dk    sJ | j         j        dk    r'| j                             d          }|j        dk    sJ d S d S )NQUERY_STATUSOKrk   	ErrorInfoz/One might expect to find some INFO here, too...)r   get_info_by_idvaluer   )r   infos     r   test_get_info_by_idzTestParse.test_get_info_by_idB  sq    |**>::zT!!!!<5((<..{;;D:!RRRRR )(RRr<   c                 X   dt          | j                  v sJ t          t          | j                                                  d                   dk    sJ t          t          | j                                                             t          | j        j                  dk    sJ d S )Nz3 tablesr   z^<PARAM ID="awesome" arraysize="*" datatype="float" name="INPUT" unit="deg" value="[0.0 0.0]"/>z[</>])reprr   r   r   r   	resourcesr   s    r   	test_reprzTestParse.test_reprJ  s    T$,//////dl99;;<<Q?@@:: : : :
 	T$,**,,--... DL*++w666666r<   N)%r   r   r   r   r   r   r   r  r  r  r  r  r  r  r1  r6  r9  r<  r>  rB  rD  rJ  rM  rP  rR  rT  rX  rZ  r^  r`  rb  rd  rf  rm  rt  r|  r  r;   r<   r   r   r     s9       * * *
 
 

 
 

 
 

 
 
5 5 5
. . .
Q Q QQ Q QT T TS S S
6 6 6$Q Q QQ Q Q
 
 


 

 

* * **+ + +$X X XY Y YU U UU U UU U U
 
 


 

 

Q Q Q
 
 
,	
 	
 	

 
 
.2 2 2) ) )- - -
S S S7 7 7 7 7r<   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestThroughTableDatac                 4   t          j        d          5  t          t          d                    }d d d            n# 1 swxY w Y   t	          j                    x| _        }t          j        t                    5  |
                    |           d d d            n# 1 swxY w Y   |                    d           t          |          | _        | j                                        | _        | j        j        | _        | j        j        j        | _        d S )Nr    r!   r#   r   )r%   r&   r
   r   ioBytesIOxmloutr8   r   r   r   seekr   r   r+   r*   r   r   r   bios      r   r   z TestThroughTableData.setup_classY  sm   [h''' 	J 	J12GHHIIG	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J JLL(c\# 	  	 NN3	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 Szz\1133
Z%
J$)			s!   ?AA=BB#&B#c                 @    t          | j        d         g d           d S )NrP   r@  r8  r   s    r   r9  z"TestThroughTableData.test_bit_maskh  s&    49U+-P-P-PQQQQQr<   c                 H    t          j        | j        d                   rJ d S NrR   r%   r  r   r   s    r   r>  z'TestThroughTableData.test_bitarray_maskk  %    6$)J/0000000r<   c                 H    t          j        | j        d                   rJ d S Nre   r  r   s    r   rf  z)TestThroughTableData.test_bit_array2_maskn  %    6$)K01111111r<   c                     |dz  }t          |d          5 }|                    | j                                                   d d d            n# 1 swxY w Y   t	          |d           d S )Nztest_through_tabledata.xmlro   rk   )r   writer  getvaluer   )r   r   fnfs       r   test_schemaz TestThroughTableData.test_schemaq  s     44"d^^ 	,qGGDK((**+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,r5)))))s   -AAAN)r   r   r   r   r9  r>  rf  r  r;   r<   r   r  r  X  sb        * * *R R R1 1 12 2 2* * * * *r<   r  c                   &    e Zd Zd Zd Zd Zd ZdS )TestThroughBinaryc                 f   t          j        d          5  t          t          d                    }d d d            n# 1 swxY w Y   d|                                _        t          j                    x| _        }t          j
        t                    5  |                    |           d d d            n# 1 swxY w Y   |                    d           t          |          | _        | j                                        | _        | j        j        | _        | j        j        j        | _        d S )Nr    r!   r#   rj   r   )r%   r&   r
   r   r   r   r  r  r  r8   r   r   r   r  r   r+   r*   r   r  s      r   r   zTestThroughBinary.setup_class{  s   [h''' 	J 	J12GHHIIG	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J ,4!!(JLL(c\# 	  	 NN3	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 Szz\1133
Z%
J$)			s!   ?AAB88B<?B<c                 H    t          j        | j        d                   rJ d S )NrP   r  r   s    r   r9  zTestThroughBinary.test_bit_mask  s%    6$)E*+++++++r<   c                 H    t          j        | j        d                   rJ d S r  r  r   s    r   r>  z$TestThroughBinary.test_bitarray_mask  r  r<   c                 H    t          j        | j        d                   rJ d S r  r  r   s    r   rf  z&TestThroughBinary.test_bit_array2_mask  r  r<   N)r   r   r   r   r9  r>  rf  r;   r<   r   r  r  z  sP        * * *(, , ,1 1 12 2 2 2 2r<   r  c                       e Zd Zd Zd ZdS )TestThroughBinary2c                    t          j        d          5  t          t          d                    }d d d            n# 1 swxY w Y   d|_        d|                                j        d<   d|                                _        t          j	                    x| _
        }t          j        t                    5  |                    |           d d d            n# 1 swxY w Y   |                    d           t          |          | _        | j                                        | _        | j        j        | _        | j        j        j        | _        d S )	Nr    r!   r#   rn   Trl   rm   r   )r%   r&   r
   r   r   r   r   r   r  r  r  r8   r   r   r   r  r   r+   r*   r   r  s      r   r   zTestThroughBinary2.setup_class  s   [h''' 	J 	J12GHHIIG	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J  DH!!)*@A+4!!(JLL(c\# 	  	 NN3	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 Szz\1133
Z%
J$)			s!   ?AA9CC"Cc                     d S Nr;   r   s    r   rm  z(TestThroughBinary2.test_get_coosys_by_id  s    r<   N)r   r   r   r   rm  r;   r<   r   r  r    s2        * * *&    r<   r  c            	         ddl m} m}m}m}  |            } |            }|j                            |            ||          }|j                            |           |j        	                     | |dd           | |ddd	          g           |
                    d
           dddgddggf|j        d<   dddgddggf|j        d<   t          j                    }|                    |           d S )Nr   FieldResourcer(   VOTableFiler   char)IDr   matrixrM   2x2)r  r   	arraysizerT   	test1.xmlr.   	test2.xml      ?333333?皙?皙?)astropy.io.votable.treer  r  r(   r  r  r   r   rs  extendcreate_arraysr*   r  StringIOr   )r  r  r(   r  r   resourcer+   outs           r   table_from_scratchr    s>   KKKKKKKKKKKK kmmG xzzHX&&& E'NNEO5!!! 
LE'j6:::E'hUKKK	
   
 "QFQF#34EKN!S#Jc
#;<EKN +--CNN3r<   r    r!   c                      t          dd          D ]<} |                     d          s|                     d          r-t          |            =d S )Nr   z*.xml)patternzcustom_datatype.xmlztimesys_errors.xml)r   endswithr
   )r   s    r   test_open_filesr    sk    *67CCC  233 	x7H7H 8
 8
 	 h r<   c                      t          j        t                    5  t          t	          d                     d d d            d S # 1 swxY w Y   d S )Nzdata/too_many_columns.xml.gz)r8   r9   r   r
   r   r;   r<   r   test_too_many_columnsr    s    	'	(	( E E#$BCCDDDE E E E E E E E E E E E E E E E E Es   AAAc           
         t          j                    }t          j                    }|j                            |           t          j        |          }|j                            |           |j                            t          j	        |dddd          t          j	        |dddd          g           |
                    d           d	d
dgdd
ggf|j        d<   dddgddggf|j        d
<   |                    t          | dz                       t          t          | dz                      }|                                }t!          |j        j        t%          j        dddgddggfdddgddggfgddg                     d S )Nr   r  1)r  r   r   r  r  rM   r  rT   r  r.   r   r  r  r  r  r  znew_votable.xmlF)r   ?)r  r  ra   )r2   )r   r  r  r  r   r(   r   rs  r  r  r  r*   r   r   r
   r   r   r   r%   )r   r   r  r+   s       r   test_build_from_scratchr    s     G }HX&&& JwEO5!!! 
LJJZ&TW   JH8hRW  		
	 	 	 
 "QFQF#34EKN!S#Jc
#;<EKN NN3x"3344555C#445566G##%%E
%%89%%89 %&=>	
 	
 	
	 	 	 	 	r<   c                 .   t          j                    }t          d          }| rt          j        |          }t          ||d          }|du sJ |                    d           |                                }t          t          d          d          5 }|                                }ddd           n# 1 swxY w Y   |d	d         }|d	d
         }t          j
                            t          j        ||dd                     ||k    sJ dS )z
    test_path_object is needed for test below ``test_validate_path_object``
    so that file could be passed as pathlib.Path object.
    r#   Fxmllintr   zdata/validation.txtrt   ru   Nr.   r(  rw   rx   ry   )r  r  r   pathlibPathr   r  r   r   r   r   r   r   r   )test_path_objectrx   fpathresultr   rw   s         r   test_validater    sV   
 []]F!"788E $U## eVU333FU????
KKNNNF 
#$9::W	M	M	M QS               !""IEAbD\FJUFWXNNN   F??????s   B99B= B=zsubprocess.Popenc                     t          j                    }ddd} |j        di | || _        t	          t          d          d          sJ d S )N)okkor   )zcommunicate.return_value
returncodezdata/empty_table.xmlTr  r;   )r   Mockconfigure_mockreturn_valuer   r   )mock_subproc_popenprocess_mockattrss      r   test_validate_xmllint_truer  =  se    9;;L)5QGGEL((%(((&2#)*@AA4PPPPPPPPr<   c                  &    t          d           dS )z8Validating when source is passed as path object (#4412).T)r  N)r  r;   r<   r   test_validate_path_objectr  G  s    4((((((r<   c                    t          j        d          5  t          t          d                    }d d d            n# 1 swxY w Y   t	          j        t                    5  t          | dz  d          5 }|                    |d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z  d	          5 }t          |          }d d d            d S # 1 swxY w Y   d S )
Nr    r!   r#   zregression.compressed.xmlro   Trr   )
compressedrs   rp   )	r%   r&   r
   r   r8   r   r   r   r   )r   r   r   s      r   test_gzip_filehandlesr  L  s   	(	#	#	# F F-.CDDEEF F F F F F F F F F F F F F F
 
c		 L L(88$?? 	L2NN2$NKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	LL L L L L L L L L L L L L L L 
h44d	;	; r))                 sW   ?AA#B37BB3B 	 B3#B 	$B33B7:B7C..C25C2c                  "    t                       d S r  )_run_test_from_scratch_exampler;   r<   r   test_from_scratch_exampler  Z  s    "$$$$$r<   c            	         ddl m} m}m}m}  |            } |            }|j                            |            ||          }|j                            |           |j        	                     | |ddd           | |ddd	          g           |
                    d
           dddgddggf|j        d<   dddgddggf|j        d<   |j        d         d         dk    sJ d S )Nr   r  r   r  *)r   r   r  r  rM   r  rT   r  r.   r  r  r  r  r  )r  r  r  r(   r  r  r   r   rs  r  r  r*   )r  r  r(   r  r   r  r+   s          r   r  r  ^  s=   KKKKKKKKKKKK kmmG xzzHX&&& E'NNEO5!!! 
LE'
VsKKKE'8uMMM	
   
 "QFQF#34EKN!S#Jc
#;<EKN;q>!++++++r<   c                      ddl m}  t          d          }|                     |          5 }t          j        dk    r |             nt          |t          j                  sJ d d d            d S # 1 swxY w Y   d S )Nr   )
iterparserr#   win32)	astropy.utils.xmlr  r   _convert_to_fd_or_read_functionr   r   r'   r  FileIO)r  r   r   s      r   test_fileobjr    s     -,,,,,$%:;;H		3	3H	=	= -<7""BDDDDb"),,,,,	- - - - - - - - - - - - - - - - - -s   8A00A47A4c                  j   ddl m}  t          t          d                    }t	          |                                j        d         j        | j                  sJ t          t          d          d          }t	          |                                j        d         j        | j                  rJ d S )Nr   )unitszdata/nonstandard_units.xmlgeneric)unit_format)	astropyr  r
   r   r'   r   rs  unitUnrecognizedUnit)ur   s     r   test_nonstandard_unitsr    s    """""")*FGGHHGg--//6q9>@RSSSSS:;;  G '1133:1=BADVWWWWWWWr<   c                  l   ddl m}  |                                 }|                                 }|j                            |           |                     |          }d|_        |                     |          }d|_        |j                            |           |j                            |           |                                 }|j                            |           |                     |          }d|_        |                     |          }d|_        |j                            |           |j                            |           |                                 }|j                            |           |                     |          }	d|	_        |                     |          }
d|
_        |j                            |	           |j                            |
           t          j
                    }|                    |           |                    d           t          |          }t          |j                  d	k    sJ t          t          |j                            D ]C}|j        |         }t          |j                  d
k    sJ t          |j                  dk    sJ Dd S )Nr   r   t1t2t3t4t5t6r7   rT   )astropy.io.votabler   r  r  r  r   r(   r   r   r  r  r   r  r
   r)   range)votvtfr1r  r  r2r  r  r3r  r  buffvtf2rress                  r   test_resource_structurer    sT   ......
//

C	BM	3BBG	3BBGIRIR	BM	3BBG	3BBGIRIR	BM	3BBG	3BBGIRIR:<<DJJtIIaLLL;;Dt~!####3t~&&'' ' 'nQ3:!####3=!!Q&&&&&' 'r<   c                     t          j                    } t          t          d          | d          }|du sJ |                     d           |                                 } t          t          d          d          5 }|                                }d d d            n# 1 swxY w Y   |dd          }| dd	         } t          j        	                    t          j        || d
d                     || k    sJ d S )Nzdata/no_resource.xmlFr  r   zdata/no_resource.txtrt   ru   r.   r(  rw   rx   ry   )r  r  r   r   r  r   r   r   r   r   r   r   )rx   r  r   rw   s       r   test_no_resource_checkr    sA   []]F 455vu  F U????
KKNNNF 
#$:;;g	N	N	N RT               !""IEAbD\FJUFWXNNN   F??????s    B!!B%(B%c                  $    t          d           d S )Nr;   )r	   r;   r<   r   test_instantiate_vowarningr    s     bMMMMMr<   c                      t          t          d          ddi          } |                                 }|j        j        d         t
          j        k    sJ d S )Nzdata/custom_datatype.xmlbarrJ   )datatype_mappingfoo)r
   r   r   r*   r2   r%   r  )r   r+   s     r   test_custom_datatyper    s_    899  G
 ##%%E;U#rx//////r<   c                 F   t          t          |                                                     dk    sJ |                     d          }|j        dk    sJ |j        dk    sJ |j        dk    sJ |                     d          }|j        dk    sJ |j        dk    sJ |j        d	k    sJ |                     d
          }|j        dk    sJ |j        dk    sJ |j        dk    sJ |                     d          }|j        J |j        dk    sJ |j        dk    sJ d S )Nr^   
time_frameg   NBATCB
BARYCENTER
mjd_originz
MJD-originTDBEMBARYCENTER	jd_originz	JD-originTTHELIOCENTER	no_originUTC
TOPOCENTER)r)   r   iter_timesysget_timesys_by_id
timeorigin	timescalerefposition)r   timesyss     r   _timesys_testsr!    sl   tG((**++,,1111''55G****%%%%,....''55G----%%%%.0000''44G,,,,$$$$-////''44G%%%%%%%,......r<   c                  \    t          t          d                    } t          |            d S )Ndata/timesys.xml)r
   r   r!  )r   s    r   test_timesysr$    s-    )*<==>>G7r<   c                      t          t          d                    } t          j                    }|                     |           |                    d           t          |          }t          |           d S )Nr#  r   )r
   r   r  r  r   r  r!  )orig_votabler  r   s      r   test_timesys_roundtripr'    sf    ./ABBCCL
*,,CHHQKKKCjjG7r<   c                      t          j                    } t          t          d          | d           |                                 }d|v sJ d|v sJ d|v sJ d S )Nzdata/timesys_errors.xmlFr  z.E23: Invalid timeorigin attribute 'bad-origin'z6E22: ID attribute is required for all TIMESYS elementsz9W48: Unknown attribute 'refposition_mispelled' on TIMESYS)r  r  r   r   r  )rx   outstrs     r   test_timesys_errorsr*    st    []]F"#<==vuUUUU__F;vEEEECvMMMMF&PPPPPPr<   c                      t          t          j        d                    } |                     d          }d |D             ddgk    sJ d S )NsQ  
        <VOTABLE xmlns="http://www.ivoa.net/xml/VOTable/v1.3"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.4">
          <RESOURCE type="results">
            <INFO name="creator-name" value="Cannon, A."/>
            <INFO name="creator-name" value="Fleming, W."/>
          </RESOURCE>
        </VOTABLE>zcreator-namec                     g | ]	}|j         
S r;   )rz  )r   is     r   r   z*test_get_infos_by_name.<locals>.<listcomp>5  s    ###AG###r<   z
Cannon, A.zFleming, W.)r
   r  r  get_infos_by_name)r  infoss     r   test_get_infos_by_namer0  '  sd    


		
 		
 C !!.11E##U###m'DDDDDDDr<   )Fr.   )F)J__doc__r   r   r  r  r   unittestr   numpyr%   r8   numpy.testingr   r  r   astropy.io.votable.exceptionsr   r   r	   astropy.io.votable.tabler
   r   r   astropy.io.votable.xmlutilr   astropy.utils.datar   r   hasattrr   r   r   r   r   r,   r5   r=   r   markxfailr   r   r   r   r   r   r   r   r  r  r  r  r&   r  r  r  r  patchr  r  r  r  r  r  r  r  r  r  r  r!  r$  r'  r*  r0  r;   r<   r   <module>r=     s   
   				  



            , , , , , , # # # # # # J J J J J J J J J J I H H H H H H H H H 6 6 6 6 6 6 L L L L L L L L 73"## 7,8//66	C 	C 	C! ! !/ / /Y Y Y
k k k k\ &''* * ('* &'') ) (') &''- - ('-Y Y Y Y Y Y Y Y&: &: &: &: &: &: &: &:R( ( (
( 
( 
(y7 y7 y7 y7 y7 y7 y7 y7x	* * * * *9 * * *D2 2 2 2 2	 2 2 2>       2! ! !J (  E E E
0 0 0f! ! ! !H Q Q  Q) ) )
  % % %, , ,B
- 
- 
-X X X,' ,' ,'^  >  0 0 0/ / /0  
  Q Q QE E E E Er<   