U
    e»{j%‡  ã                   @   sR  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d„ Z!dd„ Z"dd„ Z#dd„ Z$d[dd„Z%e
j& 'd¡dd„ ƒZ(e
j& 'd¡dd„ ƒZ)e
j& 'd¡dd„ ƒZ*G d d!„ d!ƒZ+G d"d#„ d#ƒZ,d$d%„ Z-d&d'„ Z.G d(d)„ d)ƒZ/G d*d+„ d+e/ƒZ0G d,d-„ d-e/ƒZ1G d.d/„ d/e/ƒZ2d0d1„ Z3e	j4d2d3�d4d5„ ƒZ5d6d7„ Z6d8d9„ Z7d\d:d;„Z8e 9d<¡d=d>„ ƒZ:d?d@„ Z;dAdB„ Z<dCdD„ Z=dEdF„ Z>dGdH„ Z?dIdJ„ Z@dKdL„ ZAdMdN„ ZBdOdP„ ZCdQdR„ ZDdSdT„ ZEdUdV„ ZFdWdX„ ZGdYdZ„ ZHd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                 C   sP   t j d¡rd S zt| |ƒ\}}}W n tk
r:   Y d S X |dksLtdƒ‚d S )Nr   r   z,File did not validate against VOTable schema)ÚsysÚplatformÚ
startswithr   ÚOSErrorÚAssertionError)ÚfilenameÚversionÚrcÚstdoutÚstderr© r   ú_/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/io/votable/tests/vo_test.pyÚassert_validate_schema#   s    r   c               	   C   sJ   t jdd�� ttdƒƒ} W 5 Q R X t| tjƒs4t‚t| j	ƒdksFt‚d S )NÚignore©Zoverúdata/regression.xmlé   )
ÚnpÚerrstater
   r   Ú
