
    HR-e                         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e          Z G d	 d
ee          ZdS )    N)_COSMOLOGY_CLASSES)	read_ecsv
write_ecsv)QTableTablevstack   )ReadWriteDirectTestBaseReadWriteTestMixinBasec                       e Zd ZdZd Zd Zej                            de	e
g          d             Zej                            dddg          d	             Zd
 Zd Z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                 0   |dz  } ||d           t          j        t          d          5   ||dd           ddd           n# 1 swxY w Y   t          j        t          d	          5   ||d
d           ddd           dS # 1 swxY w Y   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   NzNo matches found for keyrow 0)pytestraises
IndexErrorKeyError)selfreadwritetmp_pathfps        Dlib/python3.11/site-packages/astropy/cosmology/io/tests/test_ecsv.pytest_to_ecsv_bad_indexz-ReadWriteECSVTestMixin.test_to_ecsv_bad_index   s9   55b&&&& ]:-CDDD 	3 	3D1\2222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 ]8+EFFF 	9 	9D7<8888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s#   A		AA/BBBc                     |dz  }t          j        t          d          5   ||dt                     ddd           dS # 1 swxY w Y   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    s       r!   test_to_ecsv_failed_clsz.ReadWriteECSVTestMixin.test_to_ecsv_failed_cls*   s    66]9O<<< 	5 	5E"\t4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   AA	Atbl_clsc                 ,    |dz  } ||d|           d S )Nztest_to_ecsv_cls.ecsvr   r$    )r   r   r)   r   r    s        r!   test_to_ecsv_clsz'ReadWriteECSVTestMixin.test_to_ecsv_cls1   s*    //b7333333    in_metaTFc                     |dz  } ||d|           t          j        |          }|r%|j        d         |j        k    sJ d|j        vsJ dS |d         d         |j        k    sJ d|j        vsJ dS )z)Test where the cosmology class is placed.ztest_to_ecsv_in_meta.ecsvr   )r   cosmology_in_meta	cosmologyr   N)r   r   meta__qualname__colnames)r   	cosmo_clsr   r.   r   add_cur    tbls           r!   test_to_ecsv_in_metaz+ReadWriteECSVTestMixin.test_to_ecsv_in_meta8   s     33bAAAA k"oo 	/8K(I,BBBBBcl222222{#A&)*@@@@@ch......r-   c                    |dz  } ||d           t          j        |          }|j        d         |j        k    sJ |d         |j        k    sJ d|d<   |                    |dd	           t          |j        j        	                                          d
         j
        dk    r7 ||d          }	|	j        |u sJ |	j        |j        k    sJ d|	j        vsJ dS t          j        t          d          5   ||d           ddd           n# 1 swxY w Y    ||dd          }	|	|k    sJ |	j        d         dk    sJ |                    d           |                    |dd	            ||d          }	|	|k    sJ t           |j        d                  |j        d<    ||d          }	|	|k    sJ  ||          }	|	|k    sJ dS )z*Test cosmology -> ascii.ecsv -> cosmology.z!test_readwrite_ecsv_instance.ecsvr   r   r1   namez
will errormismatchingT)r   	overwrite   Nzthere are unused parametersr   )r   move_to_meta)r   r   r2   r3   r:   r   tuple_init_signature
parametersvalueskind	__class__r   r   r&   remove_columnr   )
r   r5   cosmor   r   r   r6   r    r7   gots
             r!   test_readwrite_ecsv_instancez3ReadWriteECSVTestMixin.test_readwrite_ecsv_instanceI   sw    ;;
 	b&&&& k"oox$	(>>>>>6{ej((((
 *M		"\T	::: &188::;;B?DII$r,///C=I----8uz)))) 0000F ]9,IJJJ 	* 	*DL))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* d2l>>>e||||x&,6666 	-(((		"\T	:::d2l+++e|||| !338K3H Id2l+++e|||| d2hhe||||||s   ;DDDc                    |dz  } ||d           t          j        |          }|j                            dd           |d= |                    |d           |                    |d          }	 ||d|	          }
 ||d|j        	          }|	|
k    r|
|k    sJ |	|k    sJ |	j        |j        j        d         j	        k    sJ |	
                    |j        |j        |j        
          |k    sJ |	j        |j        k    sJ 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   r1   NTcmb0T)r<   )r   r1   )r:   rK   m_nu)r   r   r2   popr   r3   rK   rA   rB   defaultcloner:   rL   )r   r5   rG   r   r   r   r6   r    r7   rH   got2got3s               r!   )test_readwrite_ecsv_subclass_partial_infoz@ReadWriteECSVTestMixin.test_readwrite_ecsv_subclass_partial_info   s8    CC 	b&&&& k"oo[$'''L		"	%%% nnRn55tB|yAAAtB|y7MNNNt$$,,,, e||||yI5@IQQQQQyyej%*yMMQVVVVVx5:%%%%%%r-   c                    |dz  }|                     d          }|                     d          }t          d |||fD             d          }	|	                    |d	           t          j        t
          d
          5   ||d	           ddd           n# 1 swxY w Y    ||dd          }
|
|k    sJ  |||j        d          }
|
|k    sJ |	                    d            |||j        d          }||k    sJ dS )z Test if table has multiple rows.z!test_readwrite_ecsv_mutlirow.ecsvr   )r:   zrow 2c                 8    g | ]}|                     d           S )zastropy.table)	to_format).0cs     r!   
<listcomp>zGReadWriteECSVTestMixin.test_readwrite_ecsv_mutlirow.<locals>.<listcomp>   s$    KKKaQ[[))KKKr-   silent)metadata_conflictsr   r   zneed to select a specific rowr   Nr	   r   r:   )rO   r   r   r   r   
ValueErrorr:   	add_index)r   rG   r   r   r   r6   r    cosmo1cosmo2r7   rH   rP   s               r!   test_readwrite_ecsv_mutlirowz3ReadWriteECSVTestMixin.test_readwrite_ecsv_mutlirow   s   ;; '**'**KKFE63JKKK'
 
 
 			"\	*** ]:-LMMM 	* 	*DL))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* d2Q|444e|||| d2UZ===e|||| 	ftBej>>>u}}}}}}s   BB #B N)__name__
__module__r3   __doc__r"   r(   r   markparametrizer   r   r,   r8   rI   rR   r_   r+   r-   r!   r   r      s         9 9 9 5 5 5 [Y884 4 984 [Yu66/ / 76/ 7 7 7r& & &B         r-   r   c                       e Zd ZdZ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                 .    t           t          d| _        d S )N)r   r   )r   r   	functions)r   s    r!   setup_classzTestReadWriteECSV.setup_class   s    "+jAAr-   N)r`   ra   r3   rb   ri   r+   r-   r!   rf   rf      s2         B B B B Br-   rf   )r   astropy.cosmology.corer   astropy.cosmology.io.ecsvr   r   astropy.tabler   r   r   baser
   r   r   rf   r+   r-   r!   <module>rn      s     6 5 5 5 5 5 ; ; ; ; ; ; ; ; / / / / / / / / / / A A A A A A A A
s s s s s3 s s sl	B 	B 	B 	B 	B/1G 	B 	B 	B 	B 	Br-   