U
    e»{j°b  ã                +   @   sø	  d Z ddlZddlmZ ddlmZ ddlZddlZddl	m
Z
 ddlmZ ddlmZ ddlmZmZmZmZmZ dd	lmZ dd
lmZ ej ddddgejej fdddddgejej fddddddgejd fddddgejd fd d!d"d#gejd$ fd%ge ejd& ¡fd'ge ejd( ¡fd)gejd* fd+d,ge ej ¡fd-gej!fd.ge "ej#ej ¡fd/gejfd0d1ge $ejejd  ¡fg¡d2d3„ ƒZ%ej d4d5d6d7d8g¡d9d:„ ƒZ&ej dd;gej'fd<ge ej(ejd  ej ¡fd=ge ej(ejd  ej ¡fd>d?gej)ej fd@gej)ej ej* fdAgej)ej ej* fdBge dCej+ ejej,d   ¡fdDge dEej- ej. ¡fdFge dGej ¡fdHge dGej ¡fdIgejdJ fdgejd fdKge ejdL ¡fdMge ejd& ¡fdNgdOej/ fdPgdQej/ fdRgdSej/ fdTgej/fdUgej0fdVgej1fdWgej2fdXgej3fdYgej4fdZgej5fd[gd\ej6 fd]gej7fd^gd_ej8 fd`gej9fdagej*fdbgej:fdcgej;fddgej;ej fdegej'fdfgej'ej fdggej<fdhgeejejd  ƒfdigeej=ƒfdjgeej/ƒfg&¡dkdl„ ƒZ>ej d4dmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd+d€d�g¡d‚dƒ„ ƒZ?d„d…„ Z@d†d‡„ ZAej ddˆd‰dŠd‹dŒgejBej fd�dŽgejCej dJ fd�d�d‘gejBejd’  ejdJ  ejDdJ  fd“d”d•gej(ejejE ejC  fd–d—gejFd ejGejH  fd˜d™dšd›dœd�gdEdž ej( ej fdŸd d¡d¢gd£ejI ejd’  ejJdJ  fd¤d¥d¦d§gej(ejCdJ  ejdJ  ejEdJ  d* fd¨d©dªgejBej d«ejCej   fg	¡d¬d­„ ƒZKej d4d®d5d¯d°d+d±g¡d²d³„ ƒZLG d´dµ„ dµƒZMG d¶d·„ d·eMƒZNG d¸d¹„ d¹eMƒZOG dºd»„ d»eMƒZPG d¼d½„ d½eMƒZQG d¾d¿„ d¿eMƒZRdÀdÁ„ ZSdÂdÃ„ ZTdÄdÅ„ ZUdÆdÇ„ ZVdÈdÉ„ ZWdÊdË„ ZXdÌdÍ„ ZYdÎdÏ„ ZZej dÐdÑdÒdÓdÔdÕdÖg¡d×dØ„ ƒZ[dÙdÚ„ Z\dÛdÜ„ Z]dÝdÞ„ Z^dßdà„ Z_dádâ„ Z`dãdä„ Zadådæ„ Zbdçdè„ Zcdédê„ Zddëdì„ Zeej d4d.d+d0g¡dídî„ ƒZfej d4d.d+d0g¡dïdð„ ƒZgdñdò„ Zhdódô„ Zidõdö„ Zjej d÷dødùdúdûdüdýdþg¡dÿ�d „ ƒZk�d�d„ Zl�d�d„ Zmej �d�d�d�d�d	�d
�d�d�d�d�d�d�d�d�d�d�dg¡�d�d„ ƒZn�d�d„ Zo�d�d„ Zpej �d�d�d�d�d �d!�d"�d#�d$�d%ed�d&ƒ�d'ff
¡�d(�d)„ ƒZqej �d*�d+ejrf�d,ejrf�d-ejsdJ f�d.�d/ej f�d0ejej f�d1ejd f�d2ejd f�d3ej�d4 f�d5ejdE f�d6ejtf�d7ejtf�d8ejuf�d9ejvf�d:ejvejw fdeejvf�d;ejvf�d<ejxf�d=ejyfdcejzf�d>ej{f�d?ej|f�d@ej}f�dAej}f�dBej~f�dCejf�dDej8f�dEej€fg¡�dF�dG„ ƒZ�ej d4�dH�dI�dJ�dK�dL�dMg¡�dN�dO„ ƒZ‚ej �dP�dQ¡�dR�dS„ ƒZƒ�dT�dU„ Z„dS (V  z/
Regression tests for the units.format package
é    N)Únullcontext)ÚFraction)Úassert_allclose)Úunits)Úsi)Ú
PrefixUnitÚUnitÚUnitBaseÚUnitsWarningÚdex©Úformat)Úis_effectively_unityzstrings, unitzm szm*szm.súm/szm*s**-1zm /szm / szm/ súm**2Úm2zm**(2)zm**+2zm+2zm^(+2)é   zm**-3zm-3zm^(-3)z/m3éýÿÿÿzm**(1.5)úm(3/2)zm**(3/2)zm^(3/2)ç      ø?z2.54 cmçR¸…ëQ@z10+8mg    „×—Azsqrt(m)g      à?zdB(mW)zdB (mW)Úmagz	mag(ct/s)r   zdex(cm s**-2)z
dex(cm/s2)c                 C   s.   | D ]$}t |ƒ tj |¡}||kst‚qd S ©N)ÚprintÚu_formatÚGenericÚparseÚAssertionError©ÚstringsÚunitÚsZunit2© r"   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/units/tests/test_format.pyÚtest_unit_grammar   s    r$   Ústringzsin( /pixel /s)zmag(mag)z
dB(dB(mW))zdex()c              	   C   s.   t  t¡� t| ƒ tj | ¡ W 5 Q R X d S r   )ÚpytestÚraisesÚ
ValueErrorr   r   r   r   ©r%   r"   r"   r#   Útest_unit_grammar_fail/   s    r*   ú0.1nmzmW/m2zmW/(m2)zkm/szkm.s-1zkm/s/Mpcz
km/(s.Mpc)z10+3J/m/s/kpc2g     @�@z10pix/nmé
   z