isinstancer   ÚTabler   ÚlenÚarray)Útabler   r   r   Útest_parse_single_table/   s    r*   c               	   C   sd   t jdd�� ttdƒdd�} W 5 Q R X t| tjƒs8t‚t| j	ƒdksJt‚t| j	j
jƒdks`t‚d S )Nr   r    r!   é   ©Ztable_numberé   )r#   r$   r
   r   r%   r   r&   r   r'   r(   ÚdtypeÚnames)Ztable2r   r   r   Útest_parse_single_table27   s     ÿr0   c                	   C   s*   t  t¡� ttdƒdd� W 5 Q R X d S )Nr!   é   r,   )ÚpytestÚraisesÚ
IndexErrorr
   r   r   r   r   r   Útest_parse_single_table3B   s    r5   Fr+   c                 C   s¢  t t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g}tjdkršg }|D ].}t|ƒ}|d   d!d"¡|d < | t|ƒ¡ qf|}|j	j
|ksªt‚|jt| d# ƒ|d� tt| d# ƒ|jƒ |d krîd$| ¡ _d%|_n(|d&k�rd'| ¡ jd(< d)| ¡ _d*|_tt| d+ ƒd,ƒ�}|j||d� W 5 Q R X tt| d+ ƒ|jƒ tt| d+ ƒd-ƒ�}t ||d�}	W 5 Q R X d.|	 ¡ _|	jt| d/ ƒd0|d1� tt| d/ ƒ|jƒ ttd2|j› d3�ƒd4d5��}| ¡ }
W 5 Q R X tt| d/ ƒd4d5��}| ¡ }W 5 Q R X tj tj|
|d6d7d8�¡ |
|k�s4t‚|	jt| d9 ƒd0|d1� t t| d9 ƒd-¡�}| ¡ }W 5 Q R X d:d;„ |D ƒ}d<d;„ |
D ƒ}
|
|k�sžt‚d S )=Nr!   )Ú_debug_python_based_parser))zstring testÚstring_testú|O8))úfixed string testÚstring_test_2ú<U10)Úunicode_testr8   ))zunicode testÚfixed_unicode_testr;   ))zstring array testZstring_array_testz<U4)ÚunsignedBytez|u1)Úshortz<i2)Úintú<i4)Úlongz<i8)Údoubleú<f8)Úfloatz<f4)r(   r8   )Úbitú|b1)ÚbitarrayrG   ©r1   é   )Úbitvararrayr8   )Úbitvararray2r8   )ÚfloatComplexz<c8)ÚdoubleComplexú<c16)ÚdoubleComplexArrayr8   )ZdoubleComplexArrayFixedrO   )rJ   )ÚbooleanrG   )ÚbooleanArrayrG   )é   )ÚnullsrA   )Únulls_arrayrA   ©rJ   rJ   )Z
precision1rD   )Z
precision2rD   )Údoublearrayr8   )Ú	bitarray2rG   )é   Úbigr+   ú<ú>zregression.tabledata.xmlÚbinaryú1.1rJ   TÚversion_1_3_or_laterÚbinary2ú1.3zregression.binary.xmlÚwbÚrbZ	tabledatazregression.bin.tabledata.xmlÚtesting)Ú_astropy_versionr6   z$data/regression.bin.tabledata.truth.z.xmlúutf-8©ÚencodingÚtruthÚoutput©ÚfromfileÚtofilezregression.bin.tabledata.xml.gzc                 S   s   g | ]}|  d ¡ ¡ ‘qS )rf   )ÚdecodeÚrstrip©Ú.0Úxr   r   r   Ú
<listcomp>¯   s     z$_test_regression.<locals>.<listcomp>c                 S   s   g | ]}|  ¡ ‘qS r   )ro   rp   r   r   r   rs   °   s     )r	   r   Úget_first_tabler   Ú	byteorderÚlistÚreplaceÚappendÚtupler(   r.   r   Úto_xmlÚstrr   r   ÚformatÚ_configÚopenÚ	readlinesr   Ú
writelinesÚdifflibÚunified_diffÚgzipÚGzipFile)Útmp_pathZ_python_basedZbinary_modeÚvotabler)   ZdtypesZ
new_dtypesr.   ÚfdZvotable2ri   rj   Zgzfdr   r   r   Ú_test_regressionG   sº    þä

þ




ý
 ÿÿüÿ
ýrˆ   Úlegacy_float_reprc              	   C   s$   t  t¡� t| dƒ W 5 Q R X d S )NF©r2   Úwarnsr   rˆ   ©r…   r   r   r   Útest_regressionµ   s    r�   c              	   C   s$   t  t¡� t| dƒ W 5 Q R X d S )NTrŠ   rŒ   r   r   r   Ú#test_regression_python_based_parser¼   s    rŽ   c              	   C   s&   t  t¡� t| ddƒ W 5 Q R X d S )NFrJ   rŠ   rŒ   r   r   r   Útest_regression_binary2Ã   s    r�   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú
TestFixupsc              	   C   sD   t jdd�� ttdƒƒ ¡ | _W 5 Q R X | jj| _| jjj| _d S ©Nr   r    r!   )r#   r$   r	   r   rt   r)   r(   Úmask©Úselfr   r   r   Úsetup_classË   s    ÿ
zTestFixups.setup_classc                 C   s   t | jd | jd ƒ d S )Nr:   r9   ©r   r(   r“   r   r   r   Útest_implicit_idÔ   s    zTestFixups.test_implicit_idN)Ú__name__Ú
__module__Ú__qualname__r•   r—   r   r   r   r   r�   Ê   s   	r�   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTestReferencesc              	   C   sL   t jdd�� ttdƒƒ| _W 5 Q R X | j ¡ | _| jj| _| jjj| _d S r‘   ©	r#   r$   r	   r   r†   rt   r)   r(   r’   r“   r   r   r   r•   Ù   s
    
zTestReferences.setup_classc                 C   sJ   | j jd jd }t|tjƒs"t‚| ¡ jdks4t‚| ¡ j	dksFt‚d S )Nr+   r   rQ   )
r)   ÚgroupsÚentriesr%   r   ZFieldRefr   Úget_refÚnameÚdatatype)r”   Zfieldrefr   r   r   Útest_fieldrefá   s    zTestReferences.test_fieldrefc                 C   sJ   | j jd jd }t|tjƒs"t‚| ¡ jdks4t‚| ¡ j	dksFt‚d S )Nr   ZINPUTrE   )
r)   r�   rž   r%   r   ZParamRefr   rŸ   r    r¡   )r”   Zparamrefr   r   r   Útest_paramrefç   s    zTestReferences.test_paramrefc                 C   s$   t t| jjd  ¡ ƒƒdks t‚d S )Nr+   rJ   )r'   rv   r)   r�   Úiter_fields_and_paramsr   r“   r   r   r   Ú&test_iter_fields_and_params_on_a_groupí   s    z5TestReferences.test_iter_fields_and_params_on_a_groupc                 C   s$   t t| jjd  ¡ ƒƒdks t‚d S ©Nr+   )r'   rv   r)   r�   Úiter_groupsr   r“   r   r   r   Útest_iter_groups_on_a_groupð   s    z*TestReferences.test_iter_groups_on_a_groupc                 C   s   t t| j ¡ ƒƒdkst‚d S )Né	   )r'   rv   r†   r§   r   r“   r   r   r   Útest_iter_groupsó   s    zTestReferences.test_iter_groupsc                 C   sH   t | j ¡ ƒ}t|d jjd |d jjd ƒD ]\}}t||ƒ q0d S )Nr   r+   )rv   r†   Ziter_tablesÚzipr(   Údatar   )r”   Útablesrr   Úyr   r   r   Útest_ref_tableø   s    *zTestReferences.test_ref_tablec                 C   s   t t| j ¡ ƒƒdkst‚d S r¦   )r'   rv   r†   Ziter_coosysr   r“   r   r   r   Útest_iter_coosysý   s    zTestReferences.test_iter_coosysN)r˜   r™   rš   r•   r¢   r£   r¥   r¨   rª   r¯   r°   r   r   r   r   r›   Ø   s   r›   c                  C   s|   dddg} t tdƒ| d� ¡ }|j}|jj}|d d dks@t‚ddd	g} | D ]}t || ¡rNt‚qNt |d
 ¡sxt‚d S )Nr   r"   é   r!   ©Úcolumnsr7   úString & testr>   rH   r<   ©r	   r   rt   r(   r’   r   r#   Úall©r³   r)   r(   r’   Úcr   r   r   Útest_select_columns_by_index  s    
 ÿ

r¹   c                  C   sr   dddg} t tdƒ| d� ¡ }|j}|jj}|d d dks@t‚| D ]}t || ¡rDt‚qDt |d ¡snt‚d S )	Nr7   r>   rH   r!   r²   r   r´   r<   rµ   r·   r   r   r   Útest_select_columns_by_name  s    
 ÿ
rº   c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dES )FÚ	TestParsec              	   C   sL   t jdd�� ttdƒƒ| _W 5 Q R X | j ¡ | _| jj| _| jjj| _d S r‘   rœ   r“   r   r   r   r•     s
    
zTestParse.setup_classc                 C   s8   t | jd jjtjƒst‚t| jd dddddgƒ d S )Nr7   r´   zString &amp; testÚXXXXÚ ©Ú
issubclassr(   r.   Útyper#   Úobject_r   r   r“   r   r   r   Útest_string_test%  s
    þzTestParse.test_string_testc                 C   s8   t | jd jjtjƒst‚t| jd dddddgƒ d S )Nr:   z
Fixed striÚ
0123456789r¼   r½   ©r¿   r(   r.   rÀ   r#   Zunicode_r   r   r“   r   r   r   Útest_fixed_string_test,  s
     ÿz TestParse.test_fixed_string_testc                 C   s8   t | jd jjtjƒst‚t| jd dddddgƒ d S )Nr<   u   CeÃ§i n'est pas un pipeõ   à®µà®£à®•à¯�à®•à®®à¯�r¼   r½   r¾   r“   r   r   r   Útest_unicode_test2  s
    þzTestParse.test_unicode_testc                 C   s8   t | jd jjtjƒst‚t| jd dddddgƒ d S )Nr=   u   CeÃ§i n'estrÆ   rÃ   r½   rÄ   r“   r   r   r   Útest_fixed_unicode_test9  s
    þz!TestParse.test_fixed_unicode_testc                 C   sL   t | jd jjtjƒst‚t| jd dddddgƒ t | j	d ¡rHt‚d S )Nr>   é€   éÿ   r   )
r¿   r(   r.   rÀ   r#   Zuint8r   r   Úanyr’   r“   r   r   r   Útest_unsignedByte@  s    zTestParse.test_unsignedBytec                 C   sL   t | jd jjtjƒst‚t| jd dddddgƒ t | j	d ¡rHt‚d S )Nr?   i   iÿ  i ðÿÿ)
r¿   r(   r.   rÀ   r#   Zint16r   r   rË   r’   r“   r   r   r   Ú
test_shortE  s    zTestParse.test_shortc                 C   sR   t | jd jjtjƒst‚t| jd dddddgƒ t| jd dddddgƒ d S )	Nr@   i   iÿÿÿi   ðiÿÿÿéÍ[FT)	r¿   r(   r.   rÀ   r#   Úint32r   r   r’   r“   r   r   r   Útest_intJ  s     ÿzTestParse.test_intc                 C   sR   t | jd jjtjƒst‚t| jd dddddgƒ t| jd dddddgƒ d S )NrB   l   eÇ:q rÎ   lûÿÿÿ         l   ÿÿÿÿFT)	r¿   r(   r.   rÀ   r#   Úint64r   r   r’   r“   r   r   r   Ú	test_longQ  s    ûþ
zTestParse.test_longc                 C   sZ   t | jd jjtjƒst‚t| jd ddtjtj	tj gƒ t| j
d dddddgƒ d S )NrC   g    €ÿ!@ç        FT)r¿   r(   r.   rÀ   r#   Zfloat64r   r   ÚinfÚnanr’   r“   r   r   r   Útest_double_  s     ÿzTestParse.test_doublec                 C   sX   t | jd jjtjƒst‚t| jd ddtjtjtj	gƒ t| j
d dddddgƒ d S )NrE   g      ð?rÓ   FT)r¿   r(   r.   rÀ   r#   Zfloat32r   r   rÔ   rÕ   r’   r“   r   r   r   Ú
test_floatf  s     zTestParse.test_floatc                 C   sä   t | jd jjtjƒst‚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 ]:\}}t||ƒD ]&\}}t |jjtjƒs–t‚t	||ƒ qzqh| jj
d d jd d sÂt‚| jj
d d jd d sàt‚d S )Nr(   é*   é    é   é"   é8   éN   éW   éA   é+   é   éÿÿÿÿé   é   r1   r   rS   r+   )r¿   r(   r.   rÀ   r#   rÁ   r   r«   rÑ   r   r¬   r’   ©r”   ÚmatchÚaÚbZa0Zb0r   r   r   Ú
test_arrayk  s    ûzTestParse.test_arrayc                 C   s8   t | jd jjtjƒst‚t| jd dddddgƒ d S )NrF   TF©r¿   r(   r.   rÀ   r#   Úbool_r   r   r“   r   r   r   Útest_bit}  s    zTestParse.test_bitc                 C   s   t | jd dddddgƒ d S )NrF   FT©r   r’   r“   r   r   r   Útest_bit_mask�  s    zTestParse.test_bit_maskc              
   C   s¦   t | jd jjtjƒst‚| jd jdks.t‚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 )NrH   )r"   r1   rJ   TF)	r¿   r(   r.   rÀ   r#   rë   r   Úshaper   r“   r   r   r   Útest_bitarray„  s    ûþzTestParse.test_bitarrayc              
   C   sx   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 )NrH   FTrí   r“   r   r   r   Útest_bitarray_mask’  s    ûþzTestParse.test_bitarray_maskc                 C   s¸   t | jd jjtjƒst‚dddgdddddgdddddgg g g}t| jd |ƒD ]\}}t||ƒ qRdddgdddddgdddddgddg}t| jd |ƒD ]\}}t|j	|ƒ qžd S )NrK   TF)
r¿   r(   r.   rÀ   r#   rÁ   r   r«   r   r’   )r”   ræ   rç   rè   Z
match_maskr   r   r   Útest_bitvararrayž  s"    ûûzTestParse.test_bitvararrayc                 C   sÂ   t | jd jjtjƒst‚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 ]H\}}t||ƒD ]4\}}|jdksœt‚t |jjtj	ƒs°t‚t
||ƒ q†qtd S )NrL   FTrI   )r¿   r(   r.   rÀ   r#   rÁ   r   r«   rï   rë   r   rå   r   r   r   Útest_bitvararray2³  s    þø
zTestParse.test_bitvararray2c                 C   sd   t | jd jjtjƒst‚t| jd tjd ddtjd tjd gƒ t| j	d dddddgƒ d S )NrM   ù                ù              ð¿TF)
r¿   r(   r.   rÀ   r#   Z	complex64r   r   rÕ   r’   r“   r   r   r   Útest_floatComplexÅ  s    þzTestParse.test_floatComplexc                 C   sj   t | jd jjtjƒst‚t| jd tjd ddtjtj	d  tjd gƒ t| j
d dddddgƒ d S )NrN   rô   rõ   y              ð?TF)r¿   r(   r.   rÀ   r#   Z
complex128r   r   rÕ   rÔ   r’   r“   r   r   r   Útest_doubleComplexÍ  s    $þzTestParse.test_doubleComplexc                 C   sD   t | jd jjtjƒst‚dd„ | jd D ƒdddddgks@t‚d S )NrP   c                 S   s   g | ]}t |ƒ‘qS r   )r'   rp   r   r   r   rs   ×  s     z5TestParse.test_doubleComplexArray.<locals>.<listcomp>r   rJ   )r¿   r(   r.   rÀ   r#   rÁ   r   r“   r   r   r   Útest_doubleComplexArrayÕ  s    z!TestParse.test_doubleComplexArrayc                 C   s8   t | jd jjtjƒst‚t| jd dddddgƒ d S )NrQ   TFrê   r“   r   r   r   Útest_booleanÙ  s    zTestParse.test_booleanc                 C   s   t | jd dddddgƒ d S )NrQ   FTrí   r“   r   r   r   Útest_boolean_maskÝ  s    zTestParse.test_boolean_maskc              
   C   s`   t | jd jjtjƒst‚t| jd ddddgddddgddddgddddgddddggƒ d S )NrR   TFrê   r“   r   r   r   Útest_boolean_arrayà  s    




