a
    ߙfbM                     @   s   d Z ddlZddlZddlm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 eed ZG d	d
 d
Zejjejdk dddG dd dZdS )zI
Test Structured units and quantities specifically with the ERFA ufuncs.
    N)assert_array_equal)ufunc)units)assert_quantity_allclose)
minversionz2.0.0.1c                
   @   sd  e Zd Zdd Zdd Zdd Zejje	j
dkdd	d
d Zdd Zdd Zdd Zejjdd	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ejd/ed0e g d1g d2g d3ged0e!j" gd4d5 Z#ejd/ed0e g d1g d2g d3ged0e!j" gd6d7 Z$d8S )9TestPVUfuncsc                 C   sL   t d| _tjg dg dfg dg dfgtjd| _| j| j> | _d S )Nz	AU,AU/day      ?        r
   r
   皙?r
   )r
   r	   r
   )gr
   r
   dtype)	uUnitpv_unitnparray
erfa_ufuncdt_pvpv_valuepv)self r   Nlib/python3.9/site-packages/astropy/units/tests/test_structured_erfa_ufuncs.pysetup_class   s    zTestPVUfuncs.setup_classc                 C   s.   t | j}t|| j t|| jr*J d S )N)r   Zcpvr   r   r   Zmay_share_memory)r   Zpv_copyr   r   r   test_cpv   s    zTestPVUfuncs.test_cpvc                 C   sR   t | jd }t|d | jd  t|d t| jjd ttj	tj
 >  d S )Npv   )r   p2pvr   r   r   zerosshapefloatr   ms)r   r!   r   r   r   	test_p2pv!   s    zTestPVUfuncs.test_p2pv2.0.0z6erfa bug; https://github.com/liberfa/pyerfa/issues/70)reasonc                 C   st   t | j| j> }tj| jd |d}||u s2J t|d | jd  t|d t | jj	d t
tjtj >  d S )Nr   outr   r   )r   
zeros_liker   r   r   r!   r   r   r"   r#   r$   r   r%   r&   )r   r,   r!   r   r   r   test_p2pv_inplace&   s
    zTestPVUfuncs.test_p2pv_inplacec                 C   sV   t | j}t|| jd  t|}t j| j|d}||u sBJ t|| jd  d S )Nr   r+   )r   Zpv2pr   r   r   r-   )r   r   r,   Zp2r   r   r   	test_pv2p0   s    
zTestPVUfuncs.test_pv2pc                 C   s  t | j\}}}}}}|jtjks(J t|ddgtj  |jtjksLJ t|j	t
| jj |jtjksrJ t|j	t
| jj |jtjtj ksJ t|j	t
dgd  |jtjtj ksJ t|j	t
| jj |jtjtj ksJ t|j	t
| jj d S )Nr   Z   r      )r   pv2sr   unitr   radianr   degr   valuer   r"   r#   AUonesdayr   )r   thetaphirtdpdrdr   r   r   	test_pv2s8   s    zTestPVUfuncs.test_pv2sc                 C   s  | j td> }t|\}}}}}}|jtjks6J t|ddgtj  |jtjksZJ t	|j
t|j |jtjks~J t	|j
t|j |jtjtj ksJ t	|j
tdgd  |jtjtj ksJ t	|j
t|j |jtjtj ksJ t	|j
t|j d S )NPa,Pa/mr   r0   r   r1   )r   r   r   r   r2   r3   r4   r   r5   r   r6   r   r"   r#   Par8   r%   r   )r   r   r:   r;   r<   r=   r>   r?   r   r   r   test_pv2s_non_standard_unitsG   s    z)TestPVUfuncs.test_pv2s_non_standard_unitszerfa ufuncs cannot take different names; it is not yet clear whether this is changeable; see https://github.com/liberfa/pyerfa/issues/77c           	      C   s,  t j| jddgd}|td> }t|\}}}}}}|jtjksHJ t	|ddgtj
  |jtjkslJ t|jt |j |jtjksJ t|jt |j |jtjtj ksJ t|jt dgd  |jtjtj ksJ t|jt |j |jtjtj ksJ t|jt |j d S )	N)posf8)ZvelrE   r   rA   r   r0   r   r1   )r   r   r   r   r   r   r2   r3   r4   r   r5   r   r6   r"   r#   rB   r8   r%   )	r   r   r   r:   r;   r<   r=   r>   r?   r   r   r   &test_pv2s_non_standard_names_and_unitsW   s    z3TestPVUfuncs.test_pv2s_non_standard_names_and_unitsc                 C   s   t | j\}}}}}}t |tj||tj|tjtj ||tjtj	 }|j
