
    IR-e[                        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        z  dej        z  f          d             Zd Zd Zd Zd Z ej        !                    e d          ej                            de          d                         Z"d Z#d Z$d Z%d Z&ej        !                    e d          d             Z'ej                            ddej(        z  dej)        z  f          d             Z*ej        !                    e d          ej                            de          d                          Z+d! Z,d" Z-dS )#zTests for physical functions.    N)	cosmology)units)DogBoxLSQFitterLevMarLSQFitterLMLSQFitterTRFLSQFitter)NFW	BlackBody)assert_quantity_allclose)	HAS_SCIPY)AstropyUserWarning*temperature  g3333M@c                 (   t          | d          }t           |dt          j        z            dt          j        z  t          j        z             t           |dt          j        z            dt          j        z  t          j        z             d S )N      ?r   scalegffffff?g .U\BgE|'fj@)r
   r   umicronMJysrTHz)r   bs     Klib/python3.11/site-packages/astropy/modeling/tests/test_physical_models.pytest_blackbody_evaluater      s{    k555AQQsQX~..0BQU0JQT0QRRRQQy150113E3MPQPT3TUUUUU    c                      t          dt          j        z            } t          | j        dt          j        z             t          | j        dt          j        z             d S )N     Pr@gfc#@g.x	91@)r
   r   Kr   
lambda_maxr   nu_maxr   r   s    r   test_blackbody_weins_lawr$   %   sO    %!#+AQ\+<qx+GHHHQX'815'@AAAAAr   c                      t          dt          j        z            } t          | j        dt          j        z  t          j        t          j        z  z             d S )Nr   gd|ʠ`@)r
   r   r    r   bolometric_fluxWmr#   s    r    test_blackbody_sefanboltzman_lawr)   +   sE    %!#+AQ.0BQS0HACRSRUI0VWWWWWr   c                  
   t           j        t           j        dz  t           j        z  t           j        z  t           j        z  z  } t           j        t           j        dz  t           j        z  t           j        z  t           j        z  z  }t          dt           j        z  d| z            }|j	        d         t           j        k    sJ t          dt           j        z  d|z            }|j	        d         t           j        k    sJ d S )N   r      r   x)