ûþzTestParse.test_boolean_arrayc              
   C   sF   t | jd ddddgddddgddddgddddgddddggƒ d S )NrR   FTrí   r“   r   r   r   Útest_boolean_array_maskí  s    




ûþz!TestParse.test_boolean_array_maskc                 C   s8   t | jd dddddgƒ t | jd dddddgƒ d S )NrT   r   é÷ÿÿÿrJ   FT©r   r(   r’   r“   r   r   r   Ú
test_nullsù  s    zTestParse.test_nullsc              	   C   s°   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 )	NrU   rý   r   r+   rJ   r1   TFrþ   r“   r   r   r   Útest_nulls_arrayý  s$    ûþ
ûþzTestParse.test_nulls_arrayc              	   C   sˆ   t | jd jjtjƒst‚t| jd d ƒdks4t‚t| jd d ddtj	tj	 tj
ddgƒ t| jjd d jdddddddgƒ d S )NrW   r   r+   râ   FT)r¿   r(   r.   rÀ   r#   rÁ   r   r'   r   rÔ   rÕ   r¬   r’   r“   r   r   r   Útest_double_array  s     ÿþzTestParse.test_double_arrayc                 C   s8   t | jd d ddddddddddddddddgƒ d S )NrX   r   TFr–   r“   r   r   r   Útest_bit_array2  s(    ðþzTestParse.test_bit_array2c                 C   s8   t  | jd d ¡rt‚t  | jd dd … ¡s4t‚d S )NrX   r   r+   )r#   rË   r’   r   r¶   r“   r   r   r   Útest_bit_array2_mask5  s    zTestParse.test_bit_array2_maskc                 C   s   | j  d¡}|jdkst‚d S )NZJ2000Zeq_FK5)r†   Zget_coosys_by_idÚsystemr   )r”   Zcoosysr   r   r   Útest_get_coosys_by_id9  s    zTestParse.test_get_coosys_by_idc                 C   s:   t | j d¡ƒ}|d jdks"t‚|d jjdks6t‚d S )NZmyintr   r@   iüÿÿ)rv   r†   Zget_fields_by_utyper    r   ÚvaluesÚmin)r”   Úfieldsr   r   r   Útest_get_field_by_utype=  s    z!TestParse.test_get_field_by_utypec                 C   sD   | j  d¡}|jdkst‚| j jdkr@| j  d¡}|jdks@t‚d S )NZQUERY_STATUSÚOKr^   Z	ErrorInfoz/One might expect to find some INFO here, too...)r†   Zget_info_by_idÚvaluer   r   )r”   Úinfor   r   r   Útest_get_info_by_idB  s
    zTestParse.test_get_info_by_idc                 C   sZ   dt | jƒkst‚t t| j ¡ ƒd ƒdks0t‚t t| j ¡ ƒƒ t | jjƒdksVt‚d S )Nz3 tablesr   z^<PARAM ID="awesome" arraysize="*" datatype="float" name="INPUT" unit="deg" value="[0.0 0.0]"/>z[</>])Úreprr†   r   rv   r¤   r§   Ú	resourcesr“   r   r   r   Ú	test_reprJ  s    ÿÿzTestParse.test_reprN)%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  r  r	  r  r  r   r   r   r   r»     sD   r»   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestThroughTableDatac              	   C   sŒ   t jdd�� ttdƒƒ}W 5 Q R X t ¡  | _}t t	¡� | 