1.5x10+11mg   .YvABu   1.5Ã—10+11/mz/séÿÿÿÿz10+21mgPïâÖäKDz2.54cmz20%gš™™™™™É?z10+9g    eÍÍAz2x10-9g•Ö&è.!>ú---ÚmaÚmAUÚuarcminÚuarcsecÚkbarnÚGbitZGibiti   @ÚkbyteZmRyçü©ñÒMbP?ÚmmagÚMpcÚGyrõ   Â°u   Â°/sõ   Ã…u   Ã…/sz\hz[cm/s2]z[K]ú[-]c                 C   s.   | D ]$}t |ƒ tj |¡}||kst‚qd S r   )r   r   ÚCDSr   r   r   r"   r"   r#   Útest_cds_grammar8   s    ,r>   z0.1 nmzsolMass(3/2)zkm / szkm s-1z
km/s.Mpc-1z/s.Mpczpix0.1nmzpix/(0.1nm)zkm*szkm**2z5x8+3mz0.1---z---mzm---z--z0.1-z-mzm-zmag(s-1)zdex(cm s-2)z[--]c              	   C   s.   t  t¡� t| ƒ tj | ¡ W 5 Q R X d S r   )r&   r'   r(   r   r   r=   r   r)   r"   r"   r#   Útest_cds_grammar_failj   s    r?   c                   C   s2   t jddd�t jkst‚t jjdd�dks.t‚d S )Nr.   Úcdsr   )Úur   Údimensionless_unscaledr   Ú	to_stringr"   r"   r"   r#   Útest_cds_dimensionless‹   s    rD   c                   C   s>   t jddd�t  t j¡kst‚t  t j¡jdd�dks:t‚d S )Nr<   r@   r   )rA   r   r   rB   r   rC   r"   r"   r"   r#   Útest_cds_log10_dimensionless�   s    rE   zcount /szcount/szcount s**(-1)z	count / sz	count /s z	/pixel /sz/(pixel * s)zcount /m**2 /s /eVz"count m**(-2) * s**(-1) * eV**(-1)zcount /(m**2 * s * eV)éþÿÿÿzerg /pixel /s /GHzzerg /s /GHz /pixelzerg /pixel /(s * GHz)zkeV**2 /yr /angstromz10**(10) keV**2 /yr /mz10**(46) erg /sz10**46 erg /sz10**(39) J /sz
10**(39) Wz10**(15) YWzYJ /fsé.   z10**(-7) J /cm**2 /MeVz10**(-9) J m**(-2) eV**(-1)znJ m**(-2) eV**(-1)znJ /m**2 /eVgH¯¼šò×z>zsqrt(erg /pixel /s /GHz)z(erg /pixel /s /GHz)**(0.5)z(erg /pixel /s /GHz)**(1/2)z.erg**(0.5) pixel**(-0.5) s**(-0.5) GHz**(-0.5)z(count /s) (/pixel /s)z(count /s) * (/pixel /s)zcount /pixel /s**2ç      ð?c                 C   s.   | D ]$}t |ƒ tj |¡}||kst‚qd S r   )r   r   ÚOGIPr   r   r   r"   r"   r#   Útest_ogip_grammar—   s    FrJ   zlog(photon /m**2 /s /Hz)z,log(photon /cm**2 /s /Hz) /(sin( /pixel /s))z1log(photon /cm**2 /s /Hz) (sin( /pixel /s))**(-1)zdex(cm/s**2)c              	   C   s.   t  t¡� t| ƒ tj | ¡ W 5 Q R X d S r   )r&   r'   r(   r   r   rI   r   r)   r"   r"   r#   Útest_ogip_grammar_failã   s    rK   c                   @   s$   e Zd Zeƒ Zddd„Zdd„ ZdS )ÚRoundtripBaseNc              	   C   s¦   |d kr| j }t ¡ � t d¡ | |¡}W 5 Q R X || jkrztjtdd��}t	|| j d�}W 5 Q R X t
|ƒdksˆt‚nt	|| j d�}t| ¡ j| ¡ jdd� d S )NÚignoreÚ
deprecated©Úmatchr   é   ç•Ö&è.>©Zrtol)Úformat_ÚwarningsÚcatch_warningsÚsimplefilterrC   Údeprecated_unitsr&   Úwarnsr
   r   Úlenr   r   Ú	decomposeÚscale)Úselfr    Úoutput_formatr!   ÚwÚar"   r"   r#   Úcheck_roundtrip÷   s    


