U
    e»{j.b  ã                   @   sz  d Z ddl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 dd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Z d*d+„ Z!d,d-„ Z"d.d/„ Z#d0d1„ Z$d2d3„ Z%d4d5„ Z&d6d7„ Z'd8d9„ Z(d:d;„ Z)d<d=„ Z*d>d?„ Z+d@dA„ Z,dBdC„ Z-dDdE„ Z.dFdG„ Z/e0ƒ Z1ej2 3¡ D ],Z4e5e4ej6ƒ�rhe5e4ej7ƒ�she1 8e4¡ �qhej9j:dHe;e1e/dI�e/dJ�dKdL„ ƒZ<e0ƒ Z=ej>j2 3¡ D ]:Z4e5e4ej6ƒ�rÊe5e4ej7ƒ�sÊe4ej>j?k�rÊe= 8e4¡ �qÊej9j:dHe;e=e/dI�e/dJ�dMdN„ ƒZ@e0ƒ ZAejBj2 3¡ D ]:Z4e5e4ej6ƒ�r:e5e4ej7ƒ�s:e4ejBj?k�r:eA 8e4¡ �q:ej9j:dHe;eAe/dI�e/dJ�dOdP„ ƒZCdQdR„ ZDdSdT„ ZEdUdV„ ZFdWdX„ ZGdYdZ„ ZHd[d\„ ZId]d^„ ZJd_d`„ ZKdadb„ ZLdcdd„ ZMdedf„ ZNdgdh„ ZOdidj„ ZPdkdl„ ZQdmdn„ ZRdodp„ ZSdqdr„ ZTej9 :dHejUdsgdtduidv�e VdwejWejX ¡g¡dxdy„ ƒZYdzd{„ ZZd|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‘„ Zed’d“„ Zfd”d•„ Zgd–d—„ Zhd˜d™„ Zidšd›„ Zjdœd�„ ZkdždŸ„ Zld d¡„ Zmd¢d£„ Znd¤d¥„ Zod¦d§„ Zpd¨d©„ Zqdªd«„ Zrd¬d­„ Zsd®d¯„ Ztej9 :d°d±d²d³d´dµd¶d·d¸d¹dºd»d¼d½d¾d¿dÀdÁdÂdÃdÄdÅdÆdÇg¡dÈdÉ„ ƒZudS )Êz'Regression tests for the units package.é    N)ÚFraction)Úassert_allclose)Ú	constants©Úunits)Úutilsc                  C   s0  t  t j¡t jkst‚t  dt j ¡} | t  dt jgdg¡ksBt‚t  | ¡| ksTt‚t  d|  ¡t  dt jgdg¡kszt‚t jdd|  d tƒ d�}|t  dt jgdg¡ks°t‚t  d¡t jksÄt‚t  d	¡t jksØt‚t jt jksèt‚t  d
¡| ksút‚t  d¡t  dg g ¡k�st‚t  ¡ t jk�s,t‚d S )Nç      $@é   g      Y@Úfooé   ©Ú	namespaceg     ˆÃ@ÚmÚ z10 m)ÚuÚUnitr   ÚAssertionErrorÚCompositeUnitÚlocalsZdimensionless_unscaledÚone)Z	ten_meterr
   © r   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/units/tests/test_units.pyÚtest_initialisation   s    &r   c                  C   sj   t jtddƒ } t| jd tƒs$t‚t jtddƒ } t| jd tƒsHt‚t jd } t| jd tƒsft‚d S )Nr	   é   r   r   çUUUUUUÕ?)r   r   r   Ú