|¡ W 5 Q R X | d¡ t|ƒ| _| j ¡ | _| jj| _| jjj| _d S )Nr   r    r!   r   )r#   r$   r	   r   ÚioÚBytesIOÚxmloutr2   r‹   r   rz   Úseekr†   rt   r)   r(   r’   ©r”   r†   Úbior   r   r   r•   Y  s    


z TestThroughTableData.setup_classc                 C   s   t | jd dddddgƒ d S )NrF   Frí   r“   r   r   r   rî   h  s    z"TestThroughTableData.test_bit_maskc                 C   s   t  | jd ¡rt‚d S ©NrH   ©r#   rË   r’   r   r“   r   r   r   rñ   k  s    z'TestThroughTableData.test_bitarray_maskc                 C   s   t  | jd ¡rt‚d S ©NrX   r  r“   r   r   r   r  n  s    z)TestThroughTableData.test_bit_array2_maskc              	   C   s<   |d }t |dƒ�}| | j ¡ ¡ W 5 Q R X t|dƒ d S )Nztest_through_tabledata.xmlrb   r^   )r~   Úwriter  Úgetvaluer   )r”   r…   ÚfnÚfr   r   r   Útest_schemaq  s    z TestThroughTableData.test_schemaN)r˜   r™   rš   r•   rî   rñ   r  r  r   r   r   r   r  X  s
   r  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestThroughBinaryc              	   C   s–   t jdd�� ttdƒƒ}W 5 Q R X d| ¡ _t ¡  | _}t	 