zRoundtripBase.check_roundtripc                 C   sH   |  ¡ }| | j¡}d|ks t‚t|| jd�}t|  ¡ j|jdd� d S )Nz  r   gñhãˆµøä>rS   )r[   rC   rT   r   r   r   r\   )r]   r    Zudr!   r`   r"   r"   r#   Úcheck_roundtrip_decompose  s
    z'RoundtripBase.check_roundtrip_decompose)N)Ú__name__Ú
__module__Ú__qualname__ÚsetrX   ra   rb   r"   r"   r"   r#   rL   ô   s   
rL   c                   @   s6   e Zd ZdZej ddd„ ej 	¡ D ƒ¡dd„ ƒZ
dS )ÚTestRoundtripGenericÚgenericr    c                 C   s$   g | ]}t |tƒrt |tƒs|‘qS r"   ©Ú
isinstancer	   r   ©Ú.0r    r"   r"   r#   Ú
<listcomp>  s   
 
þzTestRoundtripGeneric.<listcomp>c                 C   s&   |   |¡ | j |dd� |  |¡ d S )NÚunicode)r^   )ra   rb   ©r]   r    r"   r"   r#   Útest_roundtrip  s    	
z#TestRoundtripGeneric.test_roundtripN)rc   rd   re   rT   r&   ÚmarkÚparametrizerA   Ú__dict__Úvaluesrp   r"   r"   r"   r#   rg     s   þþrg   c                   @   s@   e Zd ZdZejjZej	 
ddd„ ejj ¡ D ƒ¡dd„ ƒZdS )ÚTestRoundtripVOUnitÚvounitr    c                 C   s$   g | ]}t |tƒrt |tƒs|‘qS r"   ri   rk   r"   r"   r#   rm   &  s   
 
þzTestRoundtripVOUnit.<listcomp>c                 C   s(   |   |¡ |tjtjfkr$|  |¡ d S r   )ra   rA   r   ZdBrb   ro   r"   r"   r#   rp   $  s    	
z"TestRoundtripVOUnit.test_roundtripN)rc   rd   re   rT   r   ÚVOUnitÚ_deprecated_unitsrX   r&   rq   rr   Ú_unitsrt   rp   r"   r"   r"   r#   ru      s   
þþru   c                   @   s@   e Zd ZdZejjZej	 
ddd„ ejj ¡ D ƒ¡dd„ ƒZdS )ÚTestRoundtripFITSÚfitsr    c                 C   s$   g | ]}t |tƒrt |tƒs|‘qS r"   ri   rk   r"   r"   r#   rm   8  s   
 
þzTestRoundtripFITS.<listcomp>c                 C   s   |   |¡ d S r   )ra   ro   r"   r"   r#   rp   6  s    	z TestRoundtripFITS.test_roundtripN)rc   rd   re   rT   r   ÚFitsrx   rX   r&   rq   rr   ry   rt   rp   r"   r"   r"   r#   rz   2  s   
þþrz   c                   @   sn   e Zd ZdZej ddd„ ejj	 
¡ D ƒ¡dd„ ƒZej ddd„ ejejd  ejejfD ƒ¡d	d
„ ƒZdS )ÚTestRoundtripCDSr@   r    c                 C   s$   g | ]}t |tƒrt |tƒs|‘qS r"   ri   rk   r"   r"   r#   rm   G  s   
 
þzTestRoundtripCDS.<listcomp>c                 C   s&   |   |¡ |tjkrd S |  |¡ d S r   )ra   rA   r   rb   ro   r"   r"   r#   rp   E  s    	

zTestRoundtripCDS.test_roundtripc                 C   s   g | ]}t  |¡‘qS r"   )rA   r   rk   r"   r"   r#   rm   V  s     r   c                 C   s*   |j dd�}tj|dd�}||ks&t‚d S )Nr@   r   )rC   rA   r   r   )r]   r    r%   Z	recoveredr"   r"   r#   Útest_roundtrip_dexU  s    z#TestRoundtripCDS.test_roundtrip_dexN)rc   rd   re   rT   r&   rq   rr   r   r=   ry   rt   rp   rA   Úcmr!   ÚKÚLsunr~   r"   r"   r"   r#   r}   B  s   
þþ
 "ÿr}   c                   @   sF   e Zd ZdZejjdhB Zej	 
ddd„ ejj ¡ D ƒ¡dd„ ƒZdS )	ÚTestRoundtripOGIPÚogipÚdr    c                 C   s$   g | ]}t |tƒrt |tƒs|‘qS r"   ri   rk   r"   r"   r#   rm   d  s   
 
þzTestRoundtripOGIP.<listcomp>c              	   C   sæ   t |ƒdkrXt t¡�  | | j¡}t|| jd�}W 5 Q R X t| ¡ j	| ¡ j	dd� n
|  
|¡ t |ƒdkrrd S t | ¡ j	¡}t|t|ƒ ƒdkr¦tjtdd�}n"t |ƒd	krÂtjtd
d�}ntƒ }|� |  |¡ W 5 Q R X d S )N)r„   ú
0.001 Crabr   rR   rS   )r   ÚbyteZCrabr6   zpower of 10rO   r…   rN   )Ústrr&   rY   r
   rC   rT   r   r   r[   r\   ra   ÚnpÚlog10ÚabsÚroundr   rb   )r]   r    r!   r`   Zpower_of_tenÚctxr"   r"   r#   rp   b  s     	