tjdddkspJ t|d | jd dtj dd t|d | jd dtj tj	 dd d S )	Nm, m/sr   r   namesr      r   atolrtolr   )r   r2   r   Zs2pvtor   r5   r%   r9   r&   r3   StructuredUnitr   Zmm)r   r:   r;   r<   r=   r>   r?   r   r   r   r   	test_s2pvk   s    " zTestPVUfuncs.test_s2pvc                 C   s*  t | j\}}}}}}}t|tj| jjdd |jtj	ksBJ t
|ddgtj  |jtj	ksfJ t|jt| jj |jtj	tj ksJ t
|ddgtj	 tj  |jtj	tj ksJ t|jt| jj |jtjksJ t
|dtj	  |jtjtj ksJ t|jt| jj d S )Ni4r   r   r0   r   rK   )r   pvstarr   r   r   r"   r#   r3   r   r4   r   r5   r6   yearr9   arcseckmr&   )r   radecpmrpmdpxrvstatr   r   r   test_pvstart   s    zTestPVUfuncs.test_pvstarc           	      C   s   t | j\}}}}}}}t |tj|tj||||tjtj \}}t	|t
j| jjdd |j| jjkszJ t|d | jd dtj dd t|d | jd dtj tj dd d S )NrR   r   r   rK   r   rL   r   )r   rS   r   ZstarpvrO   r   r5   r%   r&   r   r   r"   r#   r3   r   )	r   rW   rX   rY   rZ   r[   r\   r]   r   r   r   r   test_starpv   s     zTestPVUfuncs.test_starpvc              
   C   s   t ddgtj dtj dtj dtj dtj dtj dtj }|jtjdddks\J |jd tjtj ksvJ t	|d	 g d
g dgtj dtj d t	|d g dg dgtj tj dtj tj d d S )Nr0   r   r
   d   rG   rH   rI   r   r   )ir   r   )r   iN  r   r1   rM   )r         r   )rb   r   r   皙?)
r   Zpvtobr   r5   rV   r3   rP   r%   r&   r   )r   r   r   r   r   
test_pvtob   s      "zTestPVUfuncs.test_pvtobc              	   C   s>  t | j| j}|d j| jjd d ks.J |d j| jjd | jjd  ksTJ t|d td| jd | jd  t|d dtd| jd | jd   tt	g dg dft j
d	}t | j|}|d j| jjd ksJ |d j| jjd ksJ t|d jt| jj t|d jt| jj d S )
NZpdpr   r1   Zpdvr   z...i,...i->...r   r   rK   r   r   r   1,1/s)r   pvdpvr   r3   r   r   einsumr   Quantityr   r   r6   r"   r#   )r   rh   z_axisZpvdpv2r   r   r   
test_pvdpv   s$    &zTestPVUfuncs.test_pvdpvc                 C   s>  t | j| j}|d j| jjd d ks.J |d j| jjd | jjd  ksTJ t|d jt| jd j t|d jt| jd j t	
tg dg dft jd}t | j|}|d j| jjd ksJ |d j| jjd ksJ t|d g dg dgt	j  t|d g d	g d
gt	j t	j  d S )Nr   r1   r   re   rf   rg   )r
   r
   r   )r   r
   r
   r   )r   pvxpvr   r3   r   r6   r   r"   r#   r   rj   r   r   r7   r9   )r   rn   rk   Zpvxpv2r   r   r   
test_pvxpv   s0    &zTestPVUfuncs.test_pvxpvc                 C   sx   t | j\}}|j| jjd ks&J |j| jjd ks<J t|tjj| jd dd t|tjj| jd dd d S )Nr   r   rm   )Zaxis)r   Zpvmr   r3   r   r   ZlinalgZnorm)r   ZpmZvmr   r   r   test_pvm   s
    zTestPVUfuncs.test_pvmc                 C   sV   t | j| j}|j| jjks"J t|d d| jd   t|d d| jd   d S )Nr   r   r   )r   pvmpvr   r3   r   )r   rq   r   r   r   
