
    HR-ej+                     P   d 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 ddlmZmZ ddlmZ ddlmZmZ dd	lmZ d
dddZ ed          d         Z G d de          Z G d deee          Z G d dee          Zej                            e d          d             ZdS )z.Testing :mod:`astropy.cosmology.flrw.w0wzcdm`.    N)Flatw0wzCDMw0wzCDM)	Parameter)ParameterTestMixinmake_valid_zs)	HAS_SCIPY   )FlatFLRWMixinTestFLRWTest)Parameterw0TestMixin皙?        )w0wzTcmb0i  )max_zc                       e Zd ZdZd Zd ZdS )ParameterwzTestMixina%  Tests for `astropy.cosmology.Parameter` wz on a Cosmology.

    wz is a descriptor, which are tested by mixin, here with ``TestFLRW``.
    These tests expect dicts ``_cls_args`` and ``cls_kwargs`` which give the
    args and kwargs for the cosmology class, respectively. See ``TestFLRW``.
    c                     t          |j        t                    sJ d|j        j        v sJ |j        j        J |j        |j        u sJ |j        | j        d         k    sJ dS )zTest Parameter ``wz``.zDerivative of the dark energyNr   )
isinstancer   r   __doc__unit_wz
cls_kwargs)self	cosmo_clscosmos      Ilib/python3.11/site-packages/astropy/cosmology/flrw/tests/test_w0wzcdm.pytest_wzzParameterwzTestMixin.test_wz(   sz     ),	22222.),2FFFFF| ((( x59$$$$x4?40000000    c                    |j         d         t          j        z  |j         d<    ||j        i |j        }|j        |j         d         k    sJ |j         d         j        |j         d<    ||j        i |j        }|j        |j         d         k    sJ dt          j        z  |j         d<   t          j	        t                    5   ||j        i |j         ddd           dS # 1 swxY w Y   dS )z)Test initialization for values of ``wz``.r   
   N)	argumentsuoneargskwargsr   valuekmpytestraises	TypeError)r   r   bar   s       r    test_init_wzz!ParameterwzTestMixin.test_init_wz3   s;     \$/158T	270bi00x2<-----  \$/5T	270bi00x2<-----  !$YT]9%% 	- 	-Irw,"),,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   C!!C%(C%N)__name__
__module____qualname__r   r!   r0    r"   r    r   r       s<         	1 	1 	1- - - - -r"   r   c                   :    e Zd ZdZ fdZ fdZd Z fdZej	        
                    de           fd            Zd Zej	                            d	           fd
            Zej	                            e d          ej	        
                    ddi g dej        z  fddddej        z  dg dej        z  fddddej        z  dg dej        z  fg           fd                        Zej	                            e d          d             Z xZS )Testw0wzCDMz(Test :class:`astropy.cosmology.w0wzCDM`.c                     t                                          |            t          | _        | j                            dd           dS )Setup for testing.r         ?r   r   N)supersetup_classr   clsr   updater   	__class__s    r    r<   zTestw0wzCDM.setup_classH   sC    D!!!"-----r"   c                    t                                          |           |                    dd          }|j        dk    sJ |j        dk    sJ t          |j                  ddhz
  D ]b}t          ||          }||t          ||          u sJ )t          j	        |t          ||          dt          |dd	          z  
          sJ cdS )z7Test method ``.clone()`` changing a(many) Parameter(s).r   皙?r:   r   r   N-C6?r   r	   )atol)