isinstanceÚpowersr   Úfloat©Úxr   r   r   Útest_invalid_power$   s    
r    c                   C   s   t jt jkrt‚d S ©N©r   r   Úsr   r   r   r   r   Útest_invalid_compare0   s    r$   c                   C   s   t j t j¡dƒdkst‚d S )Nr	   i  )r   ÚhÚ_get_converterr#   r   r   r   r   r   Útest_convert4   s    r'   c                	   C   sZ   t  tj¡� tj tjd¡ W 5 Q R X t  tj¡� tjtj  tjd¡ W 5 Q R X d S ©Nr	   )ÚpytestÚraisesr   Ú
UnitsErrorÚcmÚtor#   r   r   r   r   r   Útest_convert_fail8   s    r.   c                   C   s€   t jt j t j  t j¡dƒdks&t‚t jt j t jd ks@t‚t jt j t j t jd ks`t‚t j dt j d¡dks|t‚d S )Nr	   é$   r   r   éè  çü©ñÒMbP?)	r   r,   r#   r%   r&   r   r   ÚHzr-   r   r   r   r   Útest_composite?   s    & r3   c                   C   s   t tjƒdkst‚d S )Nr,   )Ústrr   r,   r   r   r   r   r   Útest_strH   s    r5   c                   C   s   t tjƒdkst‚d S )Nz
Unit("cm"))Úreprr   r,   r   r   r   r   r   Ú	test_reprL   s    r7   c                  C   s  t jjt jkst‚t jjjdks$t‚t jjjt jgks:t‚t jjdkrVt jjt jgksZt‚tt jjjdƒ t jjjt j	gks€t‚t j
dtƒ d�} | j| ksžt‚t j
ddt j tƒ d�}|jjdksÆt‚|jjt jgksÚt‚| ¡ jd	ksìt‚| ¡ jt jgk�st‚d S )
Nç     @�@ç      ð?gHzlT6+@Úblar   Úblablaé
   r   i Œ  )r   r   Z
representsr   ÚkmÚscaleÚbasesÚRyr   ZeVÚdef_unitr   ÚhrÚ	decomposer#   )r:   r;   r   r   r   Útest_representsP   s     rD   c                   C   s|   t tj tj¡dƒ t tj tj¡dƒ t tj tj¡dƒ t tj tj¡dƒ t tj	 tj
¡dƒ t tj tj¡dƒ d S )Nr1   r0   ç�íµ ÷Æ°>g(Ôë²¥UÔ>g-DTû!@g-DTû!)@)r   r   Úkpcr-   ÚMpcÚyrÚMyrZAUÚpcÚcycleÚradÚspatÚsrr   r   r   r   Útest_units_conversion`   s    rO   c                   C   s0   t jt j tddƒ t j  t jt j d  d S )Nr	   r   é	   )r   rF   rH   r   rI   ÚAAÚergr   r   r   r   Útest_units_manipulationi   s    rS   c                   C   s   t jt j ¡ kst‚d S r!   )r   r@   rC   r   r   r   r   r   Útest_decomposeo   s    rT   c                  C   s4   dt j dt j  } | jjdks$t‚t| jdƒ dS )zh
    Issue #1150: Test for conversion of dimensionless quantities
                 to the SI system
    r9   Údimensionlessr1   N)r   rF   rG   ÚunitÚphysical_typer   r   Úsi©Ztestunitr   r   r   Útest_dimensionless_to_sis   s    rZ   c                  C   s4   dt j dt j  } | jjdks$t‚t| jdƒ dS )zi
    Issue #1150: Test for conversion of dimensionless quantities
                 to the CGS system
    r9   rU   r1   N)r   r   r=   rV   rW   r   r   ÚcgsrY   r   r   r   Útest_dimensionless_to_cgs   s    r\   c                	   C   s.   t jtjdd�� tjddd� W 5 Q R X d S )NÚFOO©ÚmatchÚwarn©Úparse_strict)r)   Úwarnsr   ÚUnitsWarningr   r   r   r   r   Útest_unknown_unit‹   s    re   c               	   C   sx   t jtjdd�� t d¡ ¡ dks(t‚W 5 Q R X t  t¡� tjddd� W 5 Q R X tjddd�} |  ¡ dkstt‚d S )	Nz8'm/s/kg' contains multiple slashes, which is discouragedr^   zm/s/kgz
m / (kg s)Zvounit©Úformatzkg(3/10) * m(5/2) / szkg(3/10) m(5/2) / s)	r)   rc   r   rd   r   Ú	to_stringr   r*   Ú
ValueErrorr   r   r   r   Útest_multiple_solidus�   s    þ rj   c               	   C   s0  t jddd�} t| t jƒst‚| jdks,t‚t jddd�}| |ksFt‚|  |¡sTt‚t jddd�}| |ksnt‚|  |¡r|t‚| dksˆt‚| t jks–t‚| d ks¢t‚| d t jfks´t‚t 	t
¡� |  |¡ W 5 Q R X |  d¡}| d¡}t 	t
¡� t jddd� W 5 Q R X t 	t¡� t  d ¡ W 5 Q R X d S )Nr]   Úsilentra   ZBARÚlatexr[   Ústrict)r   r   r   ZUnrecognizedUnitr   ÚnameÚis_equivalentr   r)   r*   ri   r&   rh   Ú	TypeError)rV   Úunit2Zunit3Ú_r   r   r   Útest_unknown_unit3Ÿ   s*    

rs   c                	   C   s*   t  t¡� dddgtj  W 5 Q R X d S )NÚaÚbÚc)r)   r*   rp   r   r   r   r   r   r   Útest_invalid_scaleÀ   s    rw   c                  C   s"   t jdddd�} | jdkst‚d S )Nz	10+22/cm2Úcdsrk   )rg   rb   g’ÕMÏð€D)r   r   r>   r   ©rV   r   r   r   Útest_cds_powerÅ   s    rz   c               	   C   sd   t jdt jd tƒ d�} dtƒ ks&t‚t  | ¡� dt  ¡ jksDt‚W 5 Q R X dt  ¡ jks`t‚d S )Nr
   r   r   )r   rA   r   r   r   Úadd_enabled_unitsÚget_current_unit_registryÚregistry)r
   r   r   r   Útest_registerÊ   s
    r~   c                  C   s$   t jt j } |  t jt j d¡}d S r(   )r   r,   r#   Zin_unitsrJ   Úhour)Z