r   ergcmsAAr   Hzr
   r    input_units)SLAMSNUb_lamb_nus       r   test_blackbody_input_unitsr9   0   s    5AD!GacMAD(14/0D
%147QS=14'!$.
/CdQSjD111ES!QT))))TACZq3w///DC AD((((((r   c                      t          dt          j        z  d          } t          |                     dt          j        z  dd          t          j                  rJ t          dt          j        z  d          } t           | dt          j        z            t          j                  sJ  | dt          j        z            j        t          j        t          j	        dz  t          j
        z  t          j        z  t          j        z  z  k    sJ t          dt          j        z  dt          j        z  t          j        z            } t           | dt          j        z            t          j                  sJ  | dt          j        z            j        t          j        t          j        z  k    sJ t          |                     dt          j        z  dt          j        z  d          dt          j        z  t          j        z             d S )N     @@r   r-   r+   g      @gsc`A)r
   r   r    
isinstanceevaluater   Quantityunitr/   r0   r1   r3   r   r   r   r#   s    r   test_blackbody_return_unitsr@   ;   s   &13,c***A!**S18^VSAA1:NNNNN 	&13,c***Aaaah''444441S18^!QUadAgmad.BQT.I%JJJJJ 	&13,cAEkAD&8999Aaaah''444441S18^!QUQT\1111 	

3>6AC<557H157PSTSW7W    r   zrequires scipy)reasonfitterc                 j    |             } t          | t          t          f          rd}d}nd}d}t          dt          j        z  dt          j        z  t          j        z            }t          j	        g d          t          j
        z  }t          j	        g d	          t          j        z  t          j        z  }t          j        d
d
          5   | |||d          }d d d            n# 1 swxY w Y   t          |j        dt          j        z  |           t          |j        d|           d S )NgHzG?gV瞯<gHz>r   r   gؗҌ<r-         ?   
   r,   rG   rF   ignore)divideover  maxitergK|1@rtolgvo<)atol)r<   r   r   r
   r   r    Jyr   nparrayr   errstater   r   r   )rB   rP   rQ   r   wavfnub_fits          r   test_blackbody_fitrY   P   s^    VXXF&<9:: $*EADL14$7888A
(<<<
 
 18
+C
(:::


%
,C	H8	4	4	4 2 2q#sD1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 U.0BQS0HtTTTTU[*?dKKKKKKs   C--C14C1c                     t           j        t           j        dz  t           j        z  t           j        z  z  } g d}d}t          |t           j        z  d          }t          j        t          d          5  t          j        d	          5   ||          t           j        z  }d
d
d
           n# 1 swxY w Y   d
d
d
           n# 1 swxY w Y   |                    | t          j        |t           j        z                      t           j        z  }t          j        |d                   sJ t          j        d	          5  t          j        |d         j                  dk     sJ 	 d
d
d
           n# 1 swxY w Y   t          j                            |j        dd         ddgd           t          j        d	          5   |dt           j        z            }d
d
d
           n# 1 swxY w Y   |j        dk    sJ 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\)matchrI   )allNr   izr,   gm2oBc>?g'ׂ?gMbP?rO   )r   photonr0   r1   r2   r
   r    pytestwarnsr   rS   rU   r   tospectral_densityisnanlog10valuetestingassert_allclose)photlamwavetempbbbb_lamfluxs         r   test_blackbody_overflowro   h   s   h!$'AC-!$./G(((DD	tacz	5	5	5B	G
 
 
 % % [X&&& 	% 	%RXX_F	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%	% % % % % % % % % % % % % % % 99Wa0==>>ED 8DG		"	"	" / /xR''$...../ / / / / / / / / / / / / / /J
1R4:z2     
	"	"	"  r#*~~              :??????sZ   6CB1%C1B5	5C8B5	9CCC&E99E= E=
G//G36G3c                     t          j        t          d          5  t          dt          j        z            }  | dt          j        z             ddd           n# 1 swxY w Y   t          dt          j        z            } t          j        dd          5  t          j	        t          d	          5 } | d
t          j        z             ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          |          dk    sJ t          j	        t          d	          5 } | dt          j        z             ddd           n# 1 swxY w Y   t          |          dk    sJ t          j        t          d          5  t          dt          j        z  dt          j        z            } ddd           dS # 1 swxY w Y   dS )zTest exceptions.z+Temperature should be positive: \[-100.\] Kr[   ir   Ni  rI   )rJ   invalidrq   r   r,   g      z:scale units not dimensionless or in surface brightness: Jyr-   )r`   raises
ValueErrorr
   r   r    r   rS   rU   ra   r   r2   lenrR   )rl   ws     r   &test_blackbody_exceptions_and_warningsrv      s    
I
 
 
   tacz""
3>	               
4!#:		B 
Hh	7	7	7  \,I>>> 	!Bq14xLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	               q66Q;;;; 
(		:	:	: a
4!$;              q66Q;;;; 
V
 
 
 5 5 taczqt4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5sk   5AA!$A!C26CC2C	C2"C	#C22C69C6-EEE,GG
G
c                     t          g dt          j        z            }  | dt          j        z            }t          j                            |j        g dd            | g dt          j        z            }t          j                            |j        g dd           t          t	          j        d          t          j        z            }  | t	          j        d	          t          j        z            }|j	        d	k    sJ d
S )zBRegression test to make sure that the temperature can be an array.)d      i,  g333333?)g=?=gz]=gf̘=gh㈵>rO   )r+         )glg=g;V$X=g_ P=rz   )   rz   N)
r
   r   r    mmrS   rg   rh   rf   onesshape)multibbrn   s     r    test_blackbody_array_temperaturer      s    !#-..G73:DJ
>>>T     7999qt#$$DJ
>>>T     

QS())G7276??QT)**D:r   c                     dt           j        z  } dt           j        z  }dt           j        z  }t          j        ||z  dz  z  }t          | |          }|                    d| j        |	                    t           j
                             t          | |	                    t           j
                            }|                    d| j        |	                    t           j
                             |j        |j        k    sJ dS )zATest support for dimensionless (but not unscaled) units for scaler     ļBrx   r+   r   rE   N)r   r    r0   MpcrS   pir
   r=   rf   to_valuedimensionless_unscaledr&   )TrDLr   bb1bb2s         r   test_blackbody_dimensionlessr      s    qs
AqtA	quBEQVM!E

/
/
/CLLagu~~a.FGGHHH
8P)Q)Q
R
R
RCLLagu~~a.FGGHHH #"5555555r   c                  *   dt           j        z  } dt           j        z  }dt           j        z  }t          j        ||z  dz  z  }t          | |          }t          | |                    t           j                            }t                      }t	          j
        g d          t           j        z  }t	          j
        g d          t           j        z  t           j        z  } ||||d	          }	 ||||d	          }