t¡� | |¡ W 5 Q R X | d¡ t|ƒ| _| j ¡ | _| jj| _| jjj| _d S )Nr   r    r!   r]   r   )r#   r$   r	   r   rt   r|   r  r  r  r2   r‹   r   rz   r  r†   r)   r(   r’   r  r   r   r   r•   {  s    



zTestThroughBinary.setup_classc                 C   s   t  | jd ¡rt‚d S )NrF   r  r“   r   r   r   rî   �  s    zTestThroughBinary.test_bit_maskc                 C   s   t  | jd ¡rt‚d S r  r  r“   r   r   r   rñ   ’  s    z$TestThroughBinary.test_bitarray_maskc                 C   s   t  | jd ¡rt‚d S r  r  r“   r   r   r   r  •  s    z&TestThroughBinary.test_bit_array2_maskN)r˜   r™   rš   r•   rî   rñ   r  r   r   r   r   r   z  s   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestThroughBinary2c              	   C   sª   t jdd�� ttdƒƒ}W 5 Q R X d|_d| ¡ jd< d| ¡ _t 	¡  | _
}t t¡� | |¡ W 5 Q R X | d¡ t|ƒ| _| j ¡ | _| jj| _| jjj| _d S )	Nr   r    r!   ra   Tr_   r`   r   )r#   r$   r	   r   r   rt   r}   r|   r  r  r  r2   r‹   r   rz   r  r†   r)   r(   r’   r  r   r   r   r•   š  s    



zTestThroughBinary2.setup_classc                 C   s   d S ©Nr   r“   r   r   r   r  ­  s    z(TestThroughBinary2.test_get_coosys_by_idN)r˜   r™   rš   r•   r  r   r   r   r   r!  ™  s   r!  c               	   C   s¾   ddl m} m}m}m} |ƒ }|ƒ }|j |¡ ||ƒ}|j |¡ |j 	| |d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< t ¡ }| |¡ d S )Nr   ©ÚFieldÚResourcer&   ÚVOTableFiler   Úchar)ÚIDr¡   ÚmatrixrC   Ú2x2)r(  r¡   Ú	arraysizerJ   ú	test1.xmlr+   ú	test2.xmlç      à?ç333333Ó?çš™™™™™É?çš™™™™™¹?)Úastropy.io.votable.treer$  r%  r&   r&  r  rx   r­   r  ÚextendÚcreate_arraysr(   r  ÚStringIOrz   )r$  r%  r&   r&  r†   Úresourcer)   Úoutr   r   r   Útable_from_scratch²  s     þÿ	
r8  r   r    c                  C   s4   t ddd�D ]"} |  d¡s|  d¡r&qt| ƒ qd S )Nr¬   z*.xml)Úpatternzcustom_datatype.xmlztimesys_errors.xml)r   Úendswithr	   )r   r   r   r   Útest_open_files×  s    ÿr;  c                	   C   s&   t  t¡� ttdƒƒ W 5 Q R X d S )Nzdata/too_many_columns.xml.gz)r2   r3   r   r	   r   r   r   r   r   Útest_too_many_columnsá  s    r<  c              
   C   s  t  ¡ }t  ¡ }|j |¡ t  |¡}|j |¡ |j t j	|ddddd�t 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| d ƒ¡ tt| d ƒƒ}| ¡ }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�ƒ d S )Nr   r'  Ú1)r(  r    r¡   r+  r)  rC   r*  rJ   r,  r+   r   r-  r.  r/  r0  r1  znew_votable.xmlF)r   ú?)r)  r>  rV   )r.   )r   r&  r%  r  rx   r&   r­   r  r3  r$  r4  r(   rz   r{   r	   rt   r   r’   r#   )r…   r†   r6  r)   r   r   r   Útest_build_from_scratchæ  sJ    
    ÿ    ÿüÿ
þûþr?  c              	   C   s°   t  ¡ }tdƒ}| rt |¡}t||dd�}|dks8t‚| d¡ | ¡ }t	tdƒdd��}| ¡ }W 5 Q R X |dd	… }|dd
… }t
j tj||ddd�¡ ||ks¬t‚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©Zxmllintr   zdata/validation.txtrf   rg   r+   Nrâ   ri   rj   rk   )r  r5  r   ÚpathlibÚPathr   r   r  r   r~   r   r   r€   r�   r‚   )Útest_path_objectrj   ZfpathÚresultr‡   ri   r   r   r   Útest_validate  s     

ÿrE  zsubprocess.Popenc                 C   s<   t  ¡ }dddœ}|jf |Ž || _ttdƒdd�s8t‚d S )N)ÚokÚkor   )zcommunicate.return_valueÚ
returncodezdata/empty_table.xmlTr@  )r   ZMockZconfigure_mockZreturn_valuer   r   r   )Zmock_subproc_popenZprocess_mockÚattrsr   r   r   Útest_validate_xmllint_true=  s
    
rJ  c                   C   s   t dd� dS )zB
    Validating when source is passed as path object. (#4412)
    T)rC  N)rE  r   r   r   r   Útest_validate_path_objectG  s    rK  c              
   C   sŠ   t jdd�� ttdƒƒ}W 5 Q R X t t¡�0 t| d dƒ�}|j|ddd� W 5 Q R X W 5 Q R X t| d d	ƒ�}t|ƒ}W 5 Q R X d S )
Nr   r    r!   zregression.compressed.xmlrb   Trd   )Ú
compressedre   rc   )	r#   r$   r	   r   r2   r‹   r   r~   rz   )r…   r†   r‡   r   r   r   Útest_gzip_filehandlesN  s    $rM  c                   C   s
   t ƒ  d S r"  )Ú_run_test_from_scratch_exampler   r   r   r   Útest_from_scratch_example\  s    rO  c               	   C   sÄ   ddl m} m}m}m} |ƒ }|ƒ }|j |¡ ||ƒ}|j |¡ |j 	| |dd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Àt‚d S )Nr   r#  r   r'  Ú*)r    r¡   r+  r)  rC   r*  rJ   r,  r+   r-  r.  r/  r0  r1  )r2  r$  r%  r&   r&  r  rx   r­   r  r3  r4  r(   r   )r$  r%  r&   r&  r†   r6  r)   r   r   r   rN  `  s    þÿ	
