U
    e»{jÏZ  ã                   @   s”  d Z ddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZ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
gZe
eee	gZej ddej dej f¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Z ejj!e dd�ej de¡dd„ ƒƒZ"dd„ Z#dd „ Z$d!d"„ Z%d#d$„ Z&ejj!e dd�d%d&„ ƒZ'ej d'd(ej( d)ej) f¡d*d+„ ƒZ*ejj!e dd�ej de¡d,d-„ ƒƒZ+d.d/„ Z,d0d1„ Z-dS )2zTests for physical functions.é    N)Ú	cosmology)Úunits)ÚDogBoxLSQFitterÚLevMarLSQFitterÚLMLSQFitterÚTRFLSQFitter)ÚNFWÚ	BlackBody)Úassert_quantity_allclose)Ú	HAS_SCIPY)ÚAstropyUserWarningÚ*Útemperatureé¸  g3333³M¥@c                 C   sP   t | dd�}t|dtj ƒdtj tj ƒ t|dtj ƒdtj tj ƒ d S )Nç      ð?©r   Úscalegffffffö?gŠ .²U\BgÌE|'fÄj@)r	   r
   ÚuÚmicronÚMJyÚsrÚTHz)r   Úb© r   új/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/modeling/tests/test_physical_models.pyÚtest_blackbody_evaluate   s     r   c                  C   s6   t dtj ƒ} t| jdtj ƒ t| jdtj ƒ d S )Nç     Pr@g¾fcô®Ç#@gÓ.x	ª91@)r	   r   ÚKr
   Z
lambda_maxr   Znu_maxr   ©r   r   r   r   Útest_blackbody_weins_law%   s    r   c                  C   s0   t dtj ƒ} t| jdtj tjtj  ƒ d S )Nr   g d|Ê `@)r	   r   r   r
   Úbolometric_fluxÚWÚmr   r   r   r   Ú test_blackbody_sefanboltzman_law+   s    r#   c                  C   sœ   t jt jd t j t j t j  } t jt jd t j t j t j  }tdt j d|  d�}|j	d t jksnt
‚tdt j d| d�}|j	d t jks˜t
‚d S )Né   r   é   ©r   Úx)r   ÚergÚcmÚsÚAAr   ÚHzr	   r   Zinput_unitsÚAssertionError)ZSLAMZSNUZb_lamZb_nur   r   r   Útest_blackbody_input_units0   s    ""r.   c                  C   s  t dtj dd�} t|  dtj dd¡tjƒr2t‚t dtj dd�} t| dtj ƒtjƒs^t‚| dtj ƒjtj	tj
d tj tj tj  ks”t‚t dtj dtj tj d�} t| dtj ƒtjƒsÌt‚| dtj ƒjtjtj ksìt‚t|  dtj dtj d¡dtj tj ƒ d S )Nç     @�@r   r&   r$   g      @gÚíscé`•A)r	   r   r   Ú
isinstanceÚevaluater   ZQuantityr-   Úunitr(   r)   r*   r,   r   r   r
   r   r   r   r   Útest_blackbody_return_units;   s     6  ÿr3   zrequires scipy)ÚreasonÚfitterc                 C   s¶   | ƒ } t | tƒst | tƒr$d}d}nd}d}tdtj dtj tj d�}t 	dd	d
g¡tj
 }t 	dd
d	g¡tj tj }| |||dd�}t|jdtj |d� t|jd|d� d S )NgHáz®Gá?gVçž¯Ò<gH¯¼šò×z>r   r   g¼‰Ø—²ÒŒ<r&   ç      à?é   é
   r%   éè  ©ÚmaxitergK›Ø|1¦@©Úrtolgvöªoº�<)Úatol)r0   r   r   r	   r   r   ÚJyr   ÚnpÚarrayr   r
   r   r   )r5   r=   r>   r   ÚwavÚfnuZb_fitr   r   r   Útest_blackbody_fitP   s    rD   c               
   C   s8  t jt jd t j t j  } ddddg}d}t|t j dd�}tjt	d	d
