U
    e»{j€  ã                   @   sn   d dl Z d dlmZ d dlmZmZ d dlmZmZm	Z	 ddl
mZmZ G dd„ deƒZG d	d
„ d
eeƒZdS )é    N)Ú_COSMOLOGY_CLASSES)Ú	read_ecsvÚ
write_ecsv)ÚQTableÚTableÚvstacké   )ÚReadWriteDirectTestBaseÚReadWriteTestMixinBasec                   @   sl   e Zd ZdZdd„ Zdd„ Zej de	e
g¡dd„ ƒZej d	d
dg¡dd„ ƒZdd„ Zdd„ Zdd„ ZdS )ÚReadWriteECSVTestMixinaŸ  
    Tests for a Cosmology[Read/Write] with ``format="ascii.ecsv"``.
    This class will not be directly called by :mod:`pytest` since its name does
    not begin with ``Test``. To activate the contained tests this class must
    be inherited in a subclass. Subclasses must dfine a :func:`pytest.fixture`
    ``cosmo`` that returns/yields an instance of a |Cosmology|.
    See ``TestCosmology`` for an example.
    c              	   C   sh   |d }||dd� t jtdd�� ||ddd� W 5 Q R X t jtdd�� ||d	dd� W 5 Q R X d
S )z'Test if argument ``index`` is incorrectztest_to_ecsv_bad_index.ecsvú
ascii.ecsv©Úformatzindex 2 out of range©Úmatché   ©Úindexr   zNo matches found for keyúrow 0N)ÚpytestÚraisesÚ
IndexErrorÚKeyError)ÚselfÚreadÚwriteÚtmp_pathÚfp© r   úc/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/cosmology/io/tests/test_ecsv.pyÚtest_to_ecsv_bad_index   s    z-ReadWriteECSVTestMixin.test_to_ecsv_bad_indexc              	   C   s4   |d }t jtdd�� ||dtd� W 5 Q R X dS )zTest failed table type.ztest_to_ecsv_failed_cls.ecsvz'cls' must ber   r   ©r   ÚclsN)r   r   Ú	TypeErrorÚlist)r   r   r   r   r   r   r   Útest_to_ecsv_failed_cls*   s    z.ReadWriteECSVTestMixin.test_to_ecsv_failed_clsÚtbl_clsc                 C   s   |d }||d|d� d S )Nztest_to_ecsv_cls.ecsvr   r!   r   )r   r   r&   r   r   r   r   r   Útest_to_ecsv_cls1   s    z'ReadWriteECSVTestMixin.test_to_ecsv_clsÚin_metaTFc                 C   sp   |d }||d|d� t  |¡}|rH|jd |jks8t‚d|jkslt‚n$|d d |jks^t‚d|jkslt‚dS )z)Test where the cosmology class is placed.ztest_to_ecsv_in_meta.ecsvr   )r   Zcosmology_in_metaÚ	cosmologyr   N)r   r   ÚmetaÚ__qualname__ÚAssertionErrorZcolnames)r   Ú	cosmo_clsr   r(   r   Úadd_cur   Útblr   r   r   Útest_to_ecsv_in_meta8   s    
z+ReadWriteECSVTestMixin.test_to_ecsv_in_metac           
   	   C   s‚  |d }||dd� t  |¡}|jd |jks2t‚|d |jksDt‚d|d< |j|ddd	� t|jj	 
¡ ƒd
 jdkr²||dd�}	|	j|ks�t‚|	j|jks t‚d|	jks®t‚dS tjtdd�� ||dd� W 5 Q R X ||ddd�}	|	|ksòt‚|	jd dk�st‚| d¡ |j|ddd	� ||dd�}	|	|k�s:t‚t|jd  |jd< ||dd�}	|	|k�sht‚||ƒ}	|	|k�s~t‚dS )z*Test cosmology -> ascii.ecsv -> cosmology.z!test_readwrite_ecsv_instance.ecsvr   r   r)   Únamez
will errorZmismatchingT)r   Ú	overwriteéÿÿÿÿé   Nzthere are unused parametersr   )r   Zmove_to_meta)r   r   r*   r+   r,   r1   r   ÚtupleÚ_init_signatureÚ
parametersÚvaluesÚkindÚ	__class__r   r   r#   Zremove_columnr   )
r   r-   Úcosmor   r   r   r.   r   r/   Úgotr   r   r   Útest_readwrite_ecsv_instanceI   s6    

z3ReadWriteECSVTestMixin.test_readwrite_ecsv_instancec                 C   sÖ   |d }||dd� t  |¡}|j dd¡ |d= |j|dd� |j|dd�}	||d|d	�}
||d|jd	�}|	|
kr||
|ks€t‚|	|ksŒt‚|	j|jj	d j
ks¤t‚|	j|j|j|jd
�|ksÂt‚|	j|jksÒt‚dS )zy
        Test writing from an instance and reading from that class.
        This works with missing information.
        z)test_read_ecsv_subclass_partial_info.ecsvr   r   r)   NÚTcmb0T)r2   )r   r)   )r1   r>   Úm_nu)r   r   r*   Úpopr   r+   r,   r>   r6   r7   ÚdefaultÚcloner1   r?   )r   r-   r;   r   r   r   r.   r   r/   r<   Úgot2Zgot3r   r   r   Ú)test_readwrite_ecsv_subclass_partial_info‚   s    
z@ReadWriteECSVTestMixin.test_readwrite_ecsv_subclass_partial_infoc              	   C   sÐ   |d }|j dd�}|j dd�}tdd„ |||fD ƒdd�}	|	j|d	d
� tjtdd�� ||d	d
� W 5 Q R X ||dd	d�}
|
|ksŠt‚|||jd	d�}
|
|ks¦t‚|	 d¡ |||jd	d�}||ksÌt‚dS )z Test if table has multiple rows.z!test_readwrite_ecsv_mutlirow.ecsvr   )r1   zrow 2c                 S   s   g | ]}|  d ¡‘qS )zastropy.table)Z	to_format)Ú.0Úcr   r   r   Ú
<listcomp>«   s     zGReadWriteECSVTestMixin.test_readwrite_ecsv_mutlirow.<locals>.<listcomp>Zsilent)Zmetadata_conflictsr   r   zneed to select a specific rowr   r   r   r1   N)	rB   r   r   r   r   Ú
ValueErrorr,   r1   Z	add_index)r   r;   r   r   r   r.   r   Zcosmo1Zcosmo2r/   r<   rC   r   r   r   Útest_readwrite_ecsv_mutlirow£   s"    þ
z3ReadWriteECSVTestMixin.test_readwrite_ecsv_mutlirowN)Ú__name__Ú
__module__r+   Ú__doc__r    r%   r   ÚmarkZparametrizer   r   r'   r0   r=   rD   rI   r   r   r   r   r      s   	

9!r   c                   @   s   e Zd ZdZdd„ ZdS )ÚTestReadWriteECSVzí
    Directly test ``read/write_ecsv``.
    These are not public API and are discouraged from use, in favor of
    ``Cosmology.read/write(..., format="ascii.ecsv")``, but should be
    tested regardless b/c they are used internally.
    c                 C   s   t tdœ| _d S )N)r   r   )r   r   Z	functions)r   r   r   r   Úsetup_classÎ   s    zTestReadWriteECSV.setup_classN)rJ   rK   r+   rL   rO   r   r   r   r   rN   Æ   s   rN   )r   Zastropy.cosmology.corer   Zastropy.cosmology.io.ecsvr   r   Zastropy.tabler   r   r   Úbaser	   r
   r   rN   r   r   r   r   Ú<module>   s    7