rN  c               	   C   sP   ddl m}  tdƒ}|  |¡�(}tjdkr2|ƒ  nt|tjƒsBt	‚W 5 Q R X d S )Nr   )Ú
iterparserr!   Úwin32)
Zastropy.utils.xmlrQ  r   Z_convert_to_fd_or_read_functionr   r   r%   r  ÚFileIOr   )rQ  r   r‡   r   r   r   Útest_fileobj�  s    
rT  c                  C   sd   ddl m}  ttdƒƒ}t| ¡ jd j| jƒs4t	‚ttdƒdd�}t| ¡ jd j| jƒr`t	‚d S )Nr   )Úunitszdata/nonstandard_units.xmlZgeneric)Zunit_format)
ZastropyrU  r	   r   r%   rt   r  ÚunitZUnrecognizedUnitr   )Úur†   r   r   r   Útest_nonstandard_unitsŽ  s     ÿrX  c                  C   s|  ddl m}  |  ¡ }|  ¡ }|j |¡ |  |¡}d|_|  |¡}d|_|j |¡ |j |¡ |  ¡ }|j |¡ |  |¡}d|_|  |¡}d|_|j |¡ |j |¡ |  ¡ }|j |¡ |  |¡}	d|	_|  |¡}
d|
_|j |	¡ |j |
¡ t	 
¡ }| |¡ | d¡ t|ƒ}t|jƒd	k�s0t‚tt|jƒƒD ]8}|j| }t|jƒd
k�s`t‚t|jƒdk�s>t‚�q>d S )Nr   r   Út1Út2Út3Út4Út5Út6r1   rJ   )Úastropy.io.votabler   r&  r%  r  rx   r&   r    r­   r  r  rz   r  r	   r'   r   Úrange)ZvotZvtfÚr1rY  rZ  Úr2r[  r\  Zr3r]  r^  ZbuffZvtf2ÚrÚresr   r   r   Útest_resource_structureœ  sF    