��, t
jdd�� ||ƒt j }W 5 Q R X W 5 Q R X | | t  |t j ¡¡t j }t
 |d ¡s®t‚t
jdd�� t
 |d j¡dk sÔt‚W 5 Q R X t
jj|jdd… ddgdd� t
jdd�� |dt j ƒ}W 5 Q R X |jdk�s4t‚dS )z#Test Planck function with overflow.r$   g        r/   g     jø@gAüjéZKg     ˆÃ@r   r   z6Input contains invalid wavelength/frequency value\(s\)©ÚmatchÚignore)Úallr   éÿÿÿÿizÿÿÿr%   gm2‘oBc>?gù'á×‚½§?gü©ñÒMbP?r<   N)r   Zphotonr)   r*   r+   r	   r   ÚpytestÚwarnsr   r@   Zerrstater   ÚtoZspectral_densityÚisnanr-   Úlog10ÚvalueÚtestingÚassert_allclose)ZphotlamÚwaveÚtempÚbbZbb_lamÚfluxr   r   r   Útest_blackbody_overflowg   s,    þ""  ÿrV   c               	   C   sê   t jtdd��" tdtj ƒ} | dtj ƒ W 5 Q R X tdtj ƒ} t jtdd��}| dtj	 ƒ W 5 Q R X t
|ƒdks|t‚t jtdd��}| d	tj	 ƒ W 5 Q R X t
|ƒd
ks´t‚t jtdd�� tdtj dtj d�} W 5 Q R X dS )zTest exceptions.z+Temperature should be positive: \[-100.\] KrE   iœÿÿÿr   iˆ  Úinvalidr   é   g      ð¿r%   z:scale units not dimensionless or in surface brightness: Jyr&   N)rJ   ÚraisesÚ
ValueErrorr	   r   r   r   rK   r   r+   Úlenr-   r?   )rT   Úwr   r   r   Ú&test_blackbody_exceptions_and_warnings�   s$     ÿ ÿr]   c                  C   s¤   t dddgtj ƒ} | dtj ƒ}tjj|jdddgdd	� | d
ddgtj ƒ}tjj|jdddgdd	� t t d¡tj ƒ} | t d¡tj ƒ}|j	dks t
‚dS )zBRegression test to make sure that the temperature can be an array.éd   éÈ   i,  g333333ó?gÐ=?•À=gzÛëÄ×]�=g÷²¹fÌ˜=gñhãˆµøä>r<   r$   é   é   g‚¾­êlg=g;ŒVÔ$X=gÈî_ï¶ P=)rX   r`   N)r	   r   r   Úmmr@   rP   rQ   rO   ZonesÚshaper-   )ZmultibbrU   r   r   r   Ú test_blackbody_array_temperaturež   s       ÿ  ÿrd   c                  C   s”   dt j } dt j }dt j }tj|| d  }t| |d�}| d| j| 	t j
¡¡ t| | 	t j
¡d�}| d| j| 	t j
¡¡ |j|jks�t‚dS )zATest support for dimensionless (but not unscaled) units for scaler   ç  �Ä¼ÖBr^   r$   r   r6   N)r   r   r)   ÚMpcr@   Úpir	   r1   rO   Úto_valueÚdimensionless_unscaledr    r-   )ÚTÚrÚDLr   Úbb1Úbb2r   r   r   Útest_blackbody_dimensionless°   s    


ro   c                  C   s¼   dt j } dt j }dt j }tj|| d  }t| |d�}t| | t j¡d�}t	ƒ }t 
dddg¡t j }t 
d	ddg¡t j t j }||||d
d�}	||||d
d�}
|	j|
jks¸t‚d S )Nr   re   r^   r$   r   r6   r7   r8   r%   r9   r:   )r   r   r)   rf   r@   rg   r	   rh   ri   r   rA   r   r?   r   r   r-   )rj   rk   rl   r   rm   rn   r5   rB   rC   Zbb1_fitZbb2_fitr   r   r   Ú test_blackbody_dimensionless_fitÂ   s    


rp   Úmassç  4&õkCgÇ.ÛtJfIc                 C   sú  d}d}t j}d}t| ||||d�}t|dtj ƒdtjtjd   dtjtjd   fƒ t|jd	tjtjd   ƒ t|j	d
tj ƒ t|j
dtj ƒ d}t| ||||d�}t|dtj ƒdtjtjd   dtjtjd   fƒ t|jdtjtjd   ƒ t|j	dtj ƒ t|j
dtj ƒ d}t| ||||d�}t|dtj ƒdtjtjd   dtjtjd   fƒ t|jdtjtjd   ƒ t|j	dtj ƒ t|j
dtj ƒ d}t| ||||d�}t|dtj ƒdtjtjd   dtjtjd   fƒ t|jdtjtjd   ƒ t|j	dtj ƒ t|j
dtj ƒ d}t| ||||d�}t|dtj ƒdtjtjd   dtjtjd   fƒ t|jd tjtjd   ƒ t|j	d!tj ƒ t|j
d"tj ƒ d}t| ||||d�}t|dtj ƒd#tjtjd   d$tjtjd   fƒ t|jd%tjtjd   ƒ t|j	d&tj ƒ t|j
d'tj ƒ d}t| ||||d�}t|d(tj ƒd)tjtjd   d*tjtjd   fƒ t|jd+tjtjd   ƒ t|j	d,tj ƒ t|j
d-tj ƒ d}t| ||||d�}t|d(tj ƒd.tjtjd   d/tjtjd   fƒ t|jd0tjtjd   ƒ t|j	d1tj ƒ t|j
d2tj ƒ d}t| ||||d�}t|d(tj ƒd3tjtjd   d4tjtjd   fƒ t|jd5tjtjd   ƒ t|j	d6tj ƒ t|j
d7tj ƒ d8}t| ||||d�}t|dtj ƒdtjtjd   dtjtjd   fƒ d9}t| ||||d�}t|dtj ƒdtjtjd   dtjtjd   fƒ d}t| ||||d�}t|dtj ƒdtjtjd   dtjtjd   fƒ d:S );z7Evaluation, density, and radii validation of NFW model.ç      !@ç)\�Âõ(ä?©Úcriticalr_   ©rq   ÚconcentrationÚredshiftÚcosmoÚ
massfactorg      @ç  Íµ×ýŠBrX   çtÄ¶üP+ÕHgêŸm 2¶;Cg~*¦¨˜Ï?g[ZF˜É @©Zmeanr_   g €9 bŠBgGQd\0±ÔHgÃóÖ½J/2CgP,�>.Ò?g/y2ðP@Úvirialg €l	ˆŠBgßŠÓÖöÎÔHg;0ƒà4Cg`P y—Ñ?gfU±ð°@iE  gñ2K¿l©@g»äþÒ½ðóFg—Fé±UÁ]AgE²Ûn@g<´´þbd @gDnýà¨@gËÒQÁi‚óFguoóè”†SAgFËãúÀq@gúWJ‘
Ý¢@gpðÄ­c©@g#Éª~S�óFgâ“áõŒUAg~ŽeHì-q@gfçëË@¢@gP(F¸<ÖDg Ô×<­-#4g�Á¡ 7n:g€©ÿ×m95g#¢L(—ÎyDgElÑš€k«Dg¢ ½Ói#4g°K™Íìm:g9 ª_Õ¯05g€cg�œ²}Dg¸Ù]XÆ�¯DgúLá#4gÆ•ä‰)öm:gnˆš@Øj25g™Ñï;Ÿ¼|Dg³Î®/iˆ®DZ200cZ200mN)r   ÚPlanck15r   r
   r   rf   ÚsolMassÚkgZ	rho_scaleZr_sZr_virialÚkpcr"   )rq   rx   ry   rz   r{   Ún200cÚn200mÚnvirr   r   r   Útest_NFW_evaluate×   sÂ   ûþþ ÿûþþ ÿûþþ ÿûþþ ÿûþþ ÿûþþ ÿûþþ ÿûþþ ÿûþþ ÿûþþ	ûþþ	ûþþr‡   c           
      C   sä  | ƒ } t | tƒrt d¡ d}tj}t ddddddd	d
