U
    d»{j"  ã                   @   sz   d dl Z d dlm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)Ú_COSMOLOGY_CLASSES)Ú
from_tableÚto_table)ÚQTableÚTableÚvstacké   )ÚToFromDirectTestBaseÚToFromTestMixinBasec                   @   s¬   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d„ Zej dd
dg¡dd„ ƒZej dd
dddg¡dd„ ƒZdS )ÚToFromTableTestMixina¦  
    Tests for a Cosmology[To/From]Format with ``format="astropy.table"``.
    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 define a :func:`pytest.fixture`
    ``cosmo`` that returns/yields an instance of a |Cosmology|.
    See ``TestCosmology`` for an example.
    c              	   C   s\   |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 incorrectúastropy.tablezindex 2 out of range©Úmatché   ©ÚindexÚformatzNo matches found for keyúrow 0N)ÚpytestÚraisesÚ
IndexErrorÚKeyError)ÚselfÚfrom_formatÚ	to_formatÚtbl© r   úd/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/cosmology/io/tests/test_table.pyÚtest_to_table_bad_index   s
    z,ToFromTableTestMixin.test_to_table_bad_indexc              	   C   s*   t jtdd�� |dtd� W 5 Q R X dS )zTest failed table type.z'cls' must ber   r   ©ÚclsN)r   r   Ú	TypeErrorÚlist)r   r   r   r   r   Útest_to_table_failed_cls)   s    z-ToFromTableTestMixin.test_to_table_failed_clsÚtbl_clsc                 C   s   |d|d�}t ||ƒst‚d S )Nr   r    )Ú
isinstanceÚAssertionError)r   r   r%   r   r   r   r   Útest_to_table_cls.   s    z&ToFromTableTestMixin.test_to_table_clsÚin_metaTFc                 C   s\   |d|d�}|r4|j d |jks$t‚d|jksXt‚n$|d d |jksJt‚d|j ksXt‚dS )z)Test where the cosmology class is placed.r   )Zcosmology_in_metaÚ	cosmologyr   N)ÚmetaÚ__qualname__r'   Zcolnames)r   Ú	cosmo_clsr   r)   r   r   r   r   Útest_to_table_in_meta5   s    z*ToFromTableTestMixin.test_to_table_in_metac                 C   s¨   |dƒ}t |tƒst‚|jd |jks*t‚|d |jks<t‚|jsFt‚|jD ]V}t||ƒ}|| }|j	j|jkstt‚|j	j
|jks†t‚|j	j|j |¡pši ksLt‚qLdS )z Test cosmology -> astropy.table.r   r*   ÚnameN)r&   r   r'   r+   r,   r/   ÚindicesÚ__parameters__ÚgetattrÚinfoÚdescriptionÚ__doc__Úget)r   r-   Úcosmor   r   ÚnÚPÚcolr   r   r   Útest_to_tableD   s    


z"ToFromTableTestMixin.test_to_tablec              	   C   s*   t  ttf¡� |ddd� W 5 Q R X dS )z-Test not passing a Table to the Table parser.zNOT A TABLEr   ©r   N)r   r   r"   Ú
ValueError)r   r7   r   r   r   r   Útest_from_not_tableZ   s    z(ToFromTableTestMixin.test_from_not_tablec              	   C   s"  |dƒ}d|d< t |jj ¡ ƒd jdkrf||dd�}|j|ksDt‚|j|jksTt‚d|jksbt‚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¡ ||dd�}||ksÚt‚t|jd  |jd< ||dd�}||k�st‚||ƒ}||k�st‚dS )z-Test cosmology -> astropy.table -> cosmology.r   z
will errorZmismatchingéÿÿÿÿé   r<   Nzthere are unused parametersr   T)r   Zmove_to_metar*   )ÚtupleÚ_init_signatureÚ
parametersÚvaluesÚkindÚ	__class__r'   r/   r+   r   r   r"   Zremove_columnr   )r   r-   r7   r   r   r   Úgotr   r   r   Útest_tofrom_table_instance_   s*    
z/ToFromTableTestMixin.test_tofrom_table_instancec           	      C   sÀ   |dƒ}t |tƒst‚|j dd¡ |d= |j|dd�}||d|d�}||d|jd�}||krf||ksjt‚||ksvt‚|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.
        r   r*   NÚTcmb0r<   )r   r*   )r/   rI   Úm_nu)r&   r   r'   r+   Úpopr   r,   rI   rB   rC   ÚdefaultÚcloner/   rJ   )	r   r-   r7   r   r   r   rG   Zgot2Zgot3r   r   r   Ú+test_fromformat_table_subclass_partial_infoˆ   s       ÿz@ToFromTableTestMixin.test_fromformat_table_subclass_partial_infoÚ	add_indexc           
   	   C   s  |j dd�}|j dd�}tdd„ |||fD ƒdd�}t|tƒsBt‚|jd |jksVt‚|d	 d
 |jkslt‚|r~|jd
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‚t||gdd�}	t	j
tdd�� ||	|jdd� W 5 Q R X dS )z Test if table has multiple rows.r   )r/   zrow 2c                 S   s   g | ]}|  d ¡‘qS )r   )r   )Ú.0Úcr   r   r   Ú
<listcomp>±   s     zCToFromTableTestMixin.test_tofrom_table_mutlirow.<locals>.<listcomp>Zsilent)Zmetadata_conflictsr*   r	   r/   T)Úuniquezneed to select a specific rowr   r   r<   r   zmore than oneN)rM   r   r&   r   r'   r+   r,   r/   rO   r   r   r=   )
r   r-   r7   r   rO   Zcosmo1Zcosmo2r   rG   Ztblsr   r   r   Útest_tofrom_table_mutlirow¨   s(    þz/ToFromTableTestMixin.test_tofrom_table_mutlirowr   Nr   c                 C   s@   |dƒ}t |tƒrt‚|j||d�}||dk	r2dndks<t‚dS )zêTest :meth:`astropy.cosmology.Cosmology.is_equivalent`.

        This test checks that Cosmology equivalency can be extended to any
        Python object that can be converted to a Cosmology -- in this case
        a |Table|.
        r   r<   FTN)r&   r   r'   Zis_equivalent)r   r7   r   r   ÚobjZis_equivr   r   r   Útest_is_equivalent_to_tableÑ   s    z0ToFromTableTestMixin.test_is_equivalent_to_table)Ú__name__Ú
__module__r,   r5   r   r$   r   ÚmarkZparametrizer   r   r(   r.   r;   r>   rH   rN   rT   rV   r   r   r   r   r      s   	

) 
(r   c                   @   s   e Zd ZdZdd„ ZdS )ÚTestToFromTablez Directly test ``to/from_table``.c                 C   s   t tdœ| _d S )N)ÚtoÚfrom)r   r   Z	functions)r   r   r   r   Úsetup_classã   s    zTestToFromTable.setup_classN)rW   rX   r,   r5   r]   r   r   r   r   rZ   à   s   rZ   )r   Zastropy.cosmologyr   Zastropy.cosmology.corer   Zastropy.cosmology.io.tabler   r   Zastropy.tabler   r   r   Úbaser
   r   r   rZ   r   r   r   r   Ú<module>   s    P