z TestRoundtripOGIP.test_roundtripN)rc   rd   re   rT   r   rI   rx   rX   r&   rq   rr   ry   rt   rp   r"   r"   r"   r#   r‚   ^  s   
þþr‚   c                   C   s   t jj d S r   )r   r|   ry   r"   r"   r"   r#   Útest_fits_units_available…  s    r�   c                   C   s   t jj d S r   )r   rw   ry   r"   r"   r"   r#   Útest_vo_units_available‰  s    rŽ   c                   C   s   t jj d S r   )r   r=   ry   r"   r"   r"   r#   Útest_cds_units_available�  s    r�   c               	   C   s2   ddl m}  |  ¡ � tjjdd� W 5 Q R X dS )ul   Regression test for #5350.  This failed with a decoding error as
    Î¼as could not be represented in ascii.r   ©r@   T)Zinclude_prefix_unitsN)Úastropy.unitsr@   ÚenablerA   ZradianZfind_equivalent_unitsr�   r"   r"   r#   Útest_cds_non_ascii_unit‘  s    
r“   c                  C   s,   t jt jd t j  } |  d¡dks(t‚d S ©Nr   Úlatexú $\mathrm{\frac{erg}{s\,cm^{2}}}$)rA   Úergr   r!   rC   r   ©Úfluxunitr"   r"   r#   Ú
test_latexš  s    rš   c                  C   s*   t jt jd t j  } | d›dks&t‚d S r”   )rA   r—   r   r!   r   r˜   r"   r"   r#   Útest_new_style_latexŸ  s    r›   c                  C   s@   t  dt j t jd t j t j  ¡} d}|  d¡|ks<t‚d S )Nç§Ž¨™ÂWó:r   z7$\mathrm{1 \times 10^{-24}\,\frac{erg}{Hz\,s\,cm^{2}}}$r•   ©rA   r   r—   r   r!   ÚHzrC   r   )r™   r•   r"   r"   r#   Útest_latex_scale¤  s    &rŸ   c                  C   s@   t  dt j t jd t j t j  ¡} d}|  d¡|ks<t‚d S )Nrœ   r   z;$\mathrm{1 \times 10^{-24}\,erg\,Hz^{-1}\,s^{-1}\,cm^{-2}}$Úlatex_inliner�   )r™   r    r"   r"   r#   Útest_latex_inline_scaleª  s    &r¡   zformat_spec, string)rh   úerg / (cm2 s))r!   r¢   )Úconsolez  erg  
 ------
 s cm^2)r•   r–   )r    z$\mathrm{erg\,s^{-1}\,cm^{-2}}$)z>20sz       erg / (cm2 s)c                 C   s,   t jt jd t j  }t|| ƒ|ks(t‚d S )Nr   )rA   r—   r   r!   r   r   )Úformat_specr%   r™   r"   r"   r#   Útest_format_styles°  s    r¥   c                  C   sJ   t  dt jt j ¡} |  d¡dks&t‚| t jd  }| d¡dksFt‚d S )NZ