dddddg¡tj	 }d}t dddddddddddddg¡tj
tj	d   }tdtj d |||d!�}d"|j_| |||d#d$�}t|jd%tj ƒ t|jd&ƒ d'}t d(d)d*d+d,d-d.d/d0d1d2d3d4g¡tj
tj	d   }tdtj d |||d!�}d"|j_| |||d#d$�}t|jd%tj ƒ t|jd&ƒ d5}t d6d7d8d9d:d;d<d=d>d?d@dAdBg¡tj
tj	d   }tdtj d |||d!�}	d"|	j_| |	||d#d$�}t|jd%tj ƒ t|jd&ƒ dCS )Dz!Test linear fitting of NFW model.z2dogbox method is poor fitting method for NFW modelrt   ç      $@ç      Y@ç      i@ç     @o@ç     Àr@ç      y@ç     @@ç     p‡@r/   ç     p—@ç     ˆ£@ç     d¹@ç     vÆ@ru   g   ’T3¥Agö(\â™bAg®G!jFAg®Ga=Ag{®Çxô3Ag{®G˜d%AgÛù~ê­Ag¤p=
o7AgÞ“‡…¯lò@gÞ“‡…þÙ@g*¬ÿÃK¸@gTªDÙ[Èx@gÍ9mÁ{R@rX   g  b¢\”Cg      @rw   Tr9   r:   rr   rs   r~   g   ÄŠ, Ag)\�r‚W^AgìQ¸þ²CAg333³.9Ag®Gáz6~1Ag²�ïçê #Ag–C‹ìîKAg;ßO�¶ÛAgð§ÆK?_ñ@gþe÷äqÿ×@gR' ‰˜¦·@g"ü‹ ñ‚x@gŽ2,�ê]R@)r   r_   g   –<¡AgìQ¸þÙ_Ag¸…kÏØCAg®Ga?þ9Ag333³�2Ag‡ÙN5§#Ag#Ûùþ@ÚAgð§ÆK.Ag46<šŸñ@g<NÑ‘<?Ø@gÚ¬ú\ÅÎ·@g€J•(û“x@ga;sjBeR@N)r0   r   rJ   Zxfailr   r€   r@   rA   r   rƒ   r�   r   ÚM_sunry   Zfixedr
   rq   rx   )