speed_unitrr   r   r   r   Útest_in_unitsÒ   s    r€   c                   C   s   t jt j t  d¡kst‚d S r(   )r   r   r   r   r   r   r   r   Útest_null_unit×   s    r�   c                   C   s,   t j d¡dkst‚t j d¡dks(t‚d S )Nr
   FrJ   T)r   r   ro   r   r   r   r   r   Útest_unrecognized_equivalencyÛ   s    r‚   c                	   C   s8   t jtjdd�� tj tjtjd  ¡ W 5 Q R X d S )Nzlength.+ are not convertibler^   r   )r)   r*   r   r+   rQ   r-   r%   r#   r   r   r   r   Útest_convertible_exceptionà   s    rƒ   c                	   C   s.   t jtjdd�� tj tj¡ W 5 Q R X d S )Nz(length. and .+time.+ are not convertibler^   )r)   r*   r   r+   r   r-   r#   r   r   r   r   Útest_convertible_exception2å   s    r„   c               	   C   s4   G dd„ dƒ} t  t¡� t | ƒ ¡ W 5 Q R X d S )Nc                   @   s   e Zd ZdS )ztest_invalid_type.<locals>.AN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚAë   s   rˆ   )r)   r*   rp   r   r   )rˆ   r   r   r   Útest_invalid_typeê   s    r‰   c                  C   sp   t j t jt j ¡st‚t jjt jjd�} | d jd t jksBt‚t jjt jjd�} | d jd t jkslt‚dS )z
    Issue #599
    r   r   N)	r   rN   ro   rL   r   Úcomposer[   r?   Ú__dict__©Úresultsr   r   r   Útest_steradianò   s
    rŽ   c                  C   sp   ddl m}  ddlm} | jjj|jd�}|jt	j
