U
    e»{j)  ã                   @   s2  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„ Z
ejje	 dd�G d	d
„ d
ƒƒZejje	dd�dd„ ƒZej dejejfdg¡dd„ ƒZej dejejfdg¡dd„ ƒZej dejdg¡dd„ ƒZej dejejfdg¡dd„ ƒZej dejejfdg¡dd„ ƒZej dejejfdg¡dd„ ƒZdd „ Zej dejejfdg¡d!d"„ ƒZej dejejfdg¡d#d$„ ƒZej d%ejejfdg¡d&d'„ ƒZej dejejfdg¡d(d)„ ƒZej dejejfdg¡d*d+„ ƒZej dejejfdg¡d,d-„ ƒZd.d/„ Z d0d1„ Z!d2d3„ Z"d4d5„ Z#dS )6é    N)Úunits)ÚQuantity)ÚHAS_ANNOTATEDc                  C   sR   t jt jtdœdd„ƒ} dt j d }}| ||ƒ\}}||ksBt‚||ksNt‚dS )ziTest annotations that are not unit related are ignored.

    This test passes if the function works.
    ©ÚxÚyc                 S   s   | |fS ©N© r   r	   r	   úl/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/units/tests/test_quantity_annotations.pyÚfunc   s    z2test_ignore_generic_type_annotations.<locals>.funcé   úcool stringN)ÚuÚquantity_inputÚmÚstrÚAssertionError)r   Úi_qÚi_strÚo_qÚo_strr	   r	   r
   Ú$test_ignore_generic_type_annotations   s    r   úneed `Annotated`©Úreasonc                   @   s\   e Zd ZdZdd„ Zdd„ Zejje	 dd�dd	„ ƒZ
ejje	 dd�d
d„ ƒZdd„ ZdS )ÚTestQuantityUnitAnnotationsz$Test Quantity[Unit] type annotation.c              	   C   s¨   t jtt j tdœdd„ƒ}dt j d }}|||ƒ\}}||ksFt‚||ksRt‚t t j¡� |dt j	 |ƒ W 5 Q R X ||ddiƒ\}}||ks˜t‚||ks¤t‚d S )	Nr   c                 S   s   | |fS r   r	   r   r	   r	   r
   r   $   s    z@TestQuantityUnitAnnotations.test_simple_annotation.<locals>.funcr   r   é   Únotza string)
r   r   r   r   r   r   ÚpytestÚraisesÚ
UnitsErrorÚs)Úselfr   r   r   r   r   r	   r	   r
   Útest_simple_annotation#   s    z2TestQuantityUnitAnnotations.test_simple_annotationc                 C   sT   t jtt j tt j dœdd„ƒ}dt j }||ƒ}||ks@t‚|jt jksPt‚d S )N)ÚaÚreturnc                 S   s   | S r   r	   )r$   r	   r	   r
   Ú
multi_func7   s    zHTestQuantityUnitAnnotations.test_multiple_annotation.<locals>.multi_funcr   )r   r   r   Úkmr   r   Úunit)r"   r&   r   r   r	   r	   r
   Útest_multiple_annotation6   s    
z4TestQuantityUnitAnnotations.test_multiple_annotationr   r   c                 C   sz   t jdtjtt j  tt j dœdd„ƒ}dt j }||ƒ}|jt jksLt‚||ksXt‚d }||ƒ}|dt j ksvt‚d S )N)r   r%   c                 S   s   | d krdt j S | S )Nr   )r   r'   ©r   r	   r	   r
   Úopt_funcB   s    
zITestQuantityUnitAnnotations.test_optional_and_annotated.<locals>.opt_funcéú   r   )N)	r   r   ÚTÚOptionalr   r   r'   r(   r   )r"   r+   r   r   r	   r	   r
   Útest_optional_and_annotated@   s    &
z7TestQuantityUnitAnnotations.test_optional_and_annotatedc                 C   sŒ   t jtjtt j tt j d f dœdd„ƒ}dt j }||ƒ}|d| ksNt‚dt j }||ƒ}|d| kspt‚d }||ƒ}|d ksˆt‚d S )Nr*   c                 S   s   | d krd S d|  S d S )Nr   r	   r*   r	   r	   r
   Ú
union_funcT   s    zHTestQuantityUnitAnnotations.test_union_and_annotated.<locals>.union_funcr   r   )r   r   r-   ÚUnionr   r   r!   r   )r"   r0   r   r   r	   r	   r
   Útest_union_and_annotatedQ   s    (

z4TestQuantityUnitAnnotations.test_union_and_annotatedc              	   C   s&   t jtdd�� td  W 5 Q R X d S )Nzunit annotation is not©Úmatchzdefinitely not a unit)r   r   Ú	TypeErrorr   )r"   r	   r	   r
   Útest_not_unit_or_ptypeg   s    z2TestQuantityUnitAnnotations.test_not_unit_or_ptypeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   r)   r   ÚmarkÚskipifr   r/   r2   r6   r	   r	   r	   r
   r      s   