test_pvmpv   s    zTestPVUfuncs.test_pvmpvc                 C   sV   t | j| j}|j| jjks"J t|d d| jd   t|d d| jd   d S )Nr   r1   r   )r   pvppvr   r3   r   )r   rs   r   r   r   
test_pvppv   s    zTestPVUfuncs.test_pvppvc                 C   sf   t dtj | j}|j| jjks&J t|d | jd dtj | jd    t|d | jd  d S NiQ r   rK   r   )r   pvur   r&   r   r3   r   r9   )r   rv   r   r   r   test_pvu   s    (zTestPVUfuncs.test_pvuc                 C   sR   t dtj | j}|j| jjd ks*J t|| jd dtj | jd    d S ru   )r   pvupr   r&   r   r3   r   r9   )r   rx   r   r   r   	test_pvup   s    zTestPVUfuncs.test_pvupc                 C   s   t d| j}|j| jjks J t|d | jd d  t|d | jd d  t dtj | j}|jtjdddks|J t|d | jd d	 tj  t|d | jd d	 tj  d S )
N      $@r   
   r   g      >@zAU s,AU s/drH   rI      )r   sxpvr   r3   r   r   r&   rP   )r   r}   Zsxpv2r   r   r   	test_sxpv   s    zTestPVUfuncs.test_sxpvc                 C   sd   t ddtj | j}|jtjdddks.J t|d | jd d  t|d | jd tj  d S )	Nrz   rK   z	AU,AU s/drH   rI   r   r{   r   )r   s2xpvr   r&   r   r3   rP   r   )r   r   r   r   r   
test_s2xpv   s    zTestPVUfuncs.test_s2xpvr<   r    )r
   g      r
   r   )r
   r
   r	   c                 C   sN   t || j}t|d td|| jd  t|d td|| jd  d S Nr   z...ij,...j->...ir   )r   Zrxpvr   r   r   ri   r   r<   resultr   r   r   	test_rxpv   s    

zTestPVUfuncs.test_rxpvc                 C   sR   t || j}t|d td|j| jd  t|d td|j| jd  d S r   )r   Ztrxpvr   r   r   ri   Tr   r   r   r   
test_trxpv   s    zTestPVUfuncs.test_trxpvN)%__name__
__module____qualname__r   r   r'   pytestmarkxfailerfa__version__r.   r/   r@   rC   rF   rQ   r^   r_   rd   rl   ro   rp   rr   rt   rw   ry   r~   r   Zparametrizer   Zeyer   r   r&   r   r   r   r   r   r   r      sZ   

	