|	j        |
j        k    sJ d S )
Nr   r   rx   r+   r   rD   rH   rL   rM   )r   r    r0   r   rS   r   r
   r   r   r   rT   r   rR   r   r   )r   r   r   r   r   r   rB   rV   rW   bb1_fitbb2_fits              r    test_blackbody_dimensionless_fitr      s    qs
AqtA	quBEQVM!E

/
/
/C
8P)Q)Q
R
R
RCF
(<<<
 
 18
+C
(:::


%
,CfS#sD111GfS#sD111G'"5555555r   mass  4&kCg.tJfIc                    d}d}t           j        }d}t          | ||||          }t           |dt          j        z            dt          j        t          j        dz  z  z  dt          j        t          j        dz  z  z  f           t          |j        d	t          j        t          j        dz  z  z             t          |j	        d
t          j        z             t          |j
        dt          j        z             d}t          | ||||          }t           |dt          j        z            dt          j        t          j        dz  z  z  dt          j        t          j        dz  z  z  f           t          |j        dt          j        t          j        dz  z  z             t          |j	        dt          j        z             t          |j
        dt          j        z             d}t          | ||||          }t           |dt          j        z            dt          j        t          j        dz  z  z  dt          j        t          j        dz  z  z  f           t          |j        dt          j        t          j        dz  z  z             t          |j	        dt          j        z             t          |j
        dt          j        z             d}t          | ||||          }t           |dt          j        z            dt          j        t          j        dz  z  z  dt          j        t          j        dz  z  z  f           t          |j        dt          j        t          j        dz  z  z             t          |j	        dt          j        z             t          |j
        dt          j        z             d}t          | ||||          }t           |dt          j        z            dt          j        t          j        dz  z  z  dt          j        t          j        dz  z  z  f           t          |j        d t          j        t          j        dz  z  z             t          |j	        d!t          j        z             t          |j
        d"t          j        z             d}t          | ||||          }t           |dt          j        z            d#t          j        t          j        dz  z  z  d$t          j        t          j        dz  z  z  f           t          |j        d%t          j        t          j        dz  z  z             t          |j	        d&t          j        z             t          |j
        d't          j        z             d}t          | ||||          }t           |d(t          j        z            d)t          j        t          j        dz  z  z  d*t          j        t          j        dz  z  z  f           t          |j        d+t          j        t          j        dz  z  z             t          |j	        d,t          j        z             t          |j
        d-t          j        z             d}t          | ||||          }t           |d(t          j        z            d.t          j        t          j        dz  z  z  d/t          j        t          j        dz  z  z  f           t          |j        d0t          j        t          j        dz  z  z             t          |j	        d1t          j        z             t          |j
        d2t          j        z             d}t          | ||||          }t           |d(t          j        z            d3t          j        t          j        dz  z  z  d4t          j        t          j        dz  z  z  f           t          |j        d5t          j        t          j        dz  z  z             t          |j	        d6t          j        z             t          |j
        d7t          j        z             d8}t          | ||||          }t           |dt          j        z            dt          j        t          j        dz  z  z  dt          j        t          j        dz  z  z  f           d9}t          | ||||          }t           |dt          j        z            dt          j        t          j        dz  z  z  dt          j        t          j        dz  z  z  f           d}t          | ||||          }t           |dt          j        z            dt          j        t          j        dz  z  z  dt          j        t          j        dz  z  z  f           d:S );z7Evaluation, density, and radii validation of NFW model.      !@)\(?criticalry   r   concentrationredshiftcosmo
massfactorg      @  ͵Br|   tĶP+Hgm 2;Cg~*?g[ZF @meanry   g 9 bBgGQd\0HgֽJ/2CgP,>.?g/y2P@virialg l	BgߊHg;04Cg`P y?gfU@iE  g2Kl@gҽFgFU]AgEn@g<bd@gDn@gQiFguo蔆SAgFq@gWJ
ݢ@gpĭc@g#ɪ~SFgUAg~eH-q@gf@@gP(F<Dg<-#4g 7n:gm95g#L(yDgElњkDg i#4gKm:g9 _կ05gcg}Dg]XƍDgL#4gƕ)m:gn@j25g;|Dgή/iD200c200mN)r   Planck15r	   r   r   r   solMasskg	rho_scaler_sr_virialkpcr(   )r   r   r   r   r   n200cn200mnvirs           r   test_NFW_evaluater      s	    MHE #J#  E cAEkai!%(23adQUAXo.	
   ,	AE1H0DE   UY)<qu)DFFFU^.@15.HJJJ J#  E cAEkai!%(23adQUAXo.	
   ,	AE1H0DE   UY);ae)CEEEU^.?!%.GIII J#  D S15[ai!%(23adQUAXo.	
   +qy15!8/CD   TX(:QU(BDDDT]-?!%-GIII #J#  E dQUlQUAX!56 AD15!8O4	
   +qy15!8/CD   UY);ae)CEEEU^.?!%.GIII J#  E dQUl!)aeQh"6714!%(?3	
   +qy15!8/CD   UY):QU)BDDDU^.@15.HJJJ J#  D TAE\!)aeQh"67 AD15!8O4	
   +qy15!8/CD   TX(:QU(BDDDT]-?!%-GIII #J#  E fqsl!QYa%78"adQS!Vm4	
   /19qsAv3EF   UY)=)CEEEU^.BQS.HJJJ J#  E fqsl"ai!#q&&89"adQS!Vm4	
   /19qsAv3EF   UY)<qs)BDDDU^.BQS.HJJJ J#  D Vac\"ai!#q&&89"adQS!Vm4	
   .!)ac1f2DE   TX(<qs(BDDDT]-AAC-GIII J#  E cAEkai!%(23adQUAXo.	
   J#  E cAEkai!%(23adQUAXo.	
   J#  D S15[ai!%(23adQUAXo.	
    r   c                     |             } t          | t                    rt          j        d           d}t          j        }t          j        g d          t          j	        z  }d}t          j        g d          t          j
        t          j	        dz  z  z  }t          dt          j        z  d|||	          }d
|j        _         | |||d          }t          |j        dt          j        z             t          |j        d           d}t          j        g d          t          j
        t          j	        dz  z  z  }t          dt          j        z  d|||	          }d
|j        _         | |||d          }t          |j        dt          j        z             t          |j        d           d}t          j        g d          t          j
        t          j	        dz  z  z  }t          dt          j        z  d|||	          }	d
|	j        _         | |	||d          }t          |j        dt          j        z             t          |j        d           dS )z!Test linear fitting of NFW model.z2dogbox method is poor fitting method for NFW modelr   g      $@g      Y@g      i@g     @o@g     r@g      y@g     @@g     p@r;   g     p@g     @g     d@g     v@r   )g   T3Ag(\bAgG!jFAgGa=Ag{x3Ag{Gd%Ag~Agp=
o7Agޓl@gޓ@g*K@gTD[x@g9m{R@r|   g  b\Cg      @r   TrL   rM   r   r   r   )g   Ċ,Ag)\rW^AgQCAg333.9AgGz6~1Ag #AgCKAg;OAgK?_@geq@gR'@g"x@g2,]R@)r   ry   )g   <AgQ_AgkCAgGa?9Ag3332AgN5#Ag#@AgK.Ag46<@g<Nё<?@gڬ\η@gJ(x@ga;sjBeR@N)r<   r   r`   xfailr   r   rS   rT   r   r   r   r	   M_sunr   fixedr   r   r   )
rB   r   r   r   r   	density_rr   n_fitr   r   s
             r   test_NFW_fitr     s    VXXF&/** KIJJJ HE 		
 	
 	
	 	
 	
	A #J 	
 	
 	
  
QUAX	I ag  E  ENF5!Y555EUZ);ag)EFFFU0#666 J 	
 	
 	
  
QUAX	I ag  E  ENF5!Y555EUZ);ag)EFFFU0#666 !J 	
 	
 	
  
QUAX	I ag  D DMF4It444EUZ);ag)EFFFU0#66666r   c                  x   dt           j        z  } d}d}t          j        }t	          j        g d          t           j        z  }d}t          | ||||          }t	          j        g d          t           j        t           j	        z  z  }t          |                    |          |           t          |j        dt           j        z             t          |j        d	t           j        t           j	        z  z             d
}dt           j        z  } d}d}t          | ||||          }t	          j        g d          t           j        t           j	        z  z  }	t          |                    |          |	           t          |j        dt           j        z             t          |j        dt           j        t           j	        z  z             d}dt           j        z  } d}d}t	          j        g d          t           j        z  }t          | ||||          }
t	          j        g d          t           j        t           j	        z  z  }t          |
                    |          |           t          |
j        dt           j        z             t          |
j        dt           j        t           j	        z  z             dS )z:Test circular velocity and radial validation of NFW model.r   r   r   )g{Gz?g?g?g      ?g333333?g?rE   g      ?r         ?g      @g      @g      '@r   r   gHC@gAħQ@g͠@gVk)o@gbס@gvEwD@g\ٓg@g
E>8@gLɡ@gՠ@g.bQx@g
mj@g;³@g.3?g%Bpi@r   r   g(@r   )gLD|u@g)@g`K[@gp{Ǐ@gA,)ߎ@gy=@@g,hދ@gF_ 5@g0GG@g@g~9n@g^q'Ǔx@gTP0s@g?gf@r   g;JIg333333@g(\?)g	<0DgvLdDgvLtDg%"zDgOr-2]DgDg%"Dg]?Dg%"Dgrg\?Dg߼wUDgTNOo<Dg|c'D)g'i@g5@gS=Zψ@gOщ3̊@g:K8g@gC_IԎ@gnzF@g2Xɐ@g$[DT2@gPS@g߽HX@gw뀌@g)y/-@gm`?g@@N)r   r   r   r   rS   rT   r   r	   kmr1   r   circular_velocityr_maxv_maxr   r(   )r   r   r   r   r_rr   r   circ_v_200cr   circ_v_200mr   
circ_v_virs               r   test_NFW_circular_velocityr   W  s    'DMHE 	VVVWW
%	  #J#  E (	
 	
 	
  
K U44S99;GGGU[+=+EGGGU[+=+LNNN JAGDMH#  E (	
 	
 	
  
K U44S99;GGGU[+>+FHHHU[+=+LNNN JAD=DMH (	
 	
 	
  	
C #  D 	
 	
 	
  
J T33C88*EEETZ*<qu*DFFFTZ*<qs
*KMMMMMr   c                     dt           j        z  } d}d}t          j        }d}t	          j        g d          t           j        z  }d}t          j        t          |          5  t          | |||d	           d
d
d
           n# 1 swxY w Y   d}t          j        t          |          5  t          | |||d	           d
d
d
           n# 1 swxY w Y   d}t          j        t          |          5  t          | |||d	           d
d
d
           n# 1 swxY w Y   t          | j        ||||	          }t           |d          dt           j        t           j        dz  z  z  dt           j        t           j        dz  z  z  f           t	          j        g d          t           j        t           j        z  z  }t          |                    |          |           t          |                    |j                  |           t          | ||          }	t          |	                    |          d           d
S )zTest NFW exceptions.r   r   r   r   r   z;Massfactor 'not' not one of 'critical', 'mean', or 'virial'r[   )notr   r   NzDMassfactor not virial string not of the form '#m', '#c', or 'virial'z
not virialz$Massfactor 200 not a tuple or stringry   g     p@r   r|   r   r   )r   r   r   gTdVr?)r   r   r   r   rS   rT   r   r`   rr   rs   r	   	TypeErrorrf   r   r   r   r   r   r1   r   A_NFW)
r   r   r   r   r   r   MESSAGEr   r   ncoss
             r   )test_NFW_exceptions_and_warnings_and_miscr     s=    'DMHE"J (	
 	
 	
 
 	
C MG	z	1	1	1 
 
'(	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 VG	z	1	1	1 
 
'#	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 6G	y	0	0	0 
 
'	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Z#  E fai!%(23adQUAXo.	
   (	
 	
 	
  
K U44S99;GGGU44SY??MMM DIIIDTZZ668IJJJJJs6   "BB
B+CCC4DDD).__doc__numpyrS   r`   astropyr   r   r   astropy.modeling.fittingr   r   r   r    astropy.modeling.physical_modelsr	   r
   astropy.tests.helperr   "astropy.utils.compat.optional_depsr   astropy.utils.exceptionsr   __doctest_skip__fittersmarkparametrizer    deg_Cr   r$   r)   r9   r@   skipifrY   ro   rv   r   r   r   r   r   r   r   r   r    r   r   <module>r      s	   # #                             < ; ; ; ; ; ; ; 9 9 9 9 9 9 8 8 8 8 8 8 7 7 7 7 7 75  L+
G Wqw5F(GHHV V IHVB B BX X X
) ) )  * 	M*:;;7++L L ,+ <;L,  45 5 5<     $6 6 6$ 	M*:;;6 6 <;6( "4qw">QRQU@U!VWWN N XWNb 	M*:;;7++g7 g7 ,+ <;g7TjN jN jNZRK RK RK RK RKr   