r;   test_clone_change_paramcloner   r   set__parameters__getattrr&   allclose)r   r   cnvr@   s        r    rE   z#Testw0wzCDM.test_clone_change_paramQ   s    ''... KK33K''ts{{{{ts{{{{U)**dD\9 	 	A1AyGE1-------zwua((tga6K6K/K      	 	r"   c                     t          j        |                    d          d          sJ t          j        |                    g d          g d          sJ dS )z)Test :meth:`astropy.cosmology.w0wzCDM.w`.      ?      )r   r9   rO         ?gffffff@)g      g      rP   g      пg333333?N)r&   rJ   wr   r   s     r    test_wzTestw0wzCDM.test_wc   sm     z%''#,,-----zGG---..0P0P0P
 
 	
 	
 	
 	
 	
r"   c                 z    t                                          ||           d}t          |          |k    sJ dS )Test method ``.__repr__()``.zw0wzCDM(name="ABCMeta", H0=70.0 km / (Mpc s), Om0=0.27, Ode0=0.73, w0=-1.0, wz=0.5, Tcmb0=3.0 K, Neff=3.04, m_nu=[0. 0. 0.] eV, Ob0=0.03)Nr;   	test_reprreprr   r   r   expectedr@   s       r    rX   zTestw0wzCDM.test_reprl   sF    )U+++- 	
 E{{h&&&&&&r"   zc                 L    t                                          ||           dS )zTest :meth:`astropy.cosmology.w0wzCDM.Otot`.

        This is tested in the base class, but we need to override it here because
        this class is quite unstable.
        Nr;   	test_Ototr   r   r\   r@   s      r    r_   zTestw0wzCDM.test_Ototy   %     	%#####r"   c                     t          j        t          d          5  |                    d           ddd           dS # 1 swxY w Y   dS )z9Test :meth:`astropy.cosmology.w0wzCDM.Otot` for overflow.zoverflow encountered in exp)matchg     @@N)r,   warnsRuntimeWarningOtotrS   s     r    test_Otot_overflowzTestw0wzCDM.test_Otot_overflow   s    \.0MNNN 	 	JJsOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ?AAzignore:overflow encounteredc                 N    t                                          |||           dS )z Test cosmology -> astropy.model.N)r;   test_toformat_model)r   r   	to_formatmethod_namer@   s       r    ri   zTestw0wzCDM.test_toformat_model   s'     	##E9kBBBBBr"   scipy is not installedreasonr(   r)   r[   )     R@333333?g333333?)gr0\g@gDϱ@gmCֵ@gwb@)rp         ?r9         @   r   r   Neffm_nu)g
@g/l:@gm|ǵ@gD1@      )gẔk@gd5T@g^j @g
*ݳ@c                 b    t                                          ||i t          ||           dS zTest :meth:`astropy.cosmology.LambdaCDM.comoving_distance`.

        These do not come from external codes -- they are just internal checks to make
        sure nothing changes if we muck with the distance calculators.
        Nr;   test_comoving_distance_example COMOVING_DISTANCE_EXAMPLE_KWARGSr   r   r(   r)   r[   r@   s        r    r}   z*Testw0wzCDM.test_comoving_distance_example   @    6 	..tK @KFKX	
 	
 	
 	
 	
r"   c           	          t          j         |ddddd                              d          dt           j        z  d	
          sJ dS )7  Test with Mathematica example.

        This test should be updated as the code changes.

        ::
            In[1]:= {Om0, w0, wz, H0, c}={0.3,-0.9, 0.2, 70, 299792.458};
            c/H0 NIntegrate[1/Sqrt[Om0*(1+z)^3+(1-Om0)(1+z)^(3(1+w0-wz)) Exp[3 *wz*z]],{z, 0, 0.5}]
            Out[1]= 1849.75
        F   rq   r   rB   ffffff?)H0Om0r   r   Ode0r9        @rC   rtolNr&   rJ   comoving_distanceMpcr   r   s     r    "test_comoving_distance_mathematicaz.Testw0wzCDM.test_comoving_distance_mathematica   sd     zI#C@@@RRSVWWaeO
 
 
 	
 	
 	
 	
 	