r   z1.7.3.1z dt_eraLDBODY incorrectly definedclass)r*   Zscopec                   @   s   e Z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ejjejdk dddd ZdS )TestEraStructUfuncsc                 C   s  t jddg dg dffddg dg dffd	d
g dg dffgtjd}td|j}||> | _g dtj> | _	t g d| _
tdd\}}td|j| _|| j> | _dtj | _dtj | _dtj tj | _dtj tj | _dtj | _dtj tj | _d S )NgM2?gLa㧝=)gfĢu=gK&H2pgyj`qY)g1b!+i?g2"*pgdƵ]gCEO?gA:)>)g.]?gq	q݋@g9N?)g'kP~g%T?gMG?r	   gTqs*>)g B&VGgzbg'WXQ)gO\d>g@>4g=7哾r   zMsun,radian,(AU,AU/day))gzg,g+3˿gdy})g7:!Slg{3yg1l˿g   2BAg\#?z2yr,AU,1,AU,1,1,1,rad,rad,rad,rad,1,1,1,rad,rad,radgGz@gʡE?gh㈵>gh㈵>rc   g     K@)r   r   r   Zdt_eraLDBODYr   rP   r   ldbodyr7   obscZapci13astrom_unitastromradrcdcrT   prr>   rU   r[   rV   r&   r\   )r   r   Zldbody_unitr   Zeor   r   r   r   	  s:    



zTestEraStructUfuncs.setup_classc                 C   s2   t | j| j| j}t|g dtj ddd d S NgYTTlg/yg2˿-q=r   rL   )r   ldnr   r   r   r   r   oner   snr   r   r   test_ldn_basic%  s    
z"TestEraStructUfuncs.test_ldn_basicc                 C   sF   | j d}| jd}t||| j}t|g dtj ddd d S )Nzkg,rad,(m,m/s)r%   r   r   r   rL   )	r   rO   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   test_ldn_in_other_unit,  s    
z*TestEraStructUfuncs.test_ldn_in_other_unitc                 C   s6   t | jj| jj| j}t|g dtj ddd d S r   )	r   r   r   sir   r   r   r   r   r   r   r   r   test_ldn_in_SI5  s    
z"TestEraStructUfuncs.test_ldn_in_SIc                 C   s   | j d }tdtj | j }|d jtjks2J t|d |dtj   | j d}tdtj |}|d jtj	ks|J |d jtjksJ |jdksJ t|d |dtj   d S )Nalongr{   eralz1s,km,1,km,1,1,1,deg,deg,deg,deg,1,1,1,rad,rad,radz1s,km,1,km,1,1,1,deg,deg,deg,deg,1,1,1,deg,rad,rad)
r   r   Zaperr   r5   r3   r4   r   rO   r   )r   r   Zastrom2Zastrom3Zastrom4r   r   r   	test_aper<  s    
zTestEraStructUfuncs.test_aperc              	   C   sL   t | j| j| j| j| j| j| j\}}t	|dt
j  t	|dt
j  d S )NS 8T@	>"?)r   atciqr   r   r   r>   r[   r\   r   r   r   r   r   ridir   r   r   test_atciq_basicH  s
    z$TestEraStructUfuncs.test_atciq_basicc                 C   s   | j d}t| jtj| jtj| jtj	tj
 | jtj	tj
 | j| jtjtj |\}}t|dtj dtj d t|dtj dtj d d S )Nz1s,km,1,km,1,1,1,deg,deg,deg,deg,1,1,1,deg,deg,degr   r   ra   r   )r   rO   r   r   r   r   r5   r   r   masyrr>   r[   r\   r%   r&   r   r   )r   r   r   r   r   r   r   test_atciq_in_other_unitN  s    $z,TestEraStructUfuncs.test_atciq_in_other_unitc                 C   s   t | jtj| jtj| jtjtj	 | j
tjtj	 | j| jtjtj | jj| jj\}}t|dtj dtj d t|dtj dtj d d S )Ng؇rT@r   ra   g82O"?)r   Zatciqnr   rO   r   r5   r   r   r   r   r>   r[   r\   r%   r&   r   r   r   r   r   r   r   r   r   test_atciqnV  s    $zTestEraStructUfuncs.test_atciqnc                 C   sb   t | jtj| jtj| jj\}}t	|dtj
 dtj
 d t	|dtj
 dtj
 d d S )NgD@r   ra   gѣҼ ?)r   Zatciqzr   rO   r   r5   r   r   r   r   r   r   r   r   r   test_atciqz^  s
    zTestEraStructUfuncs.test_atciqzc                 C   sr   dt j }dt j }t|t j|t j| jj\}}t|dt j dt j d t|dt j dt j d d S )NU 8T@V="?gdV@r   ra   gN,gG?)	r   r   r   ZaticqrO   r5   r   r   r   r   r   r   r   r   r   r   r   
test_aticqd  s
    

&zTestEraStructUfuncs.test_aticqc                 C   sx   dt j }dt j }t|t j|t j| jj| jj\}}t	|dt j dt j d t	|dt j dt j d d S )NgD@ggҼ ?gA@r   ra   gdOE?)
r   r   r   ZaticqnrO   r5   r   r   r   r   r   r   r   r   test_aticqnk  s    

zTestEraStructUfuncs.test_aticqnc                 C   s`  t ddddddddd	d
dd\}}|| j> }dtj }dtj }t |tj|tj|j\}}}}}	t	|dtj dtj d t	|dtj dtj d t	|dtj dtj d t	|dtj dtj d t	|	dtj dtj d dtj }
dtj }t 
d|
tj|tj|j\}}t	|dtj dtj d t	|dtj dtj d d S )Ng   @BAgQ!?gx@?oQ́     d@aGd>#Y>g     ؆@g)@gzG?g?r   r   g 0?r   ra   gl-?g)g9+"h?gJA@gDqA@gG"h?Rg_}S8T@gڔ>"?)r   Zapio13r   r   r   ZatioqrO   r5   r   r   Zatoiq)r   r   _r   r   ZaobZzobZhobZdobZrobZob1Zob2Zri2Zdi2r   r   r   test_atioq_atoiqs  s*    





&z$TestEraStructUfuncs.test_atioq_atoiqr(   zcomparisons changedr)   c                 C   s   dt j }dt j }dt j }dt j }dt j }dt j }dt j }dt j }d	t j }	t|t j||||t j||||		}
|
j| j	ksJ d
D ]0\}}t
|
| || j	|  dd| j	|  d qd S )Ngvǒ5gJ)	@r   r   r   r   r   @: #~f*??)	)r   gb)Zxplgc>)Zyplg¬b>)ZsphigeW5)ZcphigVH?)ZdiurabgTh;>)r   g+@)refar   )refbr   r   r   )rN   rM   )r   r   r%   r   ZapiorO   r5   rV   r3   r   r   )r   Zspr:   Zelongr;   ZhmZxpZypr   r   r   namer6   r   r   r   	test_apio  s"    









zTestEraStructUfuncs.test_apioN)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     s   	r   )__doc__r   Znumpyr   Znumpy.testingr   r   r   r   Zastropyr   r   Zastropy.tests.helperr   Zastropy.utils.introspectionr   ZERFA_LE_2_0_0r   r   r   r   r   r   r   r   r   <module>   s    s