FOOBAR_Oner{   zerg Hz-1é   zbit3 erg Hz-1)rA   Údef_unitr—   rž   rC   r   Úbit)ÚmyunitZmyunit2r"   r"   r#   Útest_flatten_to_knownÀ  s    rª   c               
   C   sD   t  d¡} t  | ¡�& t t¡� |  d¡ W 5 Q R X W 5 Q R X d S )NZ
FOOBAR_Twor{   )rA   r§   Zadd_enabled_unitsr&   r'   r(   rC   )r©   r"   r"   r#   Útest_flatten_impossibleÇ  s    
r«   c                   C   s   t j ¡  d¡ dS )z
    Issue #436.
    r£   N)rA   ZJyr[   rC   r"   r"   r"   r#   Útest_console_outÍ  s    r¬   c                   C   s   t jj d¡dkst‚d S )Nr•   z$\mathrm{60\,s}$)rA   ÚminÚ_representsrC   r   r"   r"   r"   r#   Útest_flexible_floatÔ  s    r¯   c                	   C   s*   t jtdd�� tj d¡ W 5 Q R X dS )zdTest function raises TypeError on bad input.

    This instead of returning None, see gh-11825.
    zunit argument must berO   N)r&   r'   Ú	TypeErrorr   r|   rC   r"   r"   r"   r#   Ú"test_fits_to_string_function_errorØ  s    r±   c                  C   sN   t jd } d|  d¡kst‚t jd }d| d¡ks8t‚| d¡dksJt‚d S )Nç       @Ú.r•   g      @z5/2rn   u
   cmâ�µâ¸�Â²)rA   r   rC   r   )ZareaZ
fractionalr"   r"   r#   Útest_fraction_reprâ  s
    

r´   c                  C   s8   dt j j} t| jjƒst‚t|  ¡  	¡ ƒdks4t‚dS )z[Scale just off unity at machine precision level is OK.
    Ensures #748 does not recur
    g      @r¦   N)