r   zrequires py3.8 behaviorc               	   C   s2   t  t¡� ttj } W 5 Q R X | tjks.t‚dS )zm
    Same as above test, but different behavior for python 3.8 b/c it passes
    Quantity right through.
    N)r   ZwarnsÚWarningr   r   r'   r   )Zannotr	   r	   r
   r6   l   s    r6   zsolarx_unit,solary_unit)Úangler>   c                 C   sp   t j| |dœdd„ƒ}|dt j dt j ƒ\}}t|tƒs>t‚t|tƒsLt‚|jt jks\t‚|jt jkslt‚d S )N©ÚsolarxÚsolaryc                 S   s   | |fS r   r	   r?   r	   r	   r
   Úmyfunc_args|   s    ztest_args3.<locals>.myfunc_argsr   )r   r   ÚarcsecÚ
isinstancer   r   r(   ©Úsolarx_unitÚsolary_unitrB   r@   rA   r	   r	   r
   Ú
test_args3x   s    rH   c                 C   sr   t  ¡ | |dœdd„ƒ}|dt j dt j ƒ\}}t|tƒs@t‚t|tƒsNt‚|jt jks^t‚|jt jksnt‚d S )Nr?   c                 S   s   | |fS r   r	   r?   r	   r	   r
   rB   �   s    z)test_args_noconvert3.<locals>.myfunc_argsr   )r   r   ÚdegZarcminrD   r   r   r(   rE   r	   r	   r
   Útest_args_noconvert3‰   s    rJ   rF   r>   c                 C   sX   t j| dœdd„ƒ}|dt j dƒ\}}t|tƒs6t‚t|tƒsDt‚|jt jksTt‚d S )N©r@   c                 S   s   | |fS r   r	   r?   r	   r	   r
   rB   œ   s    z+test_args_nonquantity3.<locals>.myfunc_argsr   éd   )r   r   rC   rD   r   r   Úintr(   )rF   rB   r@   rA   r	   r	   r
   Útest_args_nonquantity3š   s    rN   )r>   Úenergyc                 C   sz   t jt  ¡ d�| |dœdd„ƒ}|dt j dt j ƒ\}}t|tƒsHt‚t|tƒsVt‚|jt jksft‚|jt jksvt‚d S )N©Zequivalenciesr?   c                 S   s   | |dt j  fS ©Né
   ©r   ÚJr?   r	   r	   r
   rB   ¬   s    z,test_arg_equivalencies3.<locals>.myfunc_argsr   rL   )	r   r   Úmass_energyrC   ÚgramrD   r   r   r(   rE   r	   r	   r
   Útest_arg_equivalencies3¨   s    rW   c              	   C   s\   t j| |dœdd„ƒ}tjt jdt|ƒ› d�d��  |dt j dt j ƒ\}}W 5 Q R X d S )	Nr?   c                 S   s   | |fS r   r	   r?   r	   r	   r
   rB   ½   s    z%test_wrong_unit3.<locals>.myfunc_argsúMArgument 'solary' to function 'myfunc_args' must be in units convertible to 'ú'.r3   r   rL   )r   r   r   r   r    r   rC   r'   rE   r	   r	   r
   Útest_wrong_unit3¹   s    ýrZ   c              	   C   sH   t j| |dœdd„ƒ}tjtdd�� |dt j dƒ\}}W 5 Q R X d S )Nr?   c                 S   s   | |fS r   r	   r?   r	   r	   r
   rB   Ï   s    z'test_not_quantity3.<locals>.myfunc_argsútArgument 'solary' to function 'myfunc_args' has no 'unit' attribute. You should pass in an astropy Quantity instead.r3   r   rL   )r   r   r   r   r5   rC   rE   r	   r	   r
   Útest_not_quantity3Ë   s    ýr\   c                  C   s|   t jt jd�t jt jdœdd„ƒ} | dt j dt j ƒ\}}t|tƒsJt‚t|tƒsXt‚|jt jksht‚|jt jksxt‚d S )NrK   r?   c                 S   s   | |fS r   r	   r?   r	   r	   r
   rB   Þ   s    z,test_decorator_override.<locals>.myfunc_argsr   )r   r   rC   r'   rD   r   r   r(   )rB   r@   rA   r	   r	   r
   Útest_decorator_overrideÝ   s    r]   c                 C   s~   t jdt j f| |dœdd„ƒ}|dt j ddt j d�\}}}t|tƒsNt‚t|tƒs\t‚t|tƒsjt‚|jt jkszt‚d S )Nr   ©r@   Úmykc                 S   s
   | ||fS r   r	   )r@   rA   r_   r	   r	   r
   rB   ï   s    z!test_kwargs3.<locals>.myfunc_argsrL   )r_   ©	r   r   rC   rI   rD   r   r   rM   r(   )rF   rG   rB   r@   rA   r_   r	   r	   r
   Útest_kwargs3ë   s     ra   c                 C   sž   t jdt j df| |dœdd„ƒ}|dt j ddt j dd�\}}}}t|tƒsTt‚t|tƒsbt‚t|tƒspt‚t|tƒs~t‚|jt jksŽt‚|dksšt‚d S )	Nr   iè  r^   c                 S   s   | |||fS r   r	   )r@   rA   r_   Úmyk2r	   r	   r
   rB      s    z(test_unused_kwargs3.<locals>.myfunc_argsrL   rR   )r_   rb   r`   )rF   rG   rB   r@   rA   r_   rb   r	   r	   r
   Útest_unused_kwargs3ü   s     ÿ ÿ$rc   zsolarx_unit,energyc                 C   s„   t jt  ¡ d�dt j f| |dœdd„ƒ}|dt j dt j ƒ\}}t|tƒsRt‚t|tƒs`t‚|j	t jkspt‚|j	t jks€t‚d S )NrP   rR   ©r@   rO   c                 S   s   | |dt j  fS rQ   rS   rd   r	   r	   r
   rB     s    z.test_kwarg_equivalencies3.<locals>.myfunc_argsr   rL   )