re  c               	   C   sž   t  ¡ } ttdƒ| dd�}|dks&t‚|  d¡ |  ¡ } ttdƒdd��}| ¡ }W 5 Q R X |dd … }| dd	… } tj	 
tj|| d
dd�¡ || ksšt‚d S )Nzdata/no_resource.xmlFr@  r   zdata/no_resource.txtrf   rg   r+   râ   ri   rj   rk   )r  r5  r   r   r   r  r   r~   r   r   r€   r�   r‚   )rj   rD  r‡   ri   r   r   r   Útest_no_resource_checkË  s"      ÿ
ÿrf  c                   C   s   t dƒ d S )Nr   )r   r   r   r   r   Útest_instantiate_vowarningê  s    rg  c                  C   s6   t tdƒddid�} |  ¡ }|jjd tjks2t‚d S )Nzdata/custom_datatype.xmlÚbarr@   )Zdatatype_mappingZfoo)r	   r   rt   r(   r.   r#   rÏ   r   )r†   r)   r   r   r   Útest_custom_datatypeð  s    þri  c                 C   sì   t t|  ¡ ƒƒdkst‚|  d¡}|jdks0t‚|jdks>t‚|jdksLt‚|  d¡}|jdksdt‚|jdksrt‚|jd	ks€t‚|  d
¡}|jdks˜t‚|jdks¦t‚|jdks´t‚|  d¡}|jd ksÌt‚|jdksÚt‚|jdksèt‚d S )NrS   Z
time_frameg   ÀN»BAZTCBZ
BARYCENTERZ
mjd_originz
MJD-originZTDBZEMBARYCENTERZ	jd_originz	JD-originZTTZHELIOCENTERZ	no_originÚUTCZ
TOPOCENTER)r'   rv   Ziter_timesysr   Zget_timesys_by_idZ
timeoriginZ	timescaleZrefposition)r†   Ztimesysr   r   r   Ú_timesys_testsú  s"    