t	jt	jgksDt‚|jtddƒddgks^t‚|jd	kslt‚d
S )z
    From issue #576
    r   )Úe©r[   ©r?   r   r   ç      à?éÿÿÿÿr9   N)Úastropy.constantsr�   Úastropy.unitsr[   ZesurV   rC   r?   Ú_basesr   r,   Úgr#   r   Ú_powersr   Ú_scale)r�   r[   Údr   r   r   Útest_decompose_basesÿ   s    r›   c                  C   s<   t jt j t j } |  ¡ }t|d jƒt jt jhks8t‚d S )Nr   )	r   ÚcdrN   ZWbrŠ   Úsetr–   Zlmr   )ÚcomplexÚcomposedr   r   r   Útest_complex_compose  s    r    c                  C   s,   t jjt  ¡ d�} tdd„ | D ƒƒs(t‚d S )N)Zequivalenciesc                 s   s   | ]}t jg|jkV  qd S r!   )r   r2   r?   ©Ú.0r   r   r   r   Ú	<genexpr>  s     z%test_equiv_compose.<locals>.<genexpr>)r   r   rŠ   ZspectralÚanyr   )rŸ   r   r   r   Útest_equiv_compose  s    r¥   c                	   C   s*   t  tj¡� tjjg d� W 5 Q R X d S ©Nr   )r)   r*   r   r+   r   rŠ   r   r   r   r   Útest_empty_compose  s    r§   c                 C   s   t | ƒS r!   )r4   ry   r   r   r   Ú_unit_as_str  s    r¨   rV   )Úkey)Zidsc                 C   s^   |   ¡  ¡ }d}|D ]<}t|jƒr:|jd | krPd} qRqt| jƒdkrd} qRq|sZt‚d S )NFr   T)rC   rŠ   Úlenr?   r   )rV   Zcomposed_listÚfoundrŸ   r   r   r   Útest_compose_roundtrip,  s    
r¬   c                    s8   ˆ   tj¡}‡ fdd„|D ƒs"t‚|d ˆ jks4t‚d S )Nc                    s   g | ]}|  ˆ ¡‘qS r   ©ro   r¡   ry   r   r   Ú
<listcomp>N  s     z*test_compose_cgs_to_si.<locals>.<listcomp>r   )Ú	to_systemr   rX   r   )rV   rX   r   ry   r   Útest_compose_cgs_to_siI  s    r°   c                    sh   zˆ   tj¡}W n* tjk
r:   tjˆ  ¡ jkr4n‚ Y n*X ‡ fdd„|D ƒsRt‚|d ˆ jksdt‚d S )Nc                    s   g | ]}|  ˆ ¡‘qS r   r­   r¡   ry   r   r   r®   k  s     z*test_compose_si_to_cgs.<locals>.<listcomp>r   )r¯   r   r[   r+   rˆ   rC   r?   r   )rV   r[   r   ry   r   Útest_compose_si_to_cgs^  s    r±   c                   C   s@   t jjt jk	st‚t jt jt jd t j t j  jjks<t‚dS )zwCheck units that are not official derived units.

    Should not appear on its own or as part of a composite unit.
    r   N)	r   ÚbarrX   r   Úkgr#   rN   Únmr–   r   r   r   r   Ú
test_to_sio  s    	rµ   c                   C   sB   t j t j¡d jd t jks"t‚t j t j¡d jdks>t‚d S )Nr	   r   r   )r   ZPar¯   r[   r–   ZBar   r™   r   r   r   r   Útest_to_cgs}  s    "r¶   c                  C   s0   ddl m}  tjj| jd�jd | jks,t‚d S )Nr   r�   r‘   )	r•   r[   r   r   rC   r?   r–   r,   r   r�   r   r   r   Útest_decompose_to_cgs‚  s    r·   c                  C   sx   t jt jd  t j } | jt jt jt jgd�}t|ƒdks>t‚|d jt jt jt jgks\t‚|d j	dddgkstt‚d S )Nr   r   r	   r   é   éþÿÿÿ)
r   r³   r#   r   rŠ   ÚNrª   r   r–   r˜   )rV   Úresultr   r   r   Útest_compose_issue_579ˆ  s
    r¼   c               	   C   s6  t jjt jfd�} | d jd t jks*t‚| d jdks<t‚t jjt jgdd�} | d jd t jksht‚| d jdkszt‚t jjt jgd�} | d jd t jks¤t‚| d jdks¶t‚t jt j jt jt j	fd�} | d jt jt j	gksìt‚t