r   r   rU   ÚeVrC   rV   rD   r   r   r(   )rF   rO   rB   r@   r	   r	   r
   Útest_kwarg_equivalencies3  s    rf   c              	   C   sh   t jdt j f| |dœdd„ƒ}tjt jdt|ƒ› d�d��" |dt j d	t j d
�\}}W 5 Q R X d S )NrR   r?   c                 S   s   | |fS r   r	   r?   r	   r	   r
   rB   $  s    z+test_kwarg_wrong_unit3.<locals>.myfunc_argsrX   rY   r3   r   rL   ©rA   )	r   r   rI   r   r   r    r   rC   r'   rE   r	   r	   r
   Útest_kwarg_wrong_unit3   s    ýrh   c              	   C   sT   t jdt j f| |dœdd„ƒ}tjtdd�� |dt j dd	�\}}W 5 Q R X d S )
NrR   r?   c                 S   s   | |fS r   r	   r?   r	   r	   r
   rB   6  s    z-test_kwarg_not_quantity3.<locals>.myfunc_argsr[   r3   r   rL   rg   )r   r   rI   r   r   r5   rC   rE   r	   r	   r
   Útest_kwarg_not_quantity32  s    ýri   c                 C   s6   t jdt j f| |dœdd„ƒ}|dt j ƒ\}}d S )NrR   r?   c                 S   s   | |fS r   r	   r?   r	   r	   r
   rB   H  s    z(test_kwarg_default3.<locals>.myfunc_argsr   )r   r   rI   rC   rE   r	   r	   r
   Útest_kwarg_default3D  s    rj   c                  C   s<   t jt jt jdœdd„ƒ} | dt j ƒ}|jt jks8t‚d S )N©r@   r%   c                 S   s   | S r   r	   rK   r	   r	   r
   rB   P  s    z+test_return_annotation.<locals>.myfunc_argsr   )r   r   rC   rI   r(   r   ©rB   r@   r	   r	   r
   Útest_return_annotationO  s    rm   c                  C   s6   t jt jd dœdd„ƒ} | dt j ƒ}|d ks2t‚d S )Nrk   c                 S   s   d S r   r	   rK   r	   r	   r
   rB   Y  s    z0test_return_annotation_none.<locals>.myfunc_argsr   )r   r   rC   r   rl   r	   r	   r
   Útest_return_annotation_noneX  s    rn   c                  C   s6   t jt jtdœdd„ƒ} | dt j ƒ}|dks2t‚d S )Nrk   c                 S   s   dS )Nr   r	   rK   r	   r	   r
   rB   b  s    z3test_return_annotation_notUnit.<locals>.myfunc_argsr   r   )r   r   rC   rM   r   rl   r	   r	   r
   Útest_return_annotation_notUnita  s    ro   c                     sT   ddl m} m‰  G ‡ fdd„d| ƒ}tj|tjd dœdd„ƒ}||jdtj ƒ d S )	Nr   )ÚEnumÚautoc                       s   e Zd Z” ƒ ZdS )z'test_enum_annotation.<locals>.BasicEnumN)r7   r8   r9   ÚAnOptionr	   ©rq   r	   r
   Ú	BasicEnumn  s   rt   )r$   Úbr%   c                 S   s   d S r   r	   )r$   ru   r	   r	   r
   rB   q  s    z)test_enum_annotation.<locals>.myfunc_argsr   )Úenumrp   rq   r   r   rC   rr   )rp   rt   rB   r	   rs   r
   Útest_enum_annotationj  s
    rw   )$Útypingr-   r   Zastropyr   r   Zastropy.unitsr   Zastropy.units._typingr   r   r;   r<   r   r6   ZparametrizerC   rH   rJ   rN   re   rW   rI   rZ   r\   r]   ra   rc   rf   rh   ri   rj   rm   rn   ro   rw   r	   r	   r	   r
   Ú<module>   sˆ   L
 ÿ
 ÿ

 ÿ
 ÿ
 ÿ
 ÿ
 ÿ

 ÿ
 ÿ
 ÿ
			