
    HR-e                         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	m
Z
 ddlmZmZ  G d de          Z G d	 d
ee          ZdS )    N)OrderedDict)	Cosmology)from_mapping
to_mapping   )ToFromDirectTestBaseToFromTestMixinBasec                       e Zd ZdZd Zd Zej                            de	e
g          d             Zd Zd Zd Zd	 Zd
 Zd Zd Zej                            dg d          d             ZdS )ToFromMappingTestMixina  Tests for a Cosmology[To/From]Format with ``format="mapping"``.

    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                 h    |d          }t          |                                          }t          |t                    sJ |d         dk    sJ |                    d          |j        u sJ |d         dk    sJ |                    d          |j        k    sJ t          |j        d          D ]K\  }}||         |k    sJ t          j
        |                    |          t          ||                    sJ L|d         d	k    sJ |                    d	          |j        k    sJ |rJ d
S )z+Test default usage of Cosmology -> mapping.mappingr   	cosmologyr   name   )startmetaN)tuplekeys
isinstancedictpop	__class__r   	enumerate__parameters__nparray_equalgetattrr   )selfcosmo	to_formatmr   iks          Glib/python3.11/site-packages/astropy/cosmology/io/tests/test_mapping.pytest_to_mapping_defaultz.ToFromMappingTestMixin.test_to_mapping_default   sD   Ii  QVVXX!T"""""Aw+%%%%uu[!!U_4444Aw&    uuV}}
****e2!<<< 	? 	?DAq7a<<<<>!%%((GE1,=,=>>>>>>Bx6!!!!uuV}}
****     c                     t          j        t          d          5   |dt                     ddd           dS # 1 swxY w Y   dS )z4Test incorrect argument ``cls`` in ``to_mapping()``.z'cls' must bematchr   clsN)pytestraises	TypeErrorlist)r   r!   s     r%   test_to_mapping_wrong_clsz0ToFromMappingTestMixin.test_to_mapping_wrong_cls2   s    ]9O<<< 	+ 	+IiT****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   <A A map_clsc                 D     |d|          }t          ||          sJ dS )z*Test argument ``cls`` in ``to_mapping()``.r   r+   N)r   )r   r!   r2   r"   s       r%   test_to_mapping_clsz*ToFromMappingTestMixin.test_to_mapping_cls7   s4     IiW---!W%%%%%%%r'   c                 j    |d          } |dd          }t          j        |d                   sJ ||d         u sJ ||k    sJ  |dd          }t          |d         t                    sJ |d         |j        k    sJ t          |                                          d         dk    sJ dS )z7Test argument ``cosmology_as_str`` in ``to_mapping()``.r   Fcosmology_as_strr   Tr   N)inspectisclassr   str__qualname__r   r   )r   	cosmo_clsr!   defaultr"   s        r%    test_to_mapping_cosmology_as_strz7ToFromMappingTestMixin.test_to_mapping_cosmology_as_str=   s    )I&& Ii%888q~.....AkN****G|||| Ii$777!K.#.....~!77777QVVXXq![000000r'   c                 n     |dd          } ||d          }||k    sJ |j         |j         k    sJ dS )zTest roundtrip with ``cosmology_as_str=True``.

        The test for the default option (`False`) is in ``test_tofrom_mapping_instance``.
        r   Tr6   formatNr   r   r    r!   from_formatr"   gots         r%   $test_tofrom_mapping_cosmology_as_strz;ToFromMappingTestMixin.test_tofrom_mapping_cosmology_as_strN   sT    
 Ii$777k!I...e||||x5:%%%%%%r'   c                     |d          } |dd          d                                 v sJ t          fdd         D                       rJ |k    sJ  |dd          d                                 vsJ t          fd|d         D                       sJ t          fd|                                D                       sJ d	S )
z5Test argument ``move_from_meta`` in ``to_mapping()``.r   Fmove_from_metar   c              3       K   | ]}|v V  	d S N .0r$   r"   s     r%   	<genexpr>zHToFromMappingTestMixin.test_to_mapping_move_from_meta.<locals>.<genexpr>`   s'      11!qAv111111r'   Tc              3       K   | ]}|v V  	d S rK   rL   rM   s     r%   rO   zHToFromMappingTestMixin.test_to_mapping_move_from_meta.<locals>.<genexpr>g   s'      33a16333333r'   c              3   `   K   | ](\  }}|d k    t          j        ||                   V  )dS )r   N)r   r   )rN   r$   vr"   s      r%   rO   zHToFromMappingTestMixin.test_to_mapping_move_from_meta.<locals>.<genexpr>i   s;      VVtq!!v++2>!QqT**++++VVr'   N)r   anyallitems)r   r!   r=   r"   s      @r%   test_to_mapping_move_from_metaz5ToFromMappingTestMixin.test_to_mapping_move_from_metaY   s   )I&& Ii666!!!!1111qy11111111G|||| Ii555QVVXX%%%%333376?33333333VVVVw}}VVVVVVVVVVr'   c                     |dd          }d|d<   t          |j        j                                                  d         j        dk    r, ||d          }|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	S )zATest roundtrip of ``move_from/to_meta`` in ``to/from_mapping()``.r   TrH   z
will errormismatchingr      r@   Nzthere are unused parametersr)   )rA   move_to_meta)
r   _init_signature
parametersvalueskindr   r   r-   r.   r/   rC   s         r%   $test_tofrom_mapping_move_tofrom_metaz;ToFromMappingTestMixin.test_tofrom_mapping_move_tofrom_metak   sW    Ii555'- &188::;;B?DII+a	222C8uz)))) 0000F ]9,IJJJ 	- 	-K),,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- k!IDAAAe||||x&,666666s   B..B25B2c                     t          j        t          t          f          5   |dd           ddd           dS # 1 swxY w Y   dS )z.Test incorrect map type in ``from_mapping()``.z	NOT A MAPr   r@   N)r-   r.   r/   
ValueError)r   r    rD   s      r%   test_from_not_mappingz,ToFromMappingTestMixin.test_from_not_mapping   s    ]Iz233 	7 	7KI6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   <A A c                      |d          } ||d          }||k    sJ |j         |j         k    sJ  ||          }||k    sJ |j         |j         k    sJ dS )z)Test (cosmology -> Mapping) -> cosmology.r   r@   NrB   rC   s         r%   test_from_mapping_defaultz0ToFromMappingTestMixin.test_from_mapping_default   s    Ii   k!I...e||||x5:%%%% k!nne||||x5:%%%%%%r'   c                 2   |                     d          }|                    dd           |                    dd           |j                            |d          }t	          j        |d|j                  }t	          j        |d|j        j                  }||k    r||k    sJ ||k    sJ |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.
        r   r   NTcmb0r@   )rA   r   )r   rf   m_nu)r!   r   r   rD   r   r;   rf   r[   r\   r=   cloner   rg   r   )r   r    r"   rE   got2got3s         r%   -test_fromformat_subclass_partial_info_mappingzDToFromMappingTestMixin.test_fromformat_subclass_partial_info_mapping   s%   
 OOI&& 	
k4   	gt o))!I)>>$QyEOTTT$i5?+G
 
 
 t$$,,,, e||||yEO;FwOWWWWWyyej%*yMMQVVVVVx5:%%%%%%r'   rA   )TFNr   c                      |d          }t          |t                    rJ |                    ||          }||duu sJ dS )zTest :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 mapping.
        r   r@   FN)r   r   is_equivalent)r   r    r!   rA   objis_equivs         r%   test_is_equivalent_to_mappingz4ToFromMappingTestMixin.test_is_equivalent_to_mapping   s]     i	""c9-----&&s6&::F%/000000r'   N)__name__
__module__r;   __doc__r&   r1   r-   markparametrizer   r   r4   r>   rF   rV   r_   rb   rd   rk   rp   rL   r'   r%   r   r      s          (+ + +
 [Y{(;<<& & =<&
1 1 1"	& 	& 	&W W W$7 7 767 7 7
& & && & &8 [X'E'E'EFF1 1 GF1 1 1r'   r   c                   ^    e Zd ZdZd Zej                            d          d             ZdS )TestToFromMappingz"Directly test ``to/from_mapping``.c                 .    t           t          d| _        d S )N)tofrom)r   r   	functionsr   s    r%   setup_classzTestToFromMapping.setup_class   s     *LAAr'   zN/Ac                     dS )z1This test does not apply to the direct functions.NrL   r|   s    r%   rk   z?TestToFromMapping.test_fromformat_subclass_partial_info_mapping   s      r'   N)	rq   rr   r;   rs   r}   r-   rt   skiprk   rL   r'   r%   rw   rw      s]        ,,B B B [e@ @ @ @ @r'   rw   )r8   collectionsr   numpyr   r-   astropy.cosmologyr   astropy.cosmology.io.mappingr   r   baser   r	   r   rw   rL   r'   r%   <module>r      s     # # # # # #      ( ' ' ' ' ' A A A A A A A A ; ; ; ; ; ; ; ;
m1 m1 m1 m1 m10 m1 m1 m1`@ @ @ @ @,.D @ @ @ @ @r'   