r5   ry   rz   rk   r{   Z	density_rr„   Zn_fitr…   r†   r   r   r   Útest_NFW_fité  sâ    

           þÿû	         üÿù
û         üÿù
û         üÿù
ûr•   c                  C   s  dt j } d}d}tj}t dddddd	d
ddddddg¡t j }d}t| ||||d�}t dddddddddddddg¡t jt j	  }t
| |¡|ƒ t
|jd t j ƒ t
|jd!t jt j	  ƒ d"}d#t j } d$}d}t| ||||d�}t d%d&d'd(d)d*d+d,d-d.d/d0d1g¡t jt j	  }	t
| |¡|	ƒ t
|jd2t j ƒ t
|jd3t jt j	  ƒ d4}d5t j } d6}d7}t d8d9d:d;d<d=d>d?d@dAdBdCdDg¡t j }t| ||||d�}
t dEdFdGdHdIdJdKdLdMdNdOdPdQg¡t jt j	  }t
|
 |¡|ƒ t
|
jdRt j ƒ t
|
jdSt jt j	  ƒ dTS )Uz:Test circular velocity and radial validation of NFW model.rr   rs   rt   g{®Gáz„?gš™™™™™¹?gš™™™™™É?g      Ð?g333333Ó?gš™™™™™Ù?r6   g      è?r   g      ø?g      @g      @g      '@ru   rw   çªHC•£ó…@çÐãAÄ§Qœ@ç‘þÂÍ @ç�Vk)o¡@ç–Ÿbð×¡@çvE�wëD¢@çÓ\Ù“g¢@ç
E>ØÕ8¢@çL¯æÉÉ¡@çÍÎÕ @ç.»bQxž@ç
²mj¡—@ç“;èéÂ³“@g.3Êá?g%êBÝpi¢@r~   re   gš™™™™™(@gLD�|uñ„@g“)Õôï‘@g`šK[�@gšäp{Ç�@gA,)ÈßŽ@gyŒú=@�@g,ŒÂhÞ‹@gF_ Œ5‰@g¿0‘¹GG‡@g˜¬£¬š„@g~·í9 n�@g^q'Ç“¿x@g×TP0Çäs@gúÞñ¦º?gÙfú‘@r   gñ;·†©çJIg333333@gÃõ(\�ÂÕ?g³ø	å<º0DgàvLÌèdDgàvLÌètDg—”ß%ÿ"zDgO²r-2]DgøñºÌè„Dg—”ß%ÿ"ŠDg“•]?š“Dg—”ß%ÿ"šDgr¯g\?š£Dgß¼«wßU°DgTNOo<ÅDgé|c'ÉÒDg'ˆÞü»i@gÃñ�5å‚@g¼S¦=ZÏˆ@g“OÑ‰3ÌŠ@g:K ó8gŒ@gC³Â_IÔŽ@gnâzÃF�@gœ2XíÉ�‘@g$[D±T2’@gPµíæS�’@gß½HX’@gÞwë€Œý�@g)ëy/-ü‹@gm‹±‹`ú?gŒ£�@¡’@N)r   r”   r   r€   r@   rA   rf   r   Úkmr*   r
   Úcircular_velocityZr_maxZv_maxr‚   r"   )rq   rx   ry   rz   Úr_rr{   r„   Úcirc_v_200cr…   Zcirc_v_200mr†   Z