rA   ÚNZcgsr   r    r\   r   rZ   Ú__repr__Úsplit)r`   r"   r"   r#   Útest_scale_effectively_unityì  s    r¸   c                	   C   s¨   t  d¡t j  kr"t  d¡ks(n t‚t jddd�t  d¡ksDt‚t  d¡ d¡dks\t‚t t¡� t jddd� W 5 Q R X t t¡� t jddd� W 5 Q R X dS )z‰Test that the % unit is properly recognized.  Since % is a special
    symbol, this goes slightly beyond the round-tripping tested above.ú%ç{®Gáz„?r@   r   r{   rv   N)rA   r   Úpercentr   rC   r&   r'   r(   r"   r"   r"   r#   Útest_percentõ  s    (r¼   c                	   C   sà   t  d¡t  d¡  kr&dt j ks,n t‚t  d¡t  d¡ksDt‚t jddd�t  d¡ks`t‚t  d¡ d¡dksxt‚t t¡� t  d	¡ d
¡ W 5 Q R X t  d¡ d
¡dks¶t‚t t¡� t  d¡ d¡ W 5 Q R X dS )zpTest that scaled dimensionless units are properly recognized in generic
    and CDS, but not in fits and vounit.ú0.1çš™™™™™¹?z1.e-4g-Cëâ6?z10-4r@   r   z10+8g333333Ã?r{   z10**-1rv   N)rA   r   rB   r   rC   r&   r'   r(   r"   r"   r"   r#   Útest_scaled_dimensionless  s    ,r¿   c               	   C   s  t  t¡�} tjddd� W 5 Q R X dt| jƒks6t‚t  t¡�} tjddd� W 5 Q R X dt| jƒkslt‚dt| jƒks~t‚t jt	d	d
��}tjddd� W 5 Q R X t
|ƒdks¶t‚t|d jƒ d¡dksÒt‚t jt	dd
��}tjddd� W 5 Q R X t
|ƒdk�st‚d S )NZANGSTROMr{   r   z"Did you mean Angstrom or angstrom?Úcrabrƒ   zCrab (deprecated)zmCrab (deprecated)zL.* Did you mean 0\.1nm, Angstrom \(deprecated\) or angstrom \(deprecated\)\?rO   rv   rQ   r   r+   z.* 0\.1nm\.Úangstrom)r&   r'   r(   rA   r   r‡   Úvaluer   rY   r
   rZ   ÚmessageÚcount)Úexc_infor_   r"   r"   r#   Ú"test_deprecated_did_you_mean_units  s$    þrÆ   c              	   C   s0   t  t¡� t| ƒ t ¡  | ¡ W 5 Q R X d S r   )r&   r'   r(   r   r   r|   r   r)   r"   r"   r#   Útest_fits_function.  s    rÇ   c              
   C   sF   t  t¡�2 t ¡ � t d¡ t ¡  | ¡ W 5 Q R X W 5 Q R X d S )NrM   )	r&   r'   r(   rU   rV   rW   r   rw   r   r)   r"   r"   r#   Útest_vounit_function6  s    
rÈ   c               	   C   s€   t jddd�t  d¡k t jddd�t  d¡k t jddd�t  d¡k t t¡�} t jddd� W 5 Q R X t| ƒdks|t‚d S )	NÚKiBrv   r   z1024 BZKibyteZKibitZkibibyterQ   )rA   r   r&   rY   r
   rZ   r   )r_   r"   r"   r#   Útest_vounit_binary_prefix?  s    rÊ   c                   C   sH   t jddd�d kst‚t jddd�d ks,t‚t jddd�t jksDt‚d S )NÚunknownrv   r   ÚUNKNOWNÚ )rA   r   r   rB   r"   r"   r"   r#   Útest_vounit_unknownH  s    rÎ   c               	   C   sÞ   t jtdd��} tjddd�tjks(t‚W 5 Q R X t| ƒdksBt‚tj 	d¡dksVt‚t d¡ 	d¡d	ksnt‚t jtdd��X tj