r"   )r1   r2   r3   r   r<   rE   rT   rX   r,   markparametrizevalid_zsr_   rg   filterwarningsri   skipifr   r&   r   eVr}   r   __classcell__r@   s   @r    r6   r6   E   s       22. . . . .    $
 
 
	' 	' 	' 	' 	' [S(++$ $ $ $ ,+$   [ =>>C C C C ?>C [I.FGG[& !LLLquT "q!ad(;;LLLquT "q!ad(;;LLLquT	
 (
 
 
 
)  HG*
 [I.FGG
 
 HG
 
 
 
 
r"   r6   c                       e Zd ZdZ fdZ fdZej                            de	           fd            Z
d Zej                            e d          ej                            d	d
i g dej        z  fddddej        z  dg dej        z  fddddej        z  dg dej        z  fg           fd                        Zej                            e d          d             Z xZS )TestFlatw0wzCDMz,Test :class:`astropy.cosmology.Flatw0wzCDM`.c                 b    t                                          |            t          | _        dS )r8   N)r;   r<   r   r=   r?   s    r    r<   zTestFlatw0wzCDM.setup_class   s&    D!!!r"   c                 z    t                                          ||           d}t          |          |k    sJ dS )rV   zFlatw0wzCDM(name="ABCMeta", H0=70.0 km / (Mpc s), Om0=0.27, w0=-1.0, wz=0.5, Tcmb0=3.0 K, Neff=3.04, m_nu=[0. 0. 0.] eV, Ob0=0.03)NrW   rZ   s       r    rX   zTestFlatw0wzCDM.test_repr   sF    )U+++8 	
 E{{h&&&&&&r"   r\   c                 L    t                                          ||           dS )zTest :meth:`astropy.cosmology.Flatw0wzCDM.Otot`.

        This is tested in the base class, but we need to override it here because
        this class is quite unstable.
        Nr^   r`   s      r    r_   zTestFlatw0wzCDM.test_Otot   ra   r"   c                 0    |                     d           dS )zDTest :meth:`astropy.cosmology.Flatw0wzCDM.Otot` for NOT overflowing.g     j@N)rf   rS   s     r    rg   z"TestFlatw0wzCDM.test_Otot_overflow   s    

3r"   rl   rm   ro   )rp   rq   )gy@g}('V@gu怶@gFI%h@)rp   rr   rs   rt   r   ru   )gTzJ@g~Az@g1t@gP_d为@rx   ry   )guᜣ@gǬ@gƯ/D%@g|"6U	@c                 b    t                                          ||i t          ||           dS r{   r|   r   s        r    r}   z.TestFlatw0wzCDM.test_comoving_distance_example   r   r"   c                     t          j         |dddd                              d          dt           j        z  d	          sJ d
S )r   r   rq   r   rB   r   r   r   r   r9   r   rC   r   Nr   r   s     r    r   z2TestFlatw0wzCDM.test_comoving_distance_mathematica  sa     zI#666HHMMaeO
 
 
 	
 	
 	
 	
 	
r"   )r1   r2   r3   r   r<   rX   r,   r   r   r   r_   rg   r   r   r&   r   r   r}   r   r   r   s   @r    r   r      s       66    
	' 	' 	' 	' 	' [S(++$ $ $ $ ,+$   [I.FGG[& LLLquT q!ad(;;KKKaeS q!ad(;;LLLquT	
 (
 
 
 
)  HG*
 [I.FGG
 
 HG
 
 
 
 
r"   r   ztest requires scipyrm   c                     t          ddddd          } t          j        g d          }t          j        |                     |          g dd	          sJ t          j        |                     d
          |                     d          d	          sJ t          j        |                     g d          |                     g d          d	          sJ t          ddddd          } t          dddd          }t          j        |                     |          |                    |          d	          sJ d S )Nr   rq   r9   r   )r   r   r   r   r   )r   rB   r9   rQ   g      @)g#'t?grCn?gTYp?gg
3@gW$hĳ@rC   r   rt   rs   gHz>)r	      rt   )rO   g       @rs   r   r   )r   nparrayr&   rJ   de_density_scaler   )r   r\   	flatcosmos      r    test_de_densityscaler     s|   rs"===E
***++A:q!!DDD      :e,,Q//1G1G1L1LSWXXXXXX:yyy))//      rs<<<Ersrc:::I:q!!9#=#=a#@#@t       r"   )r   numpyr   r,   astropy.unitsunitsr&   astropy.cosmologyr   r   astropy.cosmology.parameterr   !astropy.cosmology.tests.test_corer   r   "astropy.utils.compat.optional_depsr   	test_baser
   r   
test_w0cdmr   r~   r   r   r6   r   r   r   r   r4   r"   r    <module>r      s   5 4            2 2 2 2 2 2 2 2 1 1 1 1 1 1 O O O O O O O O 8 8 8 8 8 8 2 2 2 2 2 2 2 2 , , , , , ,
 +/cC#H#H  =s###B'"- "- "- "- "-- "- "- "-J{
 {
 {
 {
 {
(02F {
 {
 {
|R
 R
 R
 R
 R
' R
 R
 R
t 	M*?@@  A@  r"   