| d jdƒ t t j¡�$ t jt j jt jt j	fdd� W 5 Q R X d S )	Nr   r   r9   T)r   Zinclude_prefix_unitsr1   gObn]ð?F)r   r   rŠ   r?   r   r>   r=   r#   rJ   rI   r   r)   r*   r+   r   r   r   r   Útest_compose_prefix_unit’  s    r½   c                  C   s0   t jt j } t| jt jt jgd�ƒdks,t‚d S )Nr   r	   )r   r³   r#   rª   rŠ   r—   r   ry   r   r   r   Útest_self_compose¥  s    r¾   c               	   C   s2   t j} t t j¡� | jt jgd� W 5 Q R X d S r¦   )r   r³   r)   r*   r+   rŠ   rº   ry   r   r   r   Útest_compose_failed«  s    r¿   c                  C   s–   t jd t jd  } |  ¡ }|D ]}|  ¡ | ¡ ks t‚q | jt jd�}|D ]}|  ¡ | ¡ ksLt‚qL| jt jd�}|D ]}|  ¡ | ¡ ksxt‚qxd S )Nr’   ç      ø?r   )r   r   rH   rŠ   rC   r   r[   rX   )r   ZfactoredrV   r   r   r   Útest_compose_fractional_powers±  s    rÁ   c                  C   sŽ   t j ¡ } t| d jƒdks t‚| d jd t jks8t‚t jd  ¡ } | d jd t jt jfksdt‚t j	 
¡  ¡ } | d jd t j	ksŠt‚d S )Nr   r	   r“   )r   ÚlrŠ   rª   r?   r   r#   r2   ZBqr@   rC   rŒ   r   r   r   Útest_compose_best_unit_firstÇ  s    
rÃ   c                  C   sR   t jt jd  t jd  t jd  t jd  } | jt jjd�}t	|ƒdksNt
‚d S )Nr   g      @r’   r   r   r	   )r   r³   r#   ÚaurH   rN   rŠ   r[   r?   rª   r   )ÚnewrŸ   r   r   r   Útest_compose_no_duplicatesÓ  s    .rÆ   c                  C   s.   dt j t jd  } |  t jt jd  ¡ dS )z
    Issue #672
    l     @=7M.cr   N)r   ZM_pr,   r-   ZM_sunrJ   )Úsigmar   r   r   Útest_long_intÙ  s    rÈ   c                  C   sN   dD ]D} dD ]:}dD ]0}t jdddg| | | d�}tj tj|¡ qqqdS )	zé
    Regression test for #744

    A logic issue in the units code meant that big endian arrays could not be
    converted because the dtype is '>f4', not 'float32', and the code was
    looking for the strings 'float' or 'int'.
    )ú<ú>)ÚiÚf)Ú4Ú8r	   r   r   )ZdtypeN)ÚnpÚarrayr   r   r-   r,   )ZendianZntypeÚbyter   r   r   r   Útest_endian_independenceá  s
    rÒ   c                   C   s   dt j jjt jkst‚dS )z
    Issue #863
    r	   N)r   ÚdegreerX   rV   rL   r   r   r   r   r   Útest_radian_baseð  s    rÔ   c                   C   s    t tdƒrt‚t tdƒst‚d S )NÚasZ
attosecond)Úhasattrr   r   r   r   r   r   Ú
test_no_as÷  s    r×   c                   C   sf   t jjddgkst‚t jjddgks(t‚t jjdgks:t‚tt jjƒtt jjƒtt jjƒB ksbt‚d S )NÚctÚcount)r   rØ   Únamesr   Zshort_namesZ
long_namesr�   Úphr   r   r   r   Útest_no_duplicates_in_namesþ  s    rÜ   c               	   C   s|  t  tj¡} t  | ¡}|tjks$t‚tjdgddid�}dt ¡ jksJt‚t  |¡} t  | ¡}||k	sjt‚|j	dgkszt‚| 
d¡dksŒt‚dt ¡ jksžt‚t |g¡�8 t  |¡} dt ¡ jksÈt‚t  | ¡}||ksÞt‚W 5 Q R X t g ¡�l dt ¡ jk�st‚t  | ¡}||k	�s t‚|j	dgk�s2t‚| 
d¡dk�sFt‚dt ¡ jk�sZt‚W 5 Q R X dt ¡ jk�sxt‚d S )Nr
   Úbazr²   rf   )ÚpickleÚdumpsr   r   Úloadsr   ÚIrreducibleUnitr|   r}   rÚ   Zget_format_namer{   )ÚpÚotherZnew_unitZnew_unit_copyr   r   r   Útest_pickling  s0    





rä   c                  C   s8   t tjƒ} t d¡}|tjks"t‚t tjƒ| ks4t‚dS )z­We cannot really test between sessions easily, so fake it.

    This test can be changed if the pickle protocol or the code
    changes enough that it no longer works.

    sá   €•Ö       Œastropy.units.core”Œ_recreate_irreducible_unit”“”h ŒIrreducibleUnit”“”]”(Œm”Œmeter”eˆ‡”R”}”(Œ_names”]”(hheŒ_short_names”]”haŒ_long_names”]”haŒ_format”}”Œ__doc__”Œ meter: base unit of length in SI”ub.N)Úhashr   r   rÞ   rà   r   )Zhash_mrV   r   r   r   Útest_pickle_between_sessions-  s    