tj tj tj tj }tjj 	|¡}|d
ks¶t‚tjj |¡}||ksÐt‚W 5 Q R X d S )NrN   rO   ZParv   r   rQ   Z10mzdam dagz100g.mzAngstrom**-1.cm**-2.erg.s**-1)r&   rY   r
   rA   r   ZPascalr   rZ   ZdamrC   r—   r   r!   ÚAAr   rw   r   )r_   ZflamÚxZnew_flamr"   r"   r#   Útest_vounit_detailsN  s    "rÑ   z$unit, vounit, number, scale, voscale)ÚnmrÒ   r¾   z10^-1r½   )ÚfmrÓ   ç      Y@ú10+2Ú100)zm^2r   rÔ   z100.0rÖ   )r   r   r   ú2.54r×   )ÚkgrØ   gZÖW^ˆ˜Ez1.898124597E27z1.8981246e+27)r   zm.s**-1g   JxÞ±AZ	299792458z2.9979246e+08)Zcm2zcm**2ç#B’¡œÇ;ú10^(-20)z1e-20c                 C   sF   t  |› d| › �¡}||t  | ¡ ks*t‚|jdd�|| ksBt‚d S )Nú rv   r   )rA   r   r   rC   )r    rv   Únumberr\   ZvoscalerÐ   r"   r"   r#   Útest_vounit_scale_factor`  s    rÝ   c                  C   sŠ   t jddd�} |  d¡}|dks$t‚|  ¡ }|dks8t‚t jddd�} | jd jjdks\t‚|  d¡}|d	ksrt‚|  ¡ }|d
ks†t‚d S )Nz'foo' mrv   r   z'foo'.mzfoo mzm'foo' mrQ   r6   zm.m'foo'zm mfoo)rA   r   rC   r   Úbasesr®   r\   )rÐ   Zx_vounitZx_stringr"   r"   r#   Útest_vounit_customr  s    

rß   c               	   C   s–   t  t¡�} tjddd�}W 5 Q R X |jd jjdks:t‚|jd jjd j	dksVt‚t
| ƒdksft‚dt| d jƒks|t‚d	t| d
 jƒks’t‚d S )Nzfurlong/weekrv   r   r   gVçž¯Ò<Zurlongr   ZfurlongÚweekrQ   )r&   rY   r
   rA   r   rÞ   r®   r\   r   ÚnamerZ   r‡   rÃ   )r_   rÐ   r"   r"   r#   Útest_vounit_implicit_custom�  s    râ   zscale, number, string)rÕ   éd   ú10**2)z10(+2)rã   rä   )z10**+2rã   rä   )z10**(+2)rã   rä   )z10^+2rã   rä   )z10^(+2)rã   rä   )rä   rã   rä   )z10**(2)rã   rä   )z10^2rã   rä   )z10^(2)rã   rä   )z10-20rÙ   ú10**-20)z10(-20)rÙ   rå   )rå   rÙ   rå   )z	10**(-20)rÙ   rå   )z10^-20rÙ   rå   )rÚ   rÙ   rå   c                 C   s¨   t j| d dd�}||t jt j t jd  t j  ks:t‚|jdd�|d ksRt‚t j| d dd�}||t jt j t jd  t j  ksŒt‚|jdd�|d ks¤t‚d S )Nz erg/(s cm**2 Angstrom)r{   r   r   z Angstrom-1 cm-2 erg s-1z*erg/(s cm**2 Angstrom))rA   r   r—   r!   r   ÚAngstromr   rC   )r\   rÜ   r%   rÐ   r"   r"   r#   Útest_fits_scale_factorŒ  s    ((rç   c               	   C   s¢   t  t¡� tjddd�} W 5 Q R X t  t¡� tjddd�} W 5 Q R X t dtj ¡} t  t¡� | jdd� W 5 Q R X t dtj ¡} | jdd�dksžt‚d S )Nz1000 erg/(s cm**2 Angstrom)r{   r   z12 erg/(s cm**2 Angstrom)g333333ó?rÔ   z	10**2 erg)r&   r'   r(   rA   r   r—   rC   r   )rÐ   r"   r"   r#   Útest_fits_scale_factor_errors«  s    rè   c                   C   sà   t j d¡dkst‚t jd  d¡dks,t‚t j d¡dks@t‚t jd  d¡dksXt‚t j d¡dkslt‚t jd  d¡dks„t‚t j d¡d	ks˜t‚t jd  d¡d
ks°t‚t j d¡dksÄt‚t jd  d¡dksÜt‚dS )zCRegression test for #5870, #8699, #9218; avoid double superscripts.r•   z$\mathrm{{}^{\circ}}$r   z$\mathrm{deg^{2}}$z$\mathrm{{}^{\prime}}$z$\mathrm{arcmin^{2}}$z$\mathrm{{}^{\prime\prime}}$z$\mathrm{arcsec^{2}}$z$\mathrm{{}^{h}}$z$\mathrm{hourangle^{2}}$z$\mathrm{e^{-}}$z$\mathrm{electron^{2}}$N)rA   ÚdegrC   r   ÚarcminZarcsecZ	hourangleZelectronr"   r"   r"   r#   Útest_double_superscriptº  s    rë   zpower,expected)rH   Úm)r²   r   )iöÿÿÿz1 / m10)r   r   )gUUUUUUå?zm(2/3))g]tÑE]ä?zm(7/11))g      �¿z1 / m(1/64))rº   zm(1/100))gûÙbeøF”?zm(0.019801980198019802)ée   zm(2/101)c                 C   s.   t j|  }| ¡ }||kst‚||ks*t‚dS )z@Regression test for #9279 - powers should not be oversimplified.N)rA   rì   rC   r   )ÚpowerÚexpectedr    r!   r"   r"   r#   Útest_powersÈ  s    
rð   zstring,unitu   Âµgu   Î¼gu   gâˆ’1u   mâ�»Â¹rQ   u   m sâ�»Â¹u   mÂ²u   mâ�ºÂ²u   mÂ³r¦   u   mÂ¹â�°u   Î©u   â„¦u   ÂµÎ©u   â„«u   â„« â„¦u   AÌŠu   mâ„«u   Â°Cu   MâŠ™u   Lâ˜‰u   MâŠ•u   Mâ™�u   Râ™ƒu   â€²u   Râˆžu   Mâ‚šc                 C   s*   t j | ¡|kst‚t | ¡|ks&t‚d S r   )r   r   r   r   rA   r   )r%   r    r"   r"   r#   Útest_unicodeß  s    !rñ   u   gÂµu   gâˆ’u   mâ�»1u   m+Â¹u   mâˆ’Â¹u   kâ„«c              	   C   s$   t  t¡� t | ¡ W 5 Q R X d S r   ©r&   r'   r(   rA   r   r)   r"   r"   r#   Útest_unicode_failures  s    ró   rT   )rn   r•   r    c              	   C   s,   t jtdd�� tjd| d� W 5 Q R X d S )Nz	not parserO   rì   r   )r&   r'   ÚNotImplementedErrorrA   r   )rT   r"   r"   r#   Ú/test_parse_error_message_for_output_only_format  s    rõ   c                	   C   s,   t jtdd�� tjddd� W 5 Q R X d S )Nz#Unknown.*unicode'\] for output onlyrO   rì   Zfoor   rò   r"   r"   r"   r#   Útest_unknown_parser  s    rö   )…Ú__doc__rU   Ú
contextlibr   Ú	fractionsr   Únumpyrˆ   r&   Znumpy.testingr   Zastropyr   rA   Zastropy.constantsr   r‘   r   r   r	   r
   r   r   r   Zastropy.units.utilsr   rq   rr   rì   r!   r   ZDecibelUnitZmWr   ZMagUnitÚctZDexUnitr$   r*   rÏ   r—   Úkmr8   ÚWZkpcZpixrÒ   rB   r/   r0   r1   r2   r3   r4   r¨   r5   ZRyr7   r9   ZdegreeÚhr€   r>   r?   rD   rE   rÄ   ZpixelZeVZGHzZkeVÚyrrÁ   ÚJZMeVrJ   rK   rL   rg   ru   rz   r}   r‚   r�   rŽ   r�   r“   rš   r›   rŸ   r¡   r¥   rª   r«   r¬   r¯   r±   r´   r¸   r¼   r¿   rÆ   rÇ   rÈ   rÊ   rÎ   rÑ   rÝ   rß   râ   rç   rè   rë   rð   Z	microgramÚgZohmZmicroOhmræ   ZOhmZmilliAngstromZdeg_Cré   ZMsunr�   ZMearthZRjuprê   ZM_prñ   ró   rõ   rö   r"   r"   r"   r#   Ú<module>   sj  

ñþ
 
ÿ

  $













Úþ+
êþ

þþý"ú	þû	ú÷üùü&ùýúÇþE
úþ
'	úþ


	

	ùþðþ
öþ
















åþ úþ