rk  c                  C   s   t tdƒƒ} t| ƒ d S )Núdata/timesys.xml)r	   r   rk  )r†   r   r   r   Útest_timesys  s    rm  c                  C   s<   t tdƒƒ} t ¡ }|  |¡ | d¡ t |ƒ}t|ƒ d S )Nrl  r   )r	   r   r  r  rz   r  rk  )Zorig_votabler  r†   r   r   r   Útest_timesys_roundtrip  s    

rn  c                  C   sJ   t  ¡ } ttdƒ| dd� |  ¡ }d|ks.t‚d|ks:t‚d|ksFt‚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  r5  r   r   r  r   )rj   Zoutstrr   r   r   Útest_timesys_errors   s    ro  )Fr+   )F)IÚ__doc__r�   rƒ   r  rA  r   Zunittestr   Únumpyr#   r2   Znumpy.testingr   r_  r   Zastropy.io.votable.exceptionsr   r   r   Zastropy.io.votable.tabler	   r
   r   Zastropy.io.votable.xmlutilr   Zastropy.utils.datar   r   Úhasattrr   r‰   r   r   r   r*   r0   r5   rˆ   ÚmarkZxfailr�   rŽ   r�   r�   r›   r¹   rº   r»   r  r   r!  r8  r$   r;  r<  r?  rE  ÚpatchrJ  rK  rM  rO  rN  rT  rX  re  rf  rg  ri  rk  rm  rn  ro  r   r   r   r   Ú<module>   sx   

n





)  >"%

	3
$
	!/
	