ÿ
ræ   r
   rÝ   r²   rf   Zm_per_sc              	   C   s²   t | ƒ}| jdk	st‚t t | ¡¡}|| k	s2t‚|jdks@t‚t |ƒ|ksPt‚t | g¡�L t t | ¡¡}t| tj	ƒrˆ|| ks”t‚n|| k	s”t‚t | ƒ|ks¤t‚W 5 Q R X dS )a  
    Tests private attribute since the problem with _hash being pickled
    and restored only appeared if the unpickling was done in another
    session, for which the hash no longer was valid, and it is difficult
    to mimic separate sessions in a simple test. See gh-11872.
    N)
rå   Ú_hashr   rÞ   rà   rß   r   r{   r   rá   )rV   Z	unit_hashZ	unit_copyZunit_refr   r   r   Ú'test_pickle_does_not_keep_memoized_hashC  s    rè   c                  C   s"   t jddd�} t t | ¡¡ dS )z
    Issue #2047
    Zasdfrk   ra   N)r   r   rÞ   rà   rß   )rt   r   r   r   Útest_pickle_unrecognized_unita  s    ré   c                	   C   s*   t  t¡� tjdtjd� W 5 Q R X d S )Nr   r   )r)   r*   ri   r   rA   r‹   r   r   r   r   Útest_duplicate_definei  s    rê   c                  C   s.   ddl m}  | ƒ }t|jƒt|jƒks*t‚d S )Nr   )r|   )Zastropy.units.corer|   rª   Z	all_unitsZnon_prefix_unitsr   )r|   r}   r   r   r   Útest_all_unitsn  s    rë   c                   C   s   t j ¡ t j d¡kst‚d S )Nrl   )r   r   Z_repr_latex_rh   r   r   r   r   r   Útest_repr_latexu  s    rì   c                   C   s@   t jd t jdt j  kst‚t jd dt j t j ks<t‚d S )NZ5sg      @r"   r   r   r   r   Útest_operations_with_stringsy  s    rí   c                	   C   sh   t jt jkst‚t jt jks t‚t jt jk s0t‚t jt jks@t‚t t j¡� t jt jk W 5 Q R X d S r!   )r   r   r,   r   r)   r*   r+   r³   r   r   r   r   Útest_comparison  s    rî   c                  C   s*   ddl m}  |  tjtjt d¡g¡ d S )Nr   ©ÚGz15 s)r”   rð   rC   r   r³   r=   r   rï   r   r   r   Ú!test_compose_into_arbitrary_units‰  s    rñ   c                  C   sB   t j} d}||  t  |¡|  ks$t‚| | | t  |¡ ks>t‚dS ©zACheck that multiplication with strings produces the correct unit.r³   N©r   r,   r   r   ©Úu1Úusr   r   r   Ú$test_unit_multiplication_with_string�  s    r÷   c                  C   sB   t j} d}||  t  |¡|  ks$t‚| | | t  |¡ ks>t‚dS rò   ró   rô   r   r   r   Útest_unit_division_by_string˜  s    rø   c                   C   s$   t jt j jt jt j jks t‚dS )z
See #1616.N)r   r   ZJyr?   r   r   r   r   r   Útest_sorted_bases   s    rù   c                   C   sD   t jt jkst‚t jt jks t‚t jt jks0t‚t jt jks@t‚dS )z	See #1543N)r   ZMbitZMbr   ZmegabitZMbyteÚMBZmegabyter   r   r   r   Útest_megabit¥  s    rû   c                  C   s:   t  d¡} t  d¡}tt  d| |gddg¡ƒdks6t‚dS )z	See #1576znrad/szHz(1/2)r	   r“   znrad / (Hz(1/2) s)N)r   r   r4   r   r   )Zunit1rq   r   r   r   Ú#test_composite_unit_get_format_name®  s    

rü   c                  C   s    ddl m}  | tjtjd� d S )Nr   ©Ú!assert_follows_unicode_guidelines)Z	roundtrip)Zastropy.tests.helperrþ   r   rÓ   r‹   rý   r   r   r   Útest_unicode_policyµ  s    rÿ   c               
   C   s<   dD ]2\} }t jtd|› �d�� t | ¡ W 5 Q R X qd S )N))ZmicronsÚmicron)z	s/micronsr   )ÚMr   )ZmetreZmeter)Z	angstromszAngstrom or angstrom)Z	milimeterZ
millimeter)u
   Ã¥ngstrÃ¶mz*Angstrom, angstrom, mAngstrom or mangstrom)ZkevzEV, eV, kV or keVzDid you mean r^   )r)   r*   ri   r   r   )ÚsearchÚmatchesr   r   r   Útest_suggestions»  s    
r  c               	   C   sf   t jtjdd��} t d¡}W 5 Q R X |tjtjd  tjd  tjd  ksRt	‚t
| ƒdksbt	‚dS )z
See #1911.zmultiple slashesr^   zerg /s /cm**2 /angstromr“   r¹   r	   N)r)   rc   r   rd   r   rR   r#   r,   Zangstromr   rª   )Úwr   r   r   r   Útest_fits_hst_unitÊ  s    ,r  c                   C   s$   t jt jkst‚t jt jks t‚dS )zBRegression test for https://github.com/astropy/astropy/issues/3753N)r   ZfbarnZ	femtobarnr   ZpbarnZpicobarnr   r   r   r   Útest_barn_prefixesÒ  s    r  c                  C   s   dt j } ddt j t j t j  }dt j t j }tjd | d  |j tddƒ | }| 	d¡}tjd | d  | tddƒ | }| 	d¡}tjd | d  |j d	 | }| 	d¡}tjd | d  | d	 | }| 	d¡}t
||ƒ t
||ƒ t
||ƒ t jd
 }t|jd tƒ�s"t‚t jd }t|jd tƒ�sBt‚|jd jdk�sXt‚|jd jdk�snt‚t jtddƒ t jtddƒ  }t|jd tƒ�s¤t‚|jd tddƒk�s¾t‚t jd d }t|jd tƒ�sât‚|jd tddƒk�süt‚dS )z	See #2069ç    eÍÍAr9   g     €Q@éÈ   r   r	   r   rJ   r   gûÙbeøF„?r   gÛ¶mÛ¶mÛ?é   é   gš™™™™™Àg]tÑEÝ¿N)r   ZMsunr=   r#   rG   rv   rð   r[   r   r-   r   r   r   r   r   r   Ú	numeratorÚdenominatorr,   ZTeV)r   ZtHÚvcr   Zv1Zv2Zv3Zv4r   r   r   Útest_fractional_powersÙ  s4    
&
$
 






 r  c                  C   s8   t jd } t|  ¡ jdƒst‚|  ¡ d t jks4t‚d S )Nr’   Úimagr   )r   ÚmagrÖ   rC   r>   r   )Zsqrt_magr   r   r   Útest_sqrt_mag  s    
r  c                  C   s.   t jjt  d¡gd�d } t jj| gd� d S )Nr#   r   r   )r   r#   rŠ   r   )Zcomposite_unitr   r   r   Útest_composite_compose  s    r  c                   C   s   t j t j¡st‚d S r!   )r   rÑ   ro   Úbitr   r   r   r   r   Útest_data_quantities  s    r  c                   C   s    t jd krt‚t jd kst‚d S r!   )r   r   r   r   r   r   r   Útest_compare_with_none  s    r  c                  C   s8   t  d¡} t| tƒst‚| jdks&t‚| jdks4t‚d S )Ngªªªªªªò?r
  r  )r   Zvalidate_powerr   r   r   r  r  )Úfracr   r   r   Ú#test_validate_power_detect_fraction  s    
r  c                  C   sº   dt jd  t j } dt j }d}dt j t jd  }d}d}d	}d
t j }dtj | t tj¡  }||  || | |tj	 | d   }	||	 d }
|
j
jdksªt‚|
 t j¡ d S )NgÃõ(\�ÂÕ?r   g™v@ÝÊiBg      ü?g•Ö&è.>r   r’   g†a†aÈ?g çyžçyÞ?ç    €„.Agš™™™™™é¿Úlength)r   r,   r—   ZsolMassZsolRadrv   rÏ   ÚsqrtÚpirð   rV   rW   r   r-   )ÚkappaZr_0ÚqZrho_0ÚyÚbetart   Zm_hÚt1Út2r»   r   r   r   Ú'test_complex_fractional_rounding_errors   s    

