
    HR-eț              	          d Z ddlZddlZddlZddlmZ ddlm	c m
Z ddlm
Z ddlmZ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 dd	lmZ d
dlm Z m!Z! ej"        #                    ed          d             Z$ G d de!          Z% G d de e%          Z&ej"        #                    e d          d             Z' eddd           eddd           eddd           edddd          gZ(dg d ej)        g d          gZ*ej"        #                    e d          ej"        +                    de(          ej"        +                    de*          d                                      Z,ej"        #                    e d          ej"        +                    de(          d!                         Z-ej"        #                    e d          d"             Z.ej"        #                    e d          d#             Z/ej"        #                    e d          ej"        +                    d$g d%          d&                         Z0ej"        #                    e d          d'             Z1ej"        #                    e d          d(             Z2ej"        #                    e d          d)             Z3ej"        #                    e d          d*             Z4d+ Z5ej"        #                    e d          d,             Z6ej"        #                    e d          d-             Z7ej"        #                    e d          d.             Z8ej"        #                    e d          d/             Z9ej"        #                    e d          d0             Z:ej"        #                    e d          d1             Z;ej"        #                    e d          d2             Z<ej"        #                    e d          d3             Z=ej"        #                    e d          d4             Z>ej"        #                    e d          d5             Z?ej"        #                    e d          d6             Z@ej"        #                    e d          d7             ZAej"        #                    e d          d8             ZBej"        #                    e d          d9             ZCej"        #                    e d          d:             ZDej"        #                    e d          d;             ZEej"        #                    e d          d<             ZFej"        #                    e d          d=             ZGej"        #                    e d          d>             ZHdS )?z0Testing :mod:`astropy.cosmology.flrw.lambdacdm`.    N)FlatLambdaCDM	LambdaCDM)	ellipkinchyp2f1)get_redshift_methods)
invalid_zsvalid_zs)QTable)	HAS_SCIPY)AstropyUserWarning   )FlatFLRWMixinTestFLRWTestzscipy is installedreasonc                     t          j        t          d          5  t                       ddd           n# 1 swxY w Y   t          j        t          d          5  t	                       ddd           dS # 1 swxY w Y   dS )zATest stand-in functions when optional dependencies not installed.zNo module named 'scipy.special'matchN)pytestraisesModuleNotFoundErrorr   r        Klib/python3.11/site-packages/astropy/cosmology/flrw/tests/test_lambdacdm.pytest_optional_deps_functionsr   #   s     
*2S	T	T	T                 
*2S	T	T	T                   s   7;;A99A= A=c                       e Zd ZdZ fdZ eedd          dhz
  Zej	        
                    e d          ej	                            d	e          ej	                            d
e           fd                                    Zej	                            de           fd            Z fdZej	        
                    e d          ej	                            ddddig dej        z  fddd ej        dej                  dg dej        z  fddd ej        dej                  dg dej        z  fg           fd                        Z xZS )TestLambdaCDMz*Test :class:`astropy.cosmology.LambdaCDM`.c                 b    t                                          |            t          | _        dS zSetup for testing.N)supersetup_classr   clsself	__class__s    r   r!   zTestLambdaCDM.setup_class3   s&    D!!!r   TF)include_private
include_z2_dS_agescipy is not installedr   z, excmethodc                 P    t                                          ||||           dS z,Test all the redshift methods for bad input.Nr    test_redshift_method_bad_inputr$   cosmor+   zexcr%   s        r   r/   z,TestLambdaCDM.test_redshift_method_bad_inputA   )    
 	..ufaEEEEEr   r2   c                     t                                          ||           |                    |          }t          j        |d          sJ dS )z+Test :meth:`astropy.cosmology.LambdaCDM.w`.g      N)r    test_wwuallclose)r$   r1   r2   r7   r%   s       r   r6   zTestLambdaCDM.test_wH   sJ     	ua   GGAJJz!T"""""""r   c                 z    t                                          ||           d}t          |          |k    sJ dS )Test method ``.__repr__()``.zzLambdaCDM(name="ABCMeta", H0=70.0 km / (Mpc s), Om0=0.27, Ode0=0.73, Tcmb0=3.0 K, Neff=3.04, m_nu=[0. 0. 0.] eV, Ob0=0.03)Nr    	test_reprreprr$   	cosmo_clsr1   expectedr%   s       r   r=   zTestLambdaCDM.test_reprP   F    )U+++ 	
 E{{h&&&&&&r   argskwargsrA   )     R@      ?      ?Tcmb0        )gs+@g[
@g5@g](@)rF   rG   333333?      @   rI   Neffm_nu)gՖם@@gܨ@g̗8@gʱ@)rF   333333?g?      $@)g50ϜO@gLiaޫ@g~(o@g)k4@c                 P    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r$   r@   rD   rE   rA   r%   s        r   rV   z,TestLambdaCDM.test_comoving_distance_example[   s)    6 	..y$QQQQQr   )__name__
__module____qualname____doc__r!   r   r   _FLRW_redshift_methodsr   markskipifr   parametrizer   r/   r	   r6   r=   r8   MpcQuantityeVrV   __classcell__r%   s   @r   r   r   0   s7       44     214E  	 [I.FGG[Xz22[X'=>>F F F F ?> 32 HGF [S(++# # # # ,+#	' 	' 	' 	' 	' [I.FGG[& "#KKKaeS "q*!*S!$2G2GHHLLLquT !q*!*T142H2HIIKKKaeS	
 (R R R R)  HG*R R R R Rr   r   c                       e Zd ZdZ fdZej                            e d          ej        	                    de
          ej        	                    dej        dhz
             fd                                    Z fd	Zej                            e d          ej        	                    d
dddig dej        z  fddd ej        dej                  dg dej        z  fddd ej        dej                  dg dej        z  fdd ej        g dej                  dg dej        z  fdd ej        g dej                  dg dej        z  fdd ej        g dej                  dg dej        z  fddd ej        g dej                  dg dej        z  fg           fd                        Z xZS ) TestFlatLambdaCDMz.Test :class:`astropy.cosmology.FlatLambdaCDM`.c                 b    t                                          |            t          | _        dS r   )r    r!   r   r"   r#   s    r   r!   zTestFlatLambdaCDM.setup_class   s&    D!!! r   r)   r   r*   r+   Ototc                 P    t                                          ||||           dS r-   r.   r0   s        r   r/   z0TestFlatLambdaCDM.test_redshift_method_bad_input   r4   r   c                 z    t                                          ||           d}t          |          |k    sJ dS )r;   zsFlatLambdaCDM(name="ABCMeta", H0=70.0 km / (Mpc s), Om0=0.27, Tcmb0=3.0 K, Neff=3.04, m_nu=[0. 0. 0.] eV, Ob0=0.03)Nr<   r?   s       r   r=   zTestFlatLambdaCDM.test_repr   rB   r   rC   )rF   rG   rI   rJ   )ghv٨@g
ĳ@gm@ga:@rL   rM   rN   )g_oب@gó@gdk@g@rR   )gjC@gvW@gp(@gK9@)rR   r   r   rI   rP   )g_\n@g>Z@gʲ@g@)rR      r   )gY^@g3H@gM>QL@gUNX]@)      @rl   	   )gc@g	iD@g՚@gh@g@)      ?rm   rl   rn   )g)@gc@gD@@g`}y%@c                 P    t                                          ||||           dS rT   rU   rW   s        r   rV   z0TestFlatLambdaCDM.test_comoving_distance_example   s*    ^ 	..y$QQQQQr   )rX   rY   rZ   r[   r!   r   r]   r^   r   r_   r   r   r\   r/   r=   r8   r`   ra   rb   rV   rc   rd   s   @r   rf   rf   |   s       88! ! ! ! !
 [I.FGG[Xz22[X}'Kvh'VWWF F F F XW 32 HGF	' 	' 	' 	' 	' [I.FGG[& #JJJQUR q*!*S!$2G2GHHLLLquT q*!*T142H2HIILLLquT zqz,,,'E'EFFKKKaeS zqz,,,'E'EFFLLLquT zqz+++qt'D'DEEKKKaeS sJAJ?O?O?OQRQU4V4VWWLLLquT?$	
' 'PR R R RQ' ' HGRR R R R Rr   rf   zrequires scipy.c                  x   t          ddd          } t          j        |                     d          g dt          j        z  d          sJ t          j        |                     d          g d	t          j        z  d          sJ t          j        |                     d          g d
t          j        z  d          sJ t          j        |                     d          g dt          j        z  d          sJ t          j        | 	                    d          g dt          j        z  d          sJ dS )a  Test a flat cosmology at z=1 against several other on-line calculators.

    Test values were taken from the following web cosmology calculators on
    2012-02-11:

    Wright: http://www.astro.ucla.edu/~wright/CosmoCalc.html
            (https://ui.adsabs.harvard.edu/abs/2006PASP..118.1711W)
    Kempner: http://www.kempner.net/cosmic.php
    iCosmos: http://www.icosmos.co.uk/index.html
    F   HzG?rJ   H0Om0rI   r   )g     I@gI@gHPI@-C6?rtol)g33333I@gI@gHPI@)g33333I@gI@gHPI@)gw/]@g ]@gZd;_@gMbP?)g     Ȣ@gGzȢ@gȢ@N)
r   r8   r9   comoving_distancer`   angular_diameter_distanceluminosity_distancelookback_timeGyrlookback_distancer1   s    r   test_flat_z1r      s    RT555E :""$?$?$?!%$Gd      :''**###ae+     
 :!!!$$&A&A&AAE&IPT      :A 7 7 7!% ?d      :""$=$=$=$ED       r   rr   rJ   rt   ro   rQ   rK   ru   rv   Ode0rI   )r   r      rM      ztest requires scipyr1   r2   c                     t          j        |                     |          |                     d|                    sJ dS )zs
    Regression test for #10980
    Test that specialized comoving distance methods handle iterable arguments.
    rJ   N)r8   r9   rz    _integral_comoving_distance_z1z2r1   r2   s     r   (test_comoving_distance_iterable_argumentr     sP     :""E$J$J3PQ$R$R      r   c                    t          j        d          }t          j        d          }t          j        d          }t          j        ||          j        }|                     ||          j        |k    sJ t          j        t          d          5  |                     ||           ddd           dS # 1 swxY w Y   dS )zs
    Regression test for #10980
    Test that specialized comoving distance methods broadcast array arguments.
    )r   rl   )rM   r   rl   )   rl   zz1 and z2 have different shapesr   N)	npzerosones	broadcastshape_comoving_distance_z1z2r   r   
ValueError)r1   z1z2z3output_shapes        r    test_comoving_distance_broadcastr     s     
&		B			B	B<B''-L ((R006,FFFF 
z)J	K	K	K . .%%b"---. . . . . . . . . . . . . . . . . .s   B77B;>B;c                  *   t          dddd          } d}t          j        |                     |          |                     d|                    sJ t          j        |                     d|          |                     d|                    sJ dS )	zRegression test for #8388.     Q@gffffff@g?r   rI   皙?rJ   N)r   r8   r9   rz   r    _elliptic_comoving_distance_z1z2r   s     r   $test_elliptic_comoving_distance_z1z2r   )  s     dCQ///EA:""E$J$J3PQ$R$R     :..sA66..sA66      r   c                     t          j        g d          } t          dddd          }t          j        |                    |           g dt          j        z  d	          sJ t          ddd
d          }t          j        |                    |           g dt          j        z  d	          sJ t          dddd          }t          j        |                    |           g dt          j        z  d	          sJ t          dddd          }t          j        |                    |           g dt          j        z  d	          sJ t          ddd
d          }t          j        |                    |           g dt          j        z  d	          sJ t          dddd          }t          j        |                    |           g dt          j        z  d	          sJ d}|dz  dz  dz  dz  }||z   dz  }d|z
  }dt          j        z  }t          d|d
d          }d|z  t          j        d|| z  z   d| z   z            dz
  z  |dz
  z  }t          j        |                    |           |d	          sJ t          j        |                    | 	                    t                              |d	          sJ |dz  }d|z
  }t          d|dd          }d|z  t          j        d|| z  z   d| z   z            dz
  z  |dz
  z  }t          j        |                    |           |d	          sJ dS )z8Tests the effects of changing the temperature of the CMB)ro   rR   g     @@     @@rr   rQ   r   rM   )ru   rv   rI   rO   )gϙ@gъ@g{G:@gbX9H+@gMb@?rx   @)g33333ϙ@g33333ϊ@g1Z:@gDl)+@rm   )g͙@gĊ@gw/}:@g(\*@RQ@)gq=
ףϙ@gq=
ףъ@gyX5:@gz6K+@h㈵>)gףp=
ϙ@gK7Ί@g0*:@g/'++@)gp=
̙@g?5^IÊ@gy&1|:@gX5;*@g.6^>g      @g       @g<|?g[(\?ro   gؿ@       @gS>)@N)r   arrayr   r8   r9   r{   r`   sqrtrz   astypeint)r2   r1   	Ogamma0h2Onu0h2Or0rv   hubdistargvalss           r   test_ogammar   7  s     	+++,,ARS:::E:''**'''!%/      RSA>>>E:''**'''!%/      RS!<<<E:''**'''!%/      RS===E:''**,,,qu4      RSDAAAE:''**,,,qu4      RS$???E:''**,,,qu4      JI_s"%@@4GFv
'C
)C15(FRSDAAAEV|rwcAg#''BCCcIJcTWiXH:e--a00(FFFFFF :e--ahhsmm<<hTRRRRRR C
)CRS$???EV|rwcAg#''BCCcIJcTWiXH:e--a00(FFFFFFFFr   	file_name)zcosmo_flat.ecsvzcosmo_open.ecsvzcosmo_closed.ecsvc                    t          j        t                    5  t          j        t          j        t                    j        dz  | z            }ddd           n# 1 swxY w Y   t          d|j
        d         z  |j
        d         |j
        d         d          }t          j        |                    |d	                   |d
                   sJ t          j        |                    |d	                   |d                   sJ t          j        |                    |d	                   |d                   sJ dS )z|Test against the tabulated values generated from icosmo.org
    with three example cosmologies (flat, open and closed).
    dataNd   hOmOlrJ   r   redshiftdmdadl)r8   add_enabled_unitscur
   readpathlibPath__file__parentr   metar9   comoving_transverse_distancer{   r|   )r   tblr1   s      r   test_flat_open_closed_icosmor     sg    
	R	 	  N Nk',x007&@9LMMN N N N N N N N N N N N N N N#CHTN$s  E :e88ZII3t9UUUUU:e55c*oFFD	RRRRR:e//J@@#d)LLLLLLLs   7AA!$A!c                     t          ddd          } t          j        t                    5  |                     dd           d d d            n# 1 swxY w Y   t          j        |                     dd          d	t
          j        z            sJ d
}d}t          j        |                     ||          |                     ||                    sJ t          ddd          } dt
          j        z  }t          j        |                     ||          |          sJ d
}d}t          j        |                     ||          |                     ||                    sJ t          dddd          } dt
          j        z  }t          j        |                     ||          |          sJ t          dddd          } d}d}dt
          j        z  }t          j        |                     ||          |          sJ d S )Nr   rQ   rJ   r   r   r   rM   r   rl   r   r   g꥓䄔@r   r   r   rH   r   r   r   r         @皙?      ?)gc}"t5@g!t3^@gL%"grbt@guEU@rH   )gDܟ@g/d@gd(g~"G@ghb@ro   r   皙?)r   r   r   rH   r   r   )gqqrJ   g}Z	o@g/w_@g֖&qJ@g]c: ߡ@)
r   r   r   r   "_comoving_transverse_distance_z1z2r8   r9   r`   r   r   tcosr   r   resultss       r   &test_comoving_transverse_distance_z1z2r     s   c---D	z	"	" C C//	BBBC C C C C C C C C C C C C C C ://1557IAE7Q     
B	B:$$R,,//B77     c---D 	
G :d==b"EEwOOOOO 
B	B:$$R,,//B77     S#s#...D 	
G :d==b"EEwOOOOO S#s#...D	B	!B 	
G :d==b"EEwOOOOOOOs   AAAc                  8   t          ddd          } t          j        t                    5  |                     ddgg d           d d d            n# 1 swxY w Y   t          j        |                     dd          dt
          j        z            sJ d}d}d	t
          j        z  }t          j        t          d
          5  t          j        |                     ||          |          sJ 	 d d d            n# 1 swxY w Y   d}d}dt
          j        z  }t          j        |                     ||          |          sJ d}d}dt
          j        z  }t          j        |                     d|          |          sJ t          dddd          } t          j        |                     dd          dt
          j        z            sJ t          dddd          } t          j        |                     dd          dt
          j        z            sJ d S )N皙Q@ rh?rJ   r   r   r   r   gFde1@gXJzless than first redshiftr   )r   r   rH   r   )r   r   r   r   )g\_@@g]ޕ@g-tkc@gV\@r   )r   r   rH   r   r   )rJ   g0p9t@gcҎ@g,z@gHQT@r   rH   r   gX`@r   gyl@)r   r   r   r   angular_diameter_distance_z1z2r8   r9   r`   warnsr   r   r   s       r   #test_angular_diameter_distance_z1z2r     s   uC000D	z	"	" ? ?++QFIII>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :++Aq113E3M     
B	
Bae#G	(0J	K	K	K P Pz$==b"EEwOOOOOOP P P P P P P P P P P P P P P 
B	B
 	
G :d99"bAA7KKKKK	B	BMPQPUUG:d99#rBBGLLLLL #Cs;;;D:++Aq113Dqu3L     #666D:++Aq113E3M      s#   AAA,C==DDc            
         t          j        g d          } d}t          ddddt          j        dt          j                            }|j        sJ |j        dk    sJ ||j        z  t          j        g d	          z  }t          j        |	                    |           |d
          sJ t          j        |
                    ddg          ddgd
          sJ t          ddddt          j        dt          j                            }||j        z  t          j        g d          z  }t          j        |	                    |           |d
          sJ t          j        g d          }t          j        |                    |           |d
          sJ t          ddddt          j        dt          j                            }||j        z  t          j        g d          z  }t          j        |	                    |           |d
          sJ t          j        g d          }t          j        |                    |           |d
          sJ t          j        |
                    ddg          ddgd          sJ t          j        |                    ddg          ddgd          sJ t          ddddt          j        g dt          j                            }||j        z  t          j        g d          z  }t          j        |	                    |           |d
          sJ t          j        g d          }t          j        |                    |           |d
          sJ |                     t                    } t          j        |	                    |           |d
          sJ t          j        |                    |           |d
          sJ d S ) N)rJ   ro   r   rR   r   g9C?rF   rG   rL   rM   g      Y@rN   )i g    @i  g    @gʡye@g{Gzt?rx   rJ   ro   g묈@)gX9z@g+j@gDla@g/݌C@g"?)gq'[?gguNڪ?g9RV?g5LT?gr"7?g      T@rQ   {Gz?)g_L<1@g:pX!@g R8_@gnLOX?gTr3 ?)g}E?g5_+J\?gV`?gO e?g3qx?r   gyvk62?gL|@rw   g>(?gܪ?r   )rJ   r   rG   )gZN\b@gё\CR@gfaI@gL:,@gϟxƥ?)g.[w?g0D]?g6\[%?gJ?g>M.?)r   r   r   r8   ra   rb   has_massive_nurO   r9   nu_relative_densityefuncOnu	inv_efuncr   r   )ztestnuprefacr   	nurel_exponu_exps        r   test_massivenu_densityr     s    H22233E6H t3QQZqt=T=TUUUD9>>>>49rx(R(R(RSSS  :d..u55ytLLLLLL:djj#s,,sM.BNNNNNN t3QQZad=S=STTTD49rx(U(U(UVVV  :d..u55ytLLLLLL hQQQRRG:dhhuoowT:::::: t3QQZad=S=STTTD 	49rx(U(U(UVVV  :d..u55ytLLLLLLhQQQRRG:dhhuoowT:::::::djj#s,,z:.FTRRRRRR:dnnc3Z009j2IPTUUUUUU d#Dqz:K:K:KQT/R/R  D 	
)	
(III
J
J	K 
 :d..u55ytLLLLLLhSSSTTG:dhhuoowT:::::: LLE:d..u55ytLLLLLL:dhhuoowT::::::::r   c                  2   t          ddd          } |                     d          j        t          j        k    sJ |                     dd          j        t          j        k    sJ |                     d          j        t          j        k    sJ |                     dd          j        t          j        k    sJ |                     d          j        t          j        k    sJ | 	                    dd          j        t          j        k    sJ | 
                    d          j        t          j        k    sJ |                     d          j        t          j        k    sJ |                     d          j        t          j        k    sJ |                     d          j        t          j        t          j        z  t          j        z  k    sJ |                     d          j        t          j        k    sJ |                     ddg          j        t          j        k    sJ |                     d          j        t          j        k    sJ |                     ddg          j        t          j        k    sJ |                     d          j        t          j        t          j        z  k    sJ |                     d          j        t          j        t          j        z  k    sJ |                     d          j        t          j        t          j        z  k    sJ |                     d          j        t          j        t          j        z  k    sJ |                     d          j        t          j        t          j        dz  z  k    sJ |                     d          j        t          j        dz  k    sJ |                     d          j        t          j        k    sJ |                      d          j        t          j!        k    sJ dS )	z*Test if the right units are being returnedrr   rs   r   rt   ro   rJ   rM   N)"r   rz   unitr8   r`   r   r   r   r{   r   r|   r}   r~   r   HkmsTcmbKTnuarcsec_per_kpc_comovingarcseckpcarcsec_per_kpc_properkpc_comoving_per_arcminarcminkpc_proper_per_arcmincritical_densitygcmcomoving_volumeagedistmodmagr   s    r   
test_unitsr   _  se    RT555E""3'',5555((c22715@@@@--c22715@@@@33C==BaeKKKK**3//4====//S99>!%GGGG$$S)).!%7777s##(AE1111""3'',5555773<<quqs 22222::c??13&&&&::sCj!!&!#----99S>>!#%%%%99c3Z  %,,,,((--2ah6FFFFF&&s++0AHqu4DDDDD((--2aeah6FFFFF&&s++0AEAH4DDDDD!!#&&+qsQT1W}<<<<  %%*aeQh666699S>>!%''''=="ae++++++r   c                     t          dddd          } t          j        ddg          }t          j        |                     d          d	d
          sJ t          j        |                     |          ddgd
          sJ t          j        |                     d          dd
          sJ t          j        |                     |          ddgd
          sJ dS )z)Test of absorption and lookback integrandrr   rQ   rH   r   r   r   g	@rM   ggr?rw   rx   gfs?gYǧ?ggr
@gQ@g C@N)r   r   r   r8   r9   lookback_time_integrandabs_distance_integrandr   s     r   test_xtfuncsr   |  s   b#s%000E
#sA:e33A668LSWXXXXXX:%%a((:z*B      :e221557IPTUUUUUU:$$Q'')Z)@t       r   c                     t          ddd          } t          j        |                     d          d          sJ t          j        |                     d          d          sJ t          j        g d          }t          j        |                     |          g dd	          sJ t          j        |                     |          g d
d	          sJ t          j        |                     |          g dd	          sJ t          j        |                     |          |                     |          z   |                     |                    sJ d S )Nr   rQ   
ףp=
?)Ob0r   rJ   rH   ro   r   )rQ   gxuq?g@1?gk]t?rw   rx   )r   g6t["?gYѡ?gU7?)gRQ?g9?gS?g*O	?)r   r8   r9   r   Obr   r   Odmr   r2   s     r   test_matterr    s\    s...D:dggajj#&&&&&:dggajj%(((((
%%%&&A:dggajj"K"K"KRVWWWWWW:

???d      :@@@t     
 :dggajj488A;;.

;;;;;;;r   c            	      6   t          dd          } t          j        | j        d          sJ t          j        |                     d          d          sJ t          j        g d          }t          j        |                     |          g dd          sJ t          ddd	t          j        dt          j	                  
          } t          j        | j        d          sJ t          j        |                     d          d          sJ t          j        |                     |          g dd          sJ t          j        |                     |          | 
                    |          z   |                     |          z   g dd          sJ d S )Nr   rQ   rJ   r   r  )rJ   rJ   rJ   rJ   ư>rx   rH   r   r   )r   g*rY?g	?g	ԋob'?rw   )ro   ro   ro   ro   r   )r   r8   r9   Ok0Okr   r   r   ra   r   r   Oder  s     r   
test_ocurvr    s    s##D:dh$$$$$:dggajj#&&&&&
%%%&&A:dggajj"6"6"6TBBBBBB T31:c13+?+?@@@D:dh$$$$$:dggajj#&&&&&:dggajj"K"K"KRVWWWWWW :

TWWQZZ$((1++-/C/C/C$       r   c                  >   t          ddd          } t          j        | j        d          sJ t          j        |                     d          d          sJ t          j        g d          }t          j        |                     |          g dd	          sJ d S )
Nr   rQ   r   r   ffffff?r  )r  g<)?g_\6:?gK2]?r   rx   )r   r8   r9   r   r  r   r   r  s     r   test_oder    s     s!,,,D:di%%%%%:dhhqkk3'''''
%%%&&A:dhhqkk#I#I#IPTUUUUUUUUr   c                     t          ddd          } t          j        | j        dt          j        z            sJ t          j        |                     d          dt          j        z            sJ g d}t          j        |                     |          g dt          j        z  d	
          sJ g d}t          j        |                     |          g dt          j        z  d	
          sJ d S )Nr   r   r   r   r         @)rJ   ro   r   rL   g      "@)r         @r  rR   g      9@r  rx   )r   r   r   rM   rn   )r   r8   r9   rI   r   r   r   s     r   	test_tcmbr    s    $S111E:ek39-----:ejjmmS13Y/////!!!A:ejjmm%@%@%@13%FTRRRRRRA:ejjmm%@%@%@13%FTRRRRRRRRr   c                     t          ddd          } t          j        | j        dt          j        z  d          sJ t          j        |                     d          d	t          j        z  d          sJ g d
}g dt          j        z  }t          j        |                     |          |d          sJ g d}t          j        |                     |          |d          sJ d S )Nr   r   rL   r   gXY`!@r  rx   r   gA@)rJ   ro   r   rL   )g;ў`!@g{o%`!@gt@gU{`!!@)r   r   r   rM   )r   r8   r9   Tnu0r   r   )r1   r2   rA   s      r   test_tnur    s    $S111E:ej"4qs":FFFFFF:eiill$5$;$GGGGGGA>>>DH:eiillH4888888 	A:eiillH488888888r   c                  J   t          ddd          } t          j        |                     d          dt          j        z  t          j        z            sJ t          j        |                     d          dt          j        z  t          j        z            sJ t          j        |                     d          dt          j        z  t          j        z            sJ t          j        | 	                    d          d	t          j        z  t          j        z            sJ d S )
Nr   r   rJ   r   rM   gحT=?gحT=?gOn%@gc*}@)
r   r8   r9   r   r   r   r   r   r   r   r   s    r   test_kpc_methodsr    s    $S111E:e33A66qx8ORSRW8WXXXXX:e11!44lQX6MPQPU6UVVVVV:e33A66qu8Lqx8WXXXXX:e11!44j156H186STTTTTTTr   c                     t          dddd          } t          dddd          }t          dddd          }t          j        g d          }t          j        g d          t          j        d	z  z  }t          j        g d
          t          j        d	z  z  }t          j        g d          t          j        d	z  z  }t          j        |                     |          |d          sJ t          j        |                    |          |d          sJ t          j        |                    |          |d          sJ d S )Nrr   rs   \(\?rJ   r   r   rH   r   r   rM   rl   rn   gsh|=@grhc@g#~j@gvj@gQ
@gv@rM   gK7A4@gK7X@g rw@gZdX@gˡEsY@g㥛Ġg@grh<)@gvZF@g`"۹\@g e@gQ-p@gZd;ov@r   rx   )r   r   r   r8   Gpcr9   r   )c_flatc_openc_closed	redshiftswright_flatwright_openwright_closeds          r   test_comoving_volumer'    sW   "$T===F"$S<<<FBACs;;;H ---..I
IIIJJQUTUXU  	GGGHH15RS8S  	DDDEEqP 
 :f,,Y774PPPPPP:f,,Y774PPPPPP:h..y99=tTTTTTTTTr   c                  p  	
 ddl m
 t          dddd          t          dddd          t          dddd          t          j        g d	          } t          j        g d
          t
          j        dz  z  }t          j        g d          t
          j        dz  z  }t          j        g d          t
          j        dz  z  }fdfd	fdt          j        t          j        
fd| D                       t
          j        dz  z  |d          sJ t          j        t          j        	
fd| D                       t
          j        dz  z  |d          sJ t          j        t          j        
fd| D                       t
          j        dz  z  |d          sJ d S )Nr   )quadrr   rs   r  rJ   r   r   r  r  rM   r  r  c                 8                         |           j        S Ndifferential_comoving_volumevalue)xr   s    r   ftempz0test_differential_comoving_volume.<locals>.ftemp      22155;;r   c                 8                         |           j        S r+  r,  )r/  r!  s    r   otempz0test_differential_comoving_volume.<locals>.otemp  r1  r   c                 8                         |           j        S r+  r,  )r/  r"  s    r   ctempz0test_differential_comoving_volume.<locals>.ctemp  s    44Q77==r   c                 V    g | ]%}d t           j        z   d|          d         z  &S rm   r   r   pi).0r   r0  r)  s     r   
<listcomp>z5test_differential_comoving_volume.<locals>.<listcomp>!  7    VVV#+UAx 8 8 ;;VVVr   r   rx   c                 V    g | ]%}d t           j        z   d|          d         z  &S r7  r8  )r:  r   r3  r)  s     r   r;  z5test_differential_comoving_volume.<locals>.<listcomp>'  r<  r   c                 V    g | ]%}d t           j        z   d|          d         z  &S r7  r8  )r:  r   r5  r)  s     r   r;  z5test_differential_comoving_volume.<locals>.<listcomp>-  r<  r   )	scipy.integrater)  r   r   r   r8   r  r9   r`   )r#  r$  r%  r&  r"  r   r!  r5  r0  r3  r)  s       @@@@@@@r   !test_differential_comoving_volumer@    sV   $$$$$$"$T===F"$S<<<FBACs;;;H ---..I
IIIJJQUTUXU  	GGGHH15RS8S  	DDDEEqP < < < < << < < < <> > > > > :
VVVVVIVVVWW
%(		      :
VVVVVIVVVWW
%(		      :
VVVVVIVVVWW
%(		       r   c                     t          ddd          } t          j        | j        dt          j        z            sJ t          j        |                     d          dt          j        z            sJ t          j        |                     dd	g          d
dgt          j        z            sJ t          j        |                     ddg          d
dgt          j        z            sJ t          ddd          } t          j        |                     d          dt          j        z            sJ t          j        |                     ddg          ddgt          j        z            sJ t          ddddt          j        z            } t          j        |                     d          dt          j        z            sJ t          j        |                     ddg          ddgt          j        z            sJ d S )Nr   r   rJ   r   g V7+@r   g;XYQ?ro   r  g2Νhp@gѬ-I?r   rl   rL   gP^2R<?g, |@gÏ.7?r   rk   g&?gC	@g5M?)r   r8   r9   hubble_timer~   r   rb   r   s    r   test_agerD  4  s    uC000D:d&(:QU(BCCCCC:dhhqkk#5#=>>>>>:dhhSz**Z,Dqu,LMMMMM:dhh1v&&Z(@15(HIIIII uC000D:dhhqkk#5#=>>>>>:dhh1v&&Z(@15(HIIIII uCcADjAAAD:dhhqkk#5#=>>>>>:dhh1v&&Z(@15(HIIIIIIIr   c                  h   t          ddd          } t          j        | j        dt          j        z            sJ t          j        |                     ddg          dd	gt          j        z            sJ t          j        |                     d
dg          dd	gt          j        z            sJ d S )Nr   r   rJ   r   gIƉdj@r   rl   gmPF@gefj3H@ro   r  )r   r8   r9   hubble_distancer`   r   r   rC  s    r   test_distmodrG  I  s     uC000D:d*,=,EFFFFF:dllAq6**Y,Dqu,LMMMMM:dllC:..K0H150PQQQQQQQr   c                     t          dddd          } t          j        |                     ddg          dd	gt          j        z            sJ t          j        |                     ddg          d
dgt          j        z            sJ d S )Nrr   r   g?r   r   2   r   g+09@g<OYgXG@gK~-H@)r   r8   r9   r|   r`   r   r   rC  s    r   test_neg_distmodrJ  S  s     Rc+++D:  "c++no-NQRQV-V     :dllB9--o/NQRQV/VWWWWWWWr   c                     ddl m}  t          ddd          }t          j        | j        z                      t          j                  j        }t          j	        |j
        |z  dt          j        t          j        dz  z  z            sJ t          j	        |j
        |                    d                    sJ t          j	        |                    d	d
g          |z  ddgt          j        t          j        dz  z  z            sJ t          j	        |                    ddg          |z  ddgt          j        t          j        dz  z  z            sJ d S )Nr   )
codata2014r   r   rJ   r   g.Q9rM   r   rl   gc֟z":gהE:ro   r  )astropy.constantsrL  r   constGtor8   dimensionless_unscaledr.  r9   critical_density0r   r   r   )rL  r   facs      r   test_critical_densityrT  _  sb   ,,,,,, uC000D7Z\!
%
%a&>
?
?
EC:$&;qsQT1W}&M     :d,d.C.CA.F.FGGGGG:q!f%%+	(AC!$'M:     :sCj))C/	(AC!$'M:      r   c                     t          ddd          } t          j        |                     d          |                     d          d          sJ t          j        |                     g d	          |                     g d
          d          sJ t          j        |                     d          |                     d          d          sJ t          j        |                     g d          |                     g d          d          sJ t          j        |                     g d          |                     g d          d          sJ d S )NgLR@rQ   rH   ru   rv   r   rM   rL   Hz>rx   )r   r   rM   rl   )ro   r   rL   r           @)r   r   rX  )ro   r   rY  )r   r8   r9   rz   r   r   r   s    r   test_integralrZ  x  sz    3T222E:""E$;$;C$@$@t      :-- 4 4 455     
 :ekk!nnekk#&6&6TBBBBBB:ekk))),,ekk///.J.JQUVVVVVV:			""EOOOOO$D$D4       r   c                     t          ddd          } t          j        g d          }t          j        |                     |          g d          sJ t          j        |                     d          |                     d          d	
          sJ t          j        |                     g d          |                     g d          d	
          sJ d S )Nrr   rQ   r  rV  )r   r   rH   r   r   )ro   ro   ro   ro   ro   rM   rL   rW  rx   )r   r   rM   )ro   r   rL   )r   r   r   r8   r9   de_density_scaler   s     r   test_de_densityscaler]    s    4000E
***++A:e,,Q//1J1J1JKKKKK :e,,Q//1G1G1L1LSWXXXXXX:yyy))//       r   c                     t          dddd          } t          j        t                    5  |                     dd           d d d            n# 1 swxY w Y   t          j        |                     dd	          |                     d	d                     sJ d
}d}dt
          j        z  }t          j        |                     ||          |          sJ d S )Nr   rQ   g?rJ   r   r   r   r   r   r   r   )g	o@g%@gyg`K<@gE3e@)r   r   r   r   r   r8   r9   r`   r   s       r   test_comoving_distance_z1z2r_    s*   S#s#...D	z	"	" 8 8$$VY7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 :$$Q**T-I-I!Q-O-O,O     
B	B 	
G :d222r::GDDDDDDDs   AAAc                     t          ddd          } t          j        |                     d          t          j        t          j        z            sJ t          j        |                     d          t          j        t          j        z            sJ t          j        |                     d          dt          j        z            sJ t          j        |                     d          dt          j        z            sJ t          ddd          }t          j        |                    d          dt          j        z            sJ t          j        |                    d          dt          j        z            sJ t          j        |                    d          dt          j        z            sJ t          j        |                    d          d	t          j        z            sJ d
S )zCheck that age in de Sitter and Einstein-de Sitter Universes work.

    Some analytic solutions fail at these critical points.
    r   r   r   r2   r   g}΄=3@g@g[zb6o@gB'@N)r   r8   r9   r   r   infr~   r}   c_dSc_EdSs     r   test_age_in_special_cosmologiesrf    s    aq)))D:dhhhmmRVae^44444:dhhhmmRVae^44444:d((1(--q15y99999:d((1(--/@15/HIIIII#q***E:eii!inn&7!%&?@@@@@:eii!inn&815&@AAAAA:e))A)..AE	::::::e))A)..0AAE0IJJJJJJJr   c                     t          ddd          } t          j        |                     d          dt          j        z            sJ t          j        |                     d          dt          j        z            sJ t          ddd          }t          j        |                    d          dt          j        z            sJ t          j        |                    d          dt          j        z            sJ t          dddd          } t          j        |                     d          dt          j        z            sJ t          j        |                     d          dt          j        z            sJ t          dddd          }t          j        |                    d          dt          j        z            sJ t          j        |                    d          dt          j        z            sJ dS )	zCheck that de Sitter and Einstein-de Sitter Universes both work.

    Some analytic solutions fail at these critical points.
    r   r   r   ra  r   gbk@g^ dp@N)r   r8   r9   rz   r`   r   rc  s     r   $test_distance_in_special_cosmologiesrh    s    aq)))D:d,,q,111qu9=====:d,,q,11:3EFFFFF#q***E:e---22AI>>>>>:e---224F4NOOOOOS!Qa(((D:d,,q,111qu9=====:d,,q,11:3EFFFFFc1aq)))E:e---22AI>>>>>:e---224F4NOOOOOOOr   c                     t          ddd          } t          j        |                     ddg          ddg          sJ t          j        |                     d	d
g          ddg          sJ t          j        |                     d          d          sJ t          j        |                     d
          d          sJ d S )Nr   r   rJ   r   r   rM   g-?g
@ro   rL   )r   r8   r9   absorption_distancerC  s    r   test_absorption_distancerk    s    uC000D:d..1v66Z8PQQQQQ:d..Sz::Z<TUUUUU:d..q11:>>>>>:d..s33Z@@@@@@@r   c                  >   t          ddt          j        g dt          j                            } t	          j        ddd          }|                    dd	          }|                    d	dd          }g d
}|D ]}t          | |          } ||          }|j        |j        k    sJ  ||          }|j        |j        k    sJ  ||          }	|	j        |j        k    sJ |j	        |j	        k    sJ |j	        |	j	        k    sJ t          j
        ||                                          sJ t          j
        ||	                                          sJ g d}|D ]}t          | |          } ||          }|j        |j        k    sJ  ||          }|j        |j        k    sJ  ||          }	|	j        |j        k    sJ t          j
        ||                                          sJ t          j
        ||	                                          sJ dS )zKTest array shape broadcasting for functions with single
    redshift inputsrr   rs   )rJ   r   gI+?)ru   rv   rP   r   r   rX  r   rM   )
rz   r|   r   r{   r   r}   r   r   r-  r   )
rj  r   r  r
  r   r7   r\  r   Ogammar   N)r   r8   ra   rb   r   linspacereshapegetattrr   r   r9   flatten)
r1   r2   z_reshape2dz_reshape3dmethodsr+   r   
value_flatvalue_2dvalue_3ds
             r   test_distance_broadcastrx    sd   
 RT
;L;L;Lad0S0STTTE
CAA))Aq//K))Aq!$$K  G  : :E6""QqTT
17****1[>>~!222221[>>~!22222(-////(-////z*h&6&6&8&899999z*h&6&6&8&8999999  G  	: 	:E6""QqTT
17****1[>>~!222221[>>~!22222z*h&6&6&8&899999z*h&6&6&8&8999999	: 	:r   )Ir[   r   numpyr   r   rM  	constantsrN  astropy.cosmology.units	cosmologyunitsr   astropy.unitsr8   astropy.cosmologyr   r    astropy.cosmology.flrw.lambdacdmr   r   astropy.cosmology.tests.helperr   !astropy.cosmology.tests.test_corer   r	   astropy.tabler
   "astropy.utils.compat.optional_depsr   astropy.utils.exceptionsr   	test_baser   r   r]   r^   r   r   rf   r   )SPECIALIZED_COMOVING_DISTANCE_COSMOLOGIESr   ITERABLE_REDSHIFTSr_   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r'  r@  rD  rG  rJ  rT  rZ  r]  r_  rf  rh  rk  rx  r   r   r   <module>r     s	   7 6       " ! ! ! ! ! $ $ $ $ $ $ $ $ $       6 6 6 6 6 6 6 6 > > > > > > > > ? ? ? ? ? ? B B B B B B B B             8 8 8 8 8 8 7 7 7 7 7 7 2 2 2 2 2 2 2 2 I&:;;  <;FR FR FR FR FRH FR FR FRXOR OR OR OR OR)= OR OR ORl 	M*;<<  =<L MRS,,,MRS,,,MRS,,,I3c222	- ) OOBH___  	M*?@@"KLL011  21 ML A@ 	M*?@@"KLL. . ML A@.& 	M*?@@
 
 A@
 	M*?@@SG SG A@SGl 	M*?@@LLL M M  A@M 	M*?@@FP FP A@FPR 	M*?@@, , A@,^ 	M*?@@<; <; A@<;H 	M*?@@, , A@,8   	M*?@@< < A@<( 	M*?@@  A@, 	M*?@@V V A@V 	M*?@@	S 	S A@	S 	M*?@@9 9 A@9 	M*?@@U U A@U 	M*?@@U U A@U. 	M*?@@1 1 A@1h 	M*?@@J J A@J( 	M*?@@R R A@R 	M*?@@X X A@X 	M*?@@  A@0 	M*?@@  A@& 	M*?@@  A@ 	M*?@@E E A@E0 	M*?@@K K A@K$ 	M*?@@P P A@P, 	M*?@@A A A@A 	M*?@@8: 8: A@8: 8: 8:r   