circ_v_virr   r   r   Útest_NFW_circular_velocityU  sî    
"ÿÿû	         üÿ
ù

û	         üÿ
ù

         üÿù
û	         üÿ
ù
r§   c            
      C   s�  dt j } d}d}tj}d}t ddddd	d
dddddddg¡t j }d}tjt	|d�� t
| |||dd� W 5 Q R X d}tjt	|d�� t
| |||dd� W 5 Q R X d}tjt|d�� t
| |||dd� W 5 Q R X t
| j||||d�}t|dƒdt jt jd   dt jt jd   fƒ t ddd d!d"d#d$d%d&d'd(d)d*g¡t jt j  }t| |¡|ƒ t| |j¡|ƒ t
| ||d+�}	t|	 |¡d,ƒ d-S ).zTest NFW exceptions.rr   rs   rt   ru   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r/   r�   r‘   r’   r“   z;Massfactor 'not' not one of 'critical', 'mean', or 'virial'rE   )Únotr   rw   zDMassfactor not virial string not of the form '#m', '#c', or 'virial'z
not virialz$Massfactor 200 not a tuple or stringr_   g     p§@r|   rX   r}   r–   r—   r˜   r™   rš   r›   rœ   r�   rž   rŸ   r    r¡   r¢   )rq   rx   ry   gTdVør´õ?N)r   r”   r   r€   r@   rA   rƒ   rJ   rY   rZ   r   Ú	TypeErrorrO   r
   r�   rf   r‚   r£   r*   r¤   ZA_NFW)
rq   rx   ry   rz   r{   r¥   ZMESSAGEr„   r¦   Zncosr   r   r   Ú)test_NFW_exceptions_and_warnings_and_miscÂ  sª    
           þÿû	ûûû
ûþþ
         üÿ
ù	rª   ).Ú__doc__Únumpyr@   rJ   Zastropyr   r   r   Zastropy.modeling.fittingr   r   r   r   Z astropy.modeling.physical_modelsr   r	   Zastropy.tests.helperr
   Z"astropy.utils.compat.optional_depsr   Zastropy.utils.exceptionsr   Z__doctest_skip__ZfittersÚmarkZparametrizer   Zdeg_Cr   r   r#   r.   r3   ZskipifrD   rV   r]   rd   ro   rp   r”   r‚   r‡   r•   r§   rª   r   r   r   r   Ú<module>   sF   


  jm