(r#  c                  C   sT   t jd tddƒ } t| jd tƒs(t‚| jd jdks<t‚| jd jdksPt‚d S )NrÀ   r¸   é   r   r  )r   r   r   r   r   r   r  r  r   r   r   r   Ú&test_fractional_rounding_errors_simple5  s    r%  c               	   C   sl   ddl m}  |  ¡ � | jtj ¡ ks*t‚W 5 Q R X ddl m} | ¡ � |j	tj
 ¡ ks^t‚W 5 Q R X d S )Nr   )rx   )Úimperial)r•   rx   ÚenableZgeoMassr   r³   Zfind_equivalent_unitsr   r&  Zinchr   )rx   r&  r   r   r   Útest_enable_unit_groupings<  s    

r(  c                  C   s²   ddl m}  t | j¡D ]”}|\}}}}}|jdkr>|s¬t‚q|jdkrR|s¬t‚q|jdkrf|s¬t‚q|jdkr~|dks¬t‚q|jdkr–|dks¬t‚q|jd	kr|d
kst‚qdS )zÄ
    Test for a few units that the unit summary table correctly reports
    whether or not that unit supports prefixes.

    Regression test for https://github.com/astropy/astropy/issues/3835
    r   )Ú	astrophysZlyrrJ   ZbarnrK   ZNorM   ZvoxZYesN)r•   r)  r   Z_iter_unit_summaryr‹   rn   r   )r)  ÚsummaryrV   rr   Úprefixesr   r   r   Útest_unit_summary_prefixesH  s    








r,  c                  C   s\   t jd t jd  } | d }|jt jt jgks2t‚|jddgksDt‚|t jt j ksXt‚dS )z�Test that order of bases is changed when raising to negative power.

    Regression test for https://github.com/astropy/astropy/issues/8260
    r   g      à¿r	   r“   N)r   r   r#   r?   r   r   )Zm2s2Zspmr   r   r   Útest_raise_to_negative_powerc  s
    r-  z name, symbol, multiplying_factor)ZquettaÚQgêŒ 9Y>)F)ZronnaÚRg„þäqÙ‰E)ZyottaÚYg´�ÙyCxêD)ZzettaÚZgPïâÖäKD)ZexaÚEg ÈNgmÁ«C)ZpetaÚPg  4&õkC)ZteraÚTg   ¢”mB)Zgigarð   r  )Úmegar  r  )ZkiloÚkr8   )ZdecaÚdar   )Zdecirš   gš™™™™™¹?)Zcentirv   g{®Gáz„?)Zmillir   r1   )Úmicror   rE   )ZnanoÚng•Ö&è.>)Zpicorâ   gê-�™—q=)ZfemtorÌ   gVçž¯Ò<)Zattort   g¬CÒÑ]r2<)ZzeptoÚzgO›
´ã’;)Zyoctor  g§Ž¨™ÂWó:)ZrontoÚrg<ò6šÎS:)Zquector  g ÂëþKH´9c                 C   sj   dt j }| |› d�¡}| | › d�¡}t  ||¡s:t‚t  ||¡sJt‚|j|j }t  ||¡sft‚d S )Nr	   r—   Zgram)r   r—   r-   Úiscloser   Úvalue)rn   ÚsymbolZmultiplying_factorÚbaseZquantity_from_symbolZquantity_from_nameZvalue_ratior   r   r   Útest_si_prefixeso  s    
r@  )vÚ__doc__rÞ   Ú	fractionsr   ÚnumpyrÏ   r)   Znumpy.testingr   Zastropyr   rv   r   r   r•   r   r   r    r$   r'   r.   r3   r5   r7   rD   rO   rS   rT   rZ   r\   re   rj   rs   rw   rz   r~   r€   r�   r‚   rƒ   r„   r‰   rŽ   r›   r    r¥   r§   r¨   r�   ZCOMPOSE_ROUNDTRIPr‹   ÚvaluesÚvalr   ZUnitBaseZ
PrefixUnitÚaddÚmarkZparametrizeÚsortedr¬   ZCOMPOSE_CGS_TO_SIr[   Zdeg_Cr°   ZCOMPOSE_SI_TO_CGSrX   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ù   rû   rü   rÿ   r  r  r  r  r  r  r  r  r  r#  r%  r(  r,  r-  r@  r   r   r   r   Ú<module>   s:  		! 
 ÿ

ÿ
þ
ý 
 ÿ

ÿ
þ
ý 
 ÿ

'&þ

	(éþ