
    IR-ex                        d Z ddlZddlZddlmc mZ ddlZddl	m
Z
 ddlmZ ddlmZmZ ddlmZmZmZmZ ddlmZ ddlmZ dd	lmZ  G d
 d          Z G d de          Z G d de          Z G d de          Z G d de          Z  G d de          Z! G d de          Z" G d de          Z# G d de          Z$ G d de          Z% G d d          Z& G d  d!e          Z'dS )"z'
Test Structured units and quantities.
    N)assert_array_equal)units)check_pickling_recoverypickle_protocol)QuantityStructuredUnitUnitUnitBase)_structured_unit_like_dtype)NUMPY_LT_1_21_1)Maskedc                   $    e Zd Zed             ZdS )StructuredTestBasec                    t          j        ddg          | _        t          j        d| j        fdg          | _        t          j        | _        t          j        t          j        z  | _        t          j        | _	        t          j        ddg          | _        t          j        d| j        fdg          | _        t          j
        g d| j                  | _        t          j
        g d| j                  | _        d S )Npf8vr   pvtr   ))      ?g      ?)       @      ?)      @g      ?)))g      @g      @g        ))      @r   r   ))g      @g      @r   )npdtypepv_dtype
pv_t_dtypeukmp_unitsv_unitt_unitarrayr   pv_tselfs    Clib/python3.11/site-packages/astropy/units/tests/test_structured.pysetup_classzStructuredTestBase.setup_class   s    +{!;<<(T4=$9;#GHHddQSjc+{!;<<(T4=$9;#GHH(AAA4=QQH  
 O
 
			    N)__name__
__module____qualname__classmethodr-    r.   r,   r   r      s-        
 
 [
 
 
r.   r   c                   .     e Zd Ze fd            Z xZS )StructuredTestBaseWithUnitsc                     t                                                       t          | j        | j        fd          | _        t          | j        | j        fd          | _        d S )Nr   r   r   r   )superr-   r   r$   r&   pv_unitr'   	pv_t_unitr+   	__class__s    r,   r-   z'StructuredTestBaseWithUnits.setup_class*   sQ    %t{DK&@*MM't{(C[QQr.   )r/   r0   r1   r2   r-   __classcell__r=   s   @r,   r5   r5   )   sK        R R R R [R R R R Rr.   r5   c                       e Zd Zd Zd Zd Zej                            ddddgfdgdg d	fd
gddddggfdgddgddgdddgfdgg          d             Z	d Z
d Zd Zd Zd Zd Zd Zd Zd ZdS )TestStructuredUnitBasicsc                 d   t          | j        | j        fd          }|d         | j        u sJ |d         | j        u sJ t          || j        fd          }t	          |d         t                     sJ |d         d         | j        u sJ |d         d         | j        u sJ |d         | j        u sJ |d         |k    sJ t          dd          }t	          |d         t
                    sJ t	          |d         t
                    sJ t          dd          }|d         t          j        k    sJ |d         t          j        t          j        z  k    sJ t          d          }|j	        d	k    sJ |d
         t          j        k    sJ |d         t          j        t          j        z  k    sJ d S )Nr7   r   r   r8   r   r   AUAU/day
AU, AU/day)f0f1rG   rH   )
r   r$   r&   r'   
isinstancer
   r"   rD   dayfield_names)r+   susu2su3su4su5s         r,   test_initialization_and_keyingz7TestStructuredUnitBasics.test_initialization_and_keying2   s   T[$+6
CC#w$+%%%%#w$+%%%%b$+.<<#d)^444444y~,,,,4y~,,,,3x4;&&&&4yB-z::#c(H-----#c(H-----\:663x143x14!%<''''-..,....4yAD    4yAD15L((((((r.   c                 J   t          | j        | j        f| j        fd          }t	          |d         t                     sJ |d         d         | j        u sJ |d         d         | j        u sJ |d         | j        u sJ t          | j        | j        f| j        fddgdf          }t	          |d         t                     sJ |d         d         | j        u sJ |d         d         | j        u sJ |d         | j        u sJ t          dddgdf          }t	          |d         t                     sJ |d         d         t
          j        k    sJ |d         d         t
          j        t
          j        z  k    sJ |d         t
          j        k    sJ t          d	d          }t	          |d         t                     sJ |d         d         t
          j        k    sJ |d         d         t
          j        t
          j        z  k    sJ |d         t
          j        k    sJ d S )
N)r7   r   r   r   r   r   p_vr7   )rC   yr(AU, AU/day), yr)	r   r$   r&   r'   rI   r"   rD   rJ   rT   )r+   rL   rM   rN   rO   s        r,   test_recursive_initializationz6TestStructuredUnitBasics.test_recursive_initializationG   s2   k4;'57H
 
 "T(N33333$x}++++$x}++++#w$+%%%%k4;'5
8KS7Q
 
 #e*n555555z#$+----5z#$+----3x4;&&&&5
8KS7QRR#e*n555555z#!$&&&&5z#!$,....3x14/1BCC#d)^444444y~%%%%4y~----3x14r.   c                     t          dd          }|j        ddddddd	d
gfgfgdfk    sJ t          j        ddddddd	ddgfgfgdffdg          }t          d|          }|j        |j        k    sJ ||k    sJ d S )Nz!(yr,(AU,AU/day,(km,(day,day))),m))r   )r   r   )hd1d2lr   pvhd1d2r   r   hd1d2rX   d1d2rY   r\   r   r   r   )rX   r   )rZ   r   )r[   r   )   r`   )r\   r   )r   rK   r   r   )r+   rL   dtrM   s       r,   %test_extreme_recursive_initializationz>TestStructuredUnitBasics.test_extreme_recursive_initializationa   s    /7
 
 ~)"$%&'( "
 
 
 
 
 X[7,7&;G:V:X ,.+/  	 	 	 @"EE".0000byyyyyyr.   znames, invalidr   r   r   z
['p', 'v'])r   r   r   z['pv', 'p', 'v']r   z['pv', ['p', 'v'])r   r3   z())r   )r   NNone)r    z''c                     t          j        t                    5 }t          d|           d d d            n# 1 swxY w Y   d| t	          |          v sJ d S )Nzyr,(AU,AU/day)zinvalid entry )pytestraises
ValueErrorr   str)r+   namesinvalidexcs       r,   -test_initialization_names_invalid_list_errorszFTestStructuredUnitBasics.test_initialization_names_invalid_list_errors   s     ]:&& 	4#+U333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4)))SXX555555s   7;;c                 d    t          | j        | j        fd          }t          |          |u sJ d S )Nr7   )r   r$   r&   r	   r+   rL   s     r,   test_looks_like_unitz-TestStructuredUnitBasics.test_looks_like_unit   s1    T[$+6
CCBxx2~~~~~~r.   c                    t          d| j                  }t          |d         t                    sJ t          |d         t                    sJ |d         t          j        k    sJ |d         t          j        t          j        z  k    sJ t          d| j                  }t          |d         t                     sJ t          |d         d         t                    sJ t          |d         t                    sJ |d         d         t          j        t          j	        z  k    sJ t          d| j                  }t          |d         t                     sJ t          |d         d         t                    sJ t          |d         t                    sJ |d         d         t          j        t          j	        z  k    sJ d S )NrD   AU/dr   r   r#   zkm/srT   r   r   (km, km/s), yr)
r   r    rI   r
   r"   rD   rJ   r!   r#   r%   ro   s     r,    test_initialize_with_float_dtypez9TestStructuredUnitBasics.test_initialize_with_float_dtype   s   NDM::"S'8,,,,,"S'8,,,,,#w!$#w!$,&&&&2DODD"T(N33333"T(3-22222"S'8,,,,,$x}qs
****,do>>"T(N33333"T(3-22222"S'8,,,,,$x}qs
******r.   c                     t          dd          }t          d|          }|j        dk    sJ |d         t          j        k    sJ |d         t          j        t          j        z  k    sJ d S )Nrr   r7   rj   ru   r   r   )r   rK   r"   r#   r%   )r+   rL   rM   s      r,   .test_initialize_with_structured_unit_for_nameszGTestStructuredUnitBasics.test_initialize_with_structured_unit_for_names   ss    N*===^2666*,,,,3x143x14!#:%%%%%%r.   c                 t   t          dd          }t          |t                     sJ t          |d         t                    sJ |d         t          j        k    sJ t          d          }t          |t                     sJ t          |d         t                    sJ |d         t          j        k    sJ d S )NrD   r   rG   )r   rI   r
   r"   rD   ro   s     r,   test_initialize_single_fieldz5TestStructuredUnitBasics.test_initialize_single_field   s    D#&&"n-----"S'8,,,,,#w!$D!!"n-----"T(H-----$x14r.   c                    t          d| j                  }|t          d| j                  k    sJ |t          d| j                  k    sJ |t          d          k    sJ |t          dd          k    sJ |t          d          k    sJ d S )Nrr   )mrs   qwry   )r~   zm/s)r   r    ro   s     r,   test_equalityz&TestStructuredUnitBasics.test_equality   s    NDM::^NDMBBBBBB^M4=AAAAAA^N333333^N*EEEEEEE^L11111111r.   c                    t          d          }t          |t                    sJ t          |d         t                    sJ t          |d         t                    sJ |d         t          j        k    sJ |d         t          j        t          j        z  k    sJ t          d          }t          |t                    sJ |t          d          k    sJ t          d          }t          |t                    sJ ||k    sJ t          d          }t          |t                    sJ |t          d          k    sJ t          d	          }t          |t                    sJ |t          t          j        f          k    sJ t          d
          }t          |t                    sJ |t          t          j        t          j	        ff          k    sJ t          d          }|t          t          j
        t          t          j        dz  dz            t          j        t          j        t          j        z  ff          k    sJ d S )NzAU, AU/drG   rH   zAU, AU/d, yr)rD   rs   rT   z(AU, AU/d, yr)rv   rt   zkm,z(m,s),zMsun, 0.5rad^2, (au, au/day)   )r	   rI   r   r
   r"   rD   rJ   r#   r~   r%   Msunrad)r+   rL   rM   su2arN   rO   rP   ldbody_units           r,   test_parsingz%TestStructuredUnitBasics.test_parsing   s#   *"n-----"T(H-----"T(H-----$x14$x14!%<''''>""#~.....n%9::::::$%%$/////s{{{{#$$#~.....n%;<<<<<<5kk#~.....nadW------8nn#~.....nqsACj]3333339::nVT!%(Q,''!$qu)=>
 
 
 
 
 
 
 
r.   c                     t          t          j        t          j        t          j        z  f          }d}|                    d          |k    sJ d}|                    d          |k    sJ d S )Nz&$(\mathrm{km}, \mathrm{\frac{km}{s}})$latex)formatz$$(\mathrm{km}, \mathrm{km\,s^{-1}})$latex_inline)r   r"   r#   r%   	to_string)r+   rL   	latex_strs      r,   test_to_stringz'TestStructuredUnitBasics.test_to_string   sl    QT14!#:.//=	||7|++y8888;	||>|22i??????r.   c                     t          t          j        t          j        t          j        z  ft          j        f          }t          |          dk    sJ t          t          |                    |k    sJ d S )Nz((km, km / s), yr))r   r"   r#   r%   rT   ri   r	   ro   s     r,   test_strz!TestStructuredUnitBasics.test_str   s`    adAD13J/6772ww.....CGG}}""""""r.   c                     t          t          j        t          j        t          j        z  ft          j        f          }t          |          dk    sJ t          t          |                    |k    sJ d S )NzUnit("((km, km / s), yr)"))r   r"   r#   r%   rT   reprevalro   s     r,   	test_reprz"TestStructuredUnitBasics.test_repr   s`    adAD13J/677Bxx77777DHH~~######r.   N)r/   r0   r1   rQ   rV   rb   rf   markparametrizerm   rp   rw   rz   r|   r   r   r   r   r   r3   r.   r,   rA   rA   1   sb       ) ) )*     4  < [C:-###$&89D3*%&(;<(D)$%t,	

 
6 6
 
6
  + + +"& & &     2 2 2
 
 
6@ @ @# # #
$ $ $ $ $r.   rA   c                   d    e Zd Zd Zd Zej                            ed          d             Z	dS )TestStructuredUnitsCopyPicklec                     t          j         | j                  }|| j        usJ || j        k    sJ |j        | j        j        u sJ d S N)copyr;   _unitsr+   su_copys     r,   	test_copyz'TestStructuredUnitsCopyPickle.test_copy   sW    )DN++dn,,,,$.((((~!6666666r.   c                     t          j        | j                  }|| j        usJ || j        k    sJ |j        | j        j        usJ d S r   )r   deepcopyr;   r   r   s     r,   test_deepcopyz+TestStructuredUnitsCopyPickle.test_deepcopy   sW    -//dn,,,,$.((((~T^%:::::::r.   z$https://stackoverflow.com/q/69571643)reasonc                 0    t          | j        |           d S r   )r   r;   )r+   r   s     r,   test_picklez)TestStructuredUnitsCopyPickle.test_pickle   s    @@@@@r.   N)
r/   r0   r1   r   r   rf   r   skipifr   r   r3   r.   r,   r   r      sj        7 7 7; ; ; [0VWWA A XWA A Ar.   r   c                       e Zd Zd Zd Zd Zd Zej        	                    de
eg          d             Zd Zd Zd	 Zd
S )TestStructuredUnitAsMappingc                 n    t          | j                  dk    sJ t          | j                  dk    sJ d S )Nr   )lenr:   r;   r*   s    r,   test_lenz$TestStructuredUnitAsMapping.test_len   s>    4<  A%%%%4>""a''''''r.   c                 f    t          | j                                                  }|ddgk    sJ d S )Nr   r   )listr;   keys)r+   slvs     r,   	test_keysz%TestStructuredUnitAsMapping.test_keys  s8    4>&&(())tSk!!!!!!r.   c                 `    | j                                         }|| j        | j        fk    sJ d S r   )r;   valuesr:   r'   )r+   r   s     r,   test_valuesz'TestStructuredUnitAsMapping.test_values  s5    &&(($,4444444r.   c                 d    | j         j        }t          |t                    sJ |ddgdfk    sJ d S )Nr   r7   r   )r;   rK   rI   tuple)r+   rK   s     r,   test_field_namesz,TestStructuredUnitAsMapping.test_field_names
  sC    n0+u-----j137777777r.   iterablec                 p     || j                   }t          ||          sJ | |ddg          k    sJ d S )Nr   r   )r:   rI   )r+   r   sls      r,   test_as_iterablez,TestStructuredUnitAsMapping.test_as_iterable  sN    Xdl##"h'''''XXsCj))))))))r.   c                 X    t          | j                  }|| j        | j        dk    sJ d S )Nr8   )dictr;   r:   r'   )r+   sds     r,   test_as_dictz(TestStructuredUnitAsMapping.test_as_dict  s4    $.!!DLt{;;;;;;;;r.   c                 H    d| j         v sJ d| j         v sJ d| j         vsJ d S )Nr   r   r   )r:   r*   s    r,   test_containsz)TestStructuredUnitAsMapping.test_contains  sA    dl""""dl""""$,&&&&&&r.   c                     t          j        t          d          5  t          j        | j        d<   d d d            d S # 1 swxY w Y   d S )Nzitem assignmentmatchr   )rf   rg   	TypeErrorr"   Gyrr;   r*   s    r,   test_setitem_failsz.TestStructuredUnitAsMapping.test_setitem_fails  s    ]9,=>>> 	( 	("#%DN3	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   >AAN)r/   r0   r1   r   r   r   r   rf   r   r   r   setr   r   r   r   r3   r.   r,   r   r      s        ( ( (" " "5 5 58 8 8
 [Z$55* * 65*
< < <' ' '
( ( ( ( (r.   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestStructuredUnitMethodsc                    | j                                         }t          |          dk    sJ |j        j        dk    sJ | j         d                                         }| j         d                                         }t          j        ||fddg          d         }||k    sJ |t          j        ||fd          d         k    sJ |d         |k    sJ |d         |k    sJ |d	         |k    sJ |d
         |k    sJ | j                                        }| j                                        }|t          j        ||fd          d         k    sJ |d         |k    sJ |d         |k    sJ |d         d
         |k    sJ d S )Nr   r7   r   r   )r   O)r   r   r3   O,Or      r   r   )	r:   _get_physical_type_idr   r   rj   r   r(   r;   r'   )r+   pv_ptidp_ptidv_ptidexpected	pv_t_ptidt_ptids          r,   test_physical_type_idz/TestStructuredUnitMethods.test_physical_type_id$  s   ,44667||q    }"j0000c"88::c"88::8VV,z:.FGGK("""""(FF#3U;;B?????s|v%%%%s|v%%%%qzV####qzV####N88::	2244BHgv%6>>rBBBBB'))))~''''q!V++++++r.   c                     | j         j        }|t          j        dd          d         k    sJ | j        j        }|t          j        |dfd          d         k    sJ d S )N)lengthspeedr   r3   time)r:   physical_typer   r(   r;   )r+   pv_ptpv_t_pts      r,   test_physical_typez,TestStructuredUnitMethods.test_physical_type<  se    *!4e<<R@@@@@.."(E6?E::2>>>>>>>r.   c                 j    | j         j        }|| j         k    sJ |d         d         j        dk    sJ d S Nr   r   i  )r;   siscale)r+   pv_t_sis     r,   test_siz!TestStructuredUnitMethods.test_siC  sB    .#$.((((t}S!'4//////r.   c                 j    | j         j        }|| j         k    sJ |d         d         j        dk    sJ d S )Nr   r   i )r;   cgsr   )r+   pv_t_cgss     r,   test_cgsz"TestStructuredUnitMethods.test_cgsH  sB    >%4>))))~c"(F222222r.   c                 j    | j                                         }|d         d         j        dk    sJ d S r   )r;   	decomposer   )r+   pv_t_decomposes     r,   test_decomposez(TestStructuredUnitMethods.test_decomposeM  s9    1133d#C(.$666666r.   c                    | j                             d          sJ | j                             d          rJ | j                             d          rJ t          dd          }|j        | j         j        k    sJ | j                             |          sJ t          j                            | j                   rJ d S )NrC   r~   )rD   rD   zm,m/sr   ry   )r:   is_equivalentr   rK   r"   r~   )r+   pv_alts     r,   test_is_equivalentz,TestStructuredUnitMethods.test_is_equivalentQ  s    |))*:;;;;;<--c22222<--l;;;;;z:::!T\%=====|))&111113$$T\2222222r.   c                    | j                             d| j                  }t          |t          j                  sJ |j        | j        j        k    sJ t	          j        |d         t          j	        z  | j        d         | j
        z  k              sJ t	          j        |d         t          j	        z  t          j        z  | j        d         | j        z  k              sJ t          | j
        | j        fd          }|                    d| j                  }|j        j        dk    sJ |j        | j        j        k    sJ | j                            d| j                  }t          |t          j                  sJ |j        | j        j        k    sJ t	          j        |d         d         t          j	        z  | j        d         d         | j
        z  k              sJ t	          j        |d         d         t          j	        z  t          j        z  | j        d         d         | j        z  k              sJ t	          j        |d	         t          j        z  | j        d	         | j        z  k              sJ | j                            dd
          }|d         d         | j
                            dd          k    sJ |d         d         | j                            dd          k    sJ |d	         | j                            dd          k    sJ | j                            dd
dg          }t	          j        |d         d         | j
                            dddg          k              sJ t	          j        |d         d         | j                            dddg          k              sJ t	          j        |d	         | j                            dddg          k              sJ d S )NrC   r   r   )positionvelocity)Mmzmm/sr7   )rC   Myrr   r   ))r   皙?      $@rD   r   rE   r   r   r   ))r   皙?      4@r   r   r   )r:   tor   rI   r   ndarrayr   allr"   rD   r$   rJ   r&   r   rj   r;   r)   r   r'   )r+   pv1rM   pv2pv_t1pv_t2pv_t3s          r,   test_conversionz)TestStructuredUnitMethods.test_conversion\  sx   loo.88#rz*****yDGM))))vc#ho)CCDDDDDvc#ho-1KKLLLLLdk4;79QRRff^TW--y*,,,,yDGM))))!!";TYGG%,,,,,{dio----veDk#&-41E1SSTTTTTv$Kqt#ae+tys/Cdk/QQ
 
 	
 	
 	
 veCj15(DIcNT[,HHIIIII!!";=OPPT{34;>>$#<#<<<<<T{34;>>(C#@#@@@@@SzT[^^E4888888!!%(:<N'O
 
 veDk#&$+..Sz*J*JJKKKKKveDk#&$+..C:*N*NNOOOOOveCjDKNN54,$G$GGHHHHHHHr.   N)
r/   r0   r1   r   r   r   r   r   r   r  r3   r.   r,   r   r   #  s        , , ,0? ? ?0 0 0
3 3 3
7 7 7	3 	3 	3I I I I Ir.   r   c                       e Zd Zd Zd ZdS )TestStructuredUnitArithmaticc                 n   | j         t          j        z  }t          |t                    sJ |j        dk    sJ |d         | j        t          j        z  k    sJ |d         | j        t          j        z  k    sJ t          j        | j         z  }||k    sJ | j         dz  }||k    sJ d| j         z  }||k    sJ t          j
        t                    5  | j         | j         z   d d d            n# 1 swxY w Y   t          j
        t                    5  d| j         z   d d d            d S # 1 swxY w Y   d S )Nr7   r   r   aurD   zs,s)r:   r"   r  rI   r   rK   r$   rD   r&   rf   rg   r   )r+   pv_times_auau_times_pvpv_times_au2au_times_pv2s        r,   test_multiplicationz0TestStructuredUnitArithmatic.test_multiplication~  s   lQT)+~66666&*444434;#5555534;#55555dT\)k))))|d*{****dl*{****]9%% 	( 	(L4<''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(]9%% 	! 	!DL  	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s$   C..C25C2D**D.1D.c                    | j         t          j        z  }t          |t                    sJ |j        dk    sJ |d         | j        t          j        z  k    sJ |d         | j        t          j        z  k    sJ | j         dz  }||k    sJ t          j	        t                    5  d| j         z   d d d            n# 1 swxY w Y   t          j	        t                    5  t          j        | j         z   d d d            d S # 1 swxY w Y   d S )Nr7   r   r   r%   r   )r:   r"   r%   rI   r   rK   r$   r&   rf   rg   r   )r+   pv_by_spv_by_s2s      r,   test_divisionz*TestStructuredUnitArithmatic.test_division  s   ,$'>22222"j0000s|t{QS00000s|t{QS00000<#%7""""]9%% 	 	$,	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]9%% 	 	C$,	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   $B;;B?B?DDDN)r/   r0   r1   r  r  r3   r.   r,   r  r  }  s2        ! ! !"    r.   r  c                   h    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZdS )TestStructuredQuantityc                 ,   t          | j        | j                  }|d         }t          |t                     sJ t          |j        t
                    sJ t          j        || j        d         | j        d         z  k              sJ |d         }t          |t                     sJ t          |j        t
                    sJ t          j        || j        d         | j        d         z  k              sJ t          | j        | j	                  }|d         }t          j        || j        d         | j	        d         z  k              sJ |d         }t          |t                     sJ |j        | j        k    sJ t          j        t                    5  t          | j        | j	                   d d d            n# 1 swxY w Y   t          j        t                    5  t          | j        | j                   d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   )r   r   r:   rI   unitr
   r   r   r)   r;   rf   rg   rh   )r+   q_pvq_pq_vq_pv_tq_tq_pv2s          r,   rQ   z5TestStructuredQuantity.test_initialization_and_keying  s[   ..3i#x(((((#(H-----vcTWS\DL,===>>>>>3i#x(((((#(H-----vcTWS\DL,===>>>>>$)T^44SkvcTYs^dnS.AAABBBBBt%*****zT\))))]:&& 	. 	.TWdn---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.]:&& 	. 	.TY---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s$   F==GG!H		HHc                     t          | j        d          }t          |j        t                    sJ |j        | j        k    sJ d S )N)ru   r%   r   r)   rI   r  r   r;   r+   r  s     r,   $test_initialization_with_unit_tuplesz;TestStructuredQuantity.test_initialization_with_unit_tuples  sG    $)%:;;&+~66666{dn,,,,,,r.   c                     t          | j        d          }t          |j        t                    sJ |j        | j        k    sJ d S )Nz(km, km/s), sr  r  s     r,   test_initialization_with_stringz6TestStructuredQuantity.test_initialization_with_string  sF    $)_55&+~66666{dn,,,,,,r.   c                 J   | j         | j        z  }|j        | j        u sJ t          j        |j        | j         k              sJ t          j        || j                   rJ | j        | j         z  }|j        | j        u sJ t          j        |j        |j        k              sJ d S r   r)   r;   r  r   r   valuemay_share_memory)r+   r  q_pv_t2s      r,   /test_initialization_by_multiplication_with_unitzFTestStructuredQuantity.test_initialization_by_multiplication_with_unit  s    T^+{dn,,,,vfldi/00000&vty99999.49,{dn,,,,vgmv|34444444r.   c                     | j         | j        z  }|j        | j        u sJ t          j        |j        | j         k              sJ t          j        || j                   sJ d S r   r"  r  s     r,   'test_initialization_by_shifting_to_unitz>TestStructuredQuantity.test_initialization_by_shifting_to_unit  se    dn,{dn,,,,vfldi/00000"6495555555r.   c                 r   t          j        | j        d           }t          j        |j        | j        k              sJ t          t           j        j        | j        j                  }|j	        |k    sJ |j	        t          j
        t           j        t           j        ft           j        f          k    sJ d S )N)r  )r"   r   r)   r   r   r#  r   _default_unitr   r  r   one)r+   r  expected_units      r,    test_initialization_without_unitz7TestStructuredQuantity.test_initialization_without_unit  s    DID111vfldi/00000 4J$dio
 
 {m++++{a./FGGGGGGGGr.   c                    t          | j        | j                  }|d d         }t          |t                     sJ |j        |j        k    sJ t          j        |d         |d         d d         k              sJ |d         }t          |t                     sJ |j        |j        k    sJ |j        dk    sJ |d         |d         d         k    sJ d S )Nr   r   r   r3   )r   r)   r;   rI   r  r   r   shape)r+   r  q_pv_t01q_pv_t1s       r,   test_getitemz#TestStructuredQuantity.test_getitem  s    $)T^44"1":(H-----}++++vhsmvc{2A2677777)'8,,,,,|v{****}""""s|vc{1~------r.   c                 ^   t          | j        | j                  }|j        }t	          |          t
          j        u sJ t          j        || j        k              sJ |d         j        }t	          |          t
          j        u sJ t          j        || j        d         k              sJ d S )Nr   )	r   r)   r;   r#  typer   r   r   void)r+   r  r#  value1s       r,   
test_valuez!TestStructuredQuantity.test_value  s    $)T^44E{{bj((((vety()))))F||rw&&&&vf	!,-------r.   c                    t          | j        | j                  }|                    d          }t	          |t                     sJ |d         j        t          j        k    sJ |d         j        t          j        t          j        z  k    sJ t          j
        |d         |d                             t          j                  k              sJ t          j
        |d         |d                             t          j        t          j        z            k              sJ |                    | j                  }|d         j        | j        k    sJ |d         j        | j        k    sJ t          j
        |d         j        | j        d         k              sJ t          j
        |d         j        | j        d         k              sJ t          j        ||          rJ |                    d          }t!          |          t          j        u sJ t          j
        |d         |d                             t          j                  k              sJ t          j
        |d         |d                             t          j        t          j        z            k              sJ |d                             d          }t!          |          t          j        u sJ ||d         k    sJ t          | j        | j                  }|                    d          }|d         d         j        t          j        k    sJ |d         d         j        t          j        t          j        z  k    sJ |d         j        t          j        k    sJ t          j
        |d         d         |d         d                             t          j                  k              sJ t          j
        |d         d         |d         d                             t          j        t          j        z            k              sJ t          j
        |d         |d                             t          j                  k              sJ d S )NrC   r   r   r   ))kpczkpc/Myrr   r   r   )r   r   r:   r   rI   r  r"   rD   rJ   r   r   r$   r&   r#  r$  to_valuer4  r   r5  r)   r;   r9  r   )r+   r  q1q2r   pv11r  s          r,   r  z&TestStructuredQuantity.test_conversion  s   ..WW%&&"h'''''#w|qt#####w|qtae|++++vbgcad!3!3344444vbgcadQUl!;!;;<<<<<WWT\""#w|t{****#w|t{****vbgmtws|344444vbgmtws|344444&r400000mm,--CyyBJ&&&&vc#h$s)"4"4QT":"::;;;;;vc#h$s)"4"4QTAE\"B"BBCCCCCAw 011DzzRW$$$$s1v~~~~$)T^44YY233$x}!QU****$x}!QUQU]2222#w|qu$$$$vbhsmvd|C'8';';AE'B'BBCCCCCvbhsmvd|C'8';';AEAEM'J'JJKKKKKvbg!6!667777777r.   c                    t          | j        | j                  }|t          d          z  }t	          |t                     sJ |d         j        t          j        k    sJ |d         j        t          j        t          j        z  k    sJ t          j
        |d         |d                             t          j                  k              sJ t          j
        |d         |d                             t          j        t          j        z            k              sJ || j        z  }|d         j        | j        k    sJ |d         j        | j        k    sJ t          j
        |d         j        | j        d         k              sJ t          j
        |d         j        | j        d         k              sJ t          j        ||          sJ t          | j        | j                  }|dz  }|d         d         j        t          j        k    sJ |d         d         j        t          j        t          j        z  k    sJ |d         j        t          j        k    sJ t          j
        |d         d         |d         d                             t          j                  k              sJ t          j
        |d         d         |d         d                             t          j        t          j        z            k              sJ t          j
        |d         |d                             t          j                  k              sJ d S NrC   r   r   z(kpc,kpc/Myr),Myrr   r   )r   r   r:   r   rI   r  r"   rD   rJ   r   r   r   r$   r&   r#  r$  r)   r;   r9  r   )r+   r  r;  r<  r  s        r,   test_conversion_via_lshiftz1TestStructuredQuantity.test_conversion_via_lshift  s   ..^$4555"h'''''#w|qt#####w|qtae|++++vbgcad!3!3344444vbgcadQUl!;!;;<<<<<T\!#w|t{****#w|t{****vbgmtws|344444vbgmtws|344444"2t,,,,,$)T^44**$x}!QU****$x}!QUQU]2222#w|qu$$$$vbhsmvd|C'8';';AE'B'BBCCCCCvbhsmvd|C'8';';AEAEM'J'JJKKKKKvbg!6!667777777r.   c                 |   t          | j        | j                  }|                                }|}|t	          d          z  }||usJ |d         j        t          j        k    sJ |d         j        t          j        t          j        z  k    sJ t          j
        |d         |d                             t          j                  k              sJ t          j
        |d         |d                             t          j        t          j        z            k              sJ t          | j        | j                  }|                                }|}|dz  }||usJ |d         d         j        t          j        k    sJ |d         d         j        t          j        t          j        z  k    sJ |d         j        t          j        k    sJ t          j
        |d         d         |d         d                             t          j                  k              sJ t          j
        |d         d         |d         d                             t          j        t          j        z            k              sJ t          j
        |d         |d                             t          j                  k              sJ d S r?  )r   r   r:   r   r   r  r"   rD   rJ   r   r   r   r)   r;   r9  r   )r+   r  r;  q_linkr  r<  s         r,   test_inplace_conversionz.TestStructuredQuantity.test_inplace_conversion$  s>    ..YY[[
~.///#w|qt#####w|qtae|++++vbgcad!3!3344444vbgcadQUl!;!;;<<<<<$)T^44[[]]
""$x}!QU****$x}!QUQU]2222#w|qu$$$$vbhsmvd|C'8';';AE'B'BBCCCCCvbhsmvd|C'8';';AEAEM'J'JJKKKKKvbg!6!667777777r.   c                     t          | j        | j                  }|j        }t	          ||                    d                     d S )Nz	(m,m/s),s)r   r)   r;   r   r   r   )r+   r  	q_pv_t_sis      r,   r   zTestStructuredQuantity.test_si<  s>    $)T^44I	9fii&<&<=====r.   c                     t          | j        | j                  }|j        }t	          ||                    d                     d S )Nz(cm,cm/s),s)r   r)   r;   r   r   r   )r+   r  
q_pv_t_cgss      r,   r   zTestStructuredQuantity.test_cgsA  s>    $)T^44Z
:vyy'?'?@@@@@r.   c                    t          | j        | j                  }||k    }||k    }t          j        |          sJ t          j        |          rJ ||d         k    }||d         k    }t          j        |g dk              sJ t          j        ||k              sJ |                    d          }t          j        ||k              sJ t          j        ||k              rJ t          j        |j        t          j	        d          z  |k              sJ t          j        |j        t          j	        d          z  |k              rJ |dk    du sJ d|k    du sJ t          | j
        | j                  }t          j        |d         |k    g d	k              sJ t          j        |d         |k    g d	k              sJ ||k    du sJ ||k    du sJ d S )
Nr   )FTFrC   rF   bFTr   )FFT)r   r   r:   r   r   anyr   r#  r"   r	   r)   r;   )r+   r  equal	not_equalequal2
not_equal2r;  r  s           r,   r   z$TestStructuredQuantity.test_equalityF  s	   ..DL	ve}}6)$$$$$aT!W_
vf 4 4 4455555vjF*+++++WW%&&vbDj!!!!!6"*%%%%%vbh!5!55=>>>>>6"(QVL%9%99TABBBBB%%%%t$$$$$)T^44vvayF*/C/C/CCDDDDDvvayF*/C/C/CCDDDDD5(((($4''''''r.   c                 <   t          | j        | j                  }d| j        z  |d<   |d         j        t	          j        d| j                  k    sJ dt          j        d          z  |dd<   |d         d         dt          j	        z  k    sJ |d         d         d	t          j	        z  t          j
        z  k    sJ dt          j        z  t          j        z  |d<   t	          j        |d         dt          j        z  t          j        z  k              sJ t          j        t          j                  5  d
t          j        d          z  |d<   d d d            n# 1 swxY w Y   t          j        t          j                  5  dt          j        z  |d<   d d d            n# 1 swxY w Y   t          | j        | j                  }d| j        z  |d<   |d         j        t	          j        d| j                  k    sJ dt          j        d          z  |dd<   |d         d         dt          j        d          z  k    sJ |d         d         dt          j        z  k    sJ d| j        z  |d<   t	          j        |d         d| j        z  k              sJ d S )Nr   r   r   r   r   rF   r   r   r   r   r   )r   r   zAU, AU)rP  r   )rQ  r   rU   r   r   r   )r   r   r:   r#  r   r(   r    r"   r	   rD   rJ   r#   r%   r   rf   rg   
UnitsErrorr)   r;   r!   rT   )r+   r  r  s      r,   test_setitemz#TestStructuredQuantity.test_setitem_  s   ..t|+QAw}T] C CCCCC!5!55QqS	Cy|sQTz))))Cy|sQTzAE11111!$J$S	vd3i3:#3344444]1<(( 	4 	4 16(#3#33DG	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4]1<(( 	# 	#ad
DI	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#$)T^44%6q	ay"(+<do"N"NNNNN'!&1C*D*DDqsd|A*qvl/C/C"CCCCCc{1~qt++++!DL0tvfTlj4<&??@@@@@@@s$   5EE #E F$$F(+F(N)r/   r0   r1   rQ   r  r   r&  r(  r-  r2  r7  r  r@  rC  r   r   r   rS  r3   r.   r,   r  r    s        . . .*- - -
- - -
5 5 56 6 6H H H
. 
. 
.. . .8 8 8<8 8 8.8 8 80> > >
A A A
( ( (2A A A A Ar.   r  c                        e Zd Ze fd            Zd Zej                            de	j
        e	j        g          d             Zd Zd Z xZS )TestStructuredQuantityFunctionsc                     t                                                       | j        | j        z  | _        | j        | j        z  | _        d S r   )r9   r-   r   r:   r  r)   r;   r  r<   s    r,   r-   z+TestStructuredQuantityFunctions.setup_classw  s=    Gt|+	i4>1r.   c                     t          j        | j                  }|j        | j        k    sJ |j        | j        k    sJ |j        | j        j        k    sJ d S r   )	r   
empty_liker  r   r    r  r:   r/  r   )r+   zs     r,   test_empty_likez/TestStructuredQuantityFunctions.test_empty_like}  sZ    M$)$$w$-''''v%%%%w$'-''''''r.   funcc                      || j                   }|j        | j        k    sJ |j        | j        k    sJ |j        | j        j        k    sJ t          | || j                  | j        z             d S r   )r  r   r    r  r:   r/  r   r   )r+   r[  rY  s      r,   test_zeros_ones_likez4TestStructuredQuantityFunctions.test_zeros_ones_like  sy    DOOw$-''''v%%%%w$'-''''1dd47mmt|;<<<<<r.   c                     t          j        t          j        d          5  t	          j        | j                   d d d            d S # 1 swxY w Y   d S )Nz'km / s'r   )rf   rg   r"   UnitConversionErrorrfnstructured_to_unstructuredr  r*   s    r,   test_structured_to_unstructuredz?TestStructuredQuantityFunctions.test_structured_to_unstructured  s    ]10
CCC 	6 	6*49555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   AAAc                     t          j        dt          fdt          fg          }t          j        t
          d          5  t          j        | j        | j        j                   d d d            d S # 1 swxY w Y   d S )NrH   f2z The length of the last dimensionr   )r   )	r   r   floatrf   rg   rh   r`  unstructured_to_structuredr  )r+   r   s     r,   test_unstructured_to_structuredz?TestStructuredQuantityFunctions.test_unstructured_to_structured  s    4-$788]:-OPPP 	M 	M*49DIOLLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms    &A33A7:A7)r/   r0   r1   r2   r-   rZ  rf   r   r   r   
zeros_like	ones_liker]  rb  rg  r>   r?   s   @r,   rU  rU  v  s        2 2 2 2 [2
( ( ( [VbmR\%BCC= = DC=6 6 6M M M M M M Mr.   rU  c                   *     e Zd Z fdZd Zd Z xZS )"TestStructuredSpecificTypeQuantityc                      t                                                        G  fddt          j                  }| _        d S )Nc                       e Zd Z j        ZdS )HTestStructuredSpecificTypeQuantity.setup_class.<locals>.PositionVelocityN)r/   r0   r1   r:   _equivalent_unitr*   s   r,   PositionVelocityrn    s        #|r.   rp  )r9   r-   r"   SpecificTypeQuantityrp  )r+   rp  r=   s   ` r,   r-   z.TestStructuredSpecificTypeQuantity.setup_class  sa    	, 	, 	, 	, 	, 	, 	,q5 	, 	, 	, !1r.   c                    |                      | j        | j                  }t          || j                   sJ t	          |d                   t
          j        u sJ t          |d         | j        d         | j        d         z             |                      | j        d          }t          |d         | j        d         t
          j        z             d S )Nr   	AU,AU/day)	rp  r   r:   rI   r4  r"   r   r   rD   )r+   r   r   s      r,   	test_initz,TestStructuredSpecificTypeQuantity.test_init  s    ""47DL99"d344444BsG}}
****2c7DGCLDL4E$EFFF##DG[993s8TWS\QT%9:::::r.   c                 L   t          j        t          j                  5  |                     | j        d           d d d            n# 1 swxY w Y   t          j        t          j                  5  |                     | j        d           d d d            d S # 1 swxY w Y   d S )NrD   zAU,yr)rf   rg   r"   rR  rp  r   r*   s    r,   !test_error_on_non_equivalent_unitzDTestStructuredSpecificTypeQuantity.test_error_on_non_equivalent_unit  s   ]1<(( 	1 	1!!$'4000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1]1<(( 	4 	4!!$'7333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s#   AAA0BB B)r/   r0   r1   r-   rt  rv  r>   r?   s   @r,   rk  rk    sV        1 1 1 1 1; ; ;4 4 4 4 4 4 4r.   rk  c                   &    e Zd Zd Zd Zd Zd ZdS )TestStructuredLogUnitc                 ~    t          j        ddg          | _        t          j        ddg| j                  | _        d S )N)magr   r   )r   r   )g      9@g      Y@)r   r   mag_time_dtyper(   mag_timer*   s    r,   r-   z!TestStructuredLogUnit.setup_class  s8     h{'CDD,!>@STTr.   c                     t          t          j        t          j        f| j                  }|d         t          j        k    sJ |d         t          j        k    sJ t          j        d          }||k    sJ d S )Nrz  r   	mag(ST),s)r   r"   STmagr%   r{  r	   )r+   mag_time_unitmag_time_unit2s      r,   test_unit_initializationz.TestStructuredLogUnit.test_unit_initialization  sr    &~t7JKKU#qw....S!QS((((,,......r.   c                    t          j        d          }| j        |z  }t          |d         t           j                  sJ t          |d         t           j                  sJ |j        |k    sJ t          |d         | j        d         t           j        z             t          |d         | j        d         t           j	        z             d S )Nr~  rz  r   )
r"   r	   r|  rI   	Magnituder   r  r   r  r%   )r+   rL   r|  s      r,   test_quantity_initializationz2TestStructuredLogUnit.test_quantity_initialization  s    VK  =B&(5/1;77777(3-44444}""""8E?DM%,@AG,KLLL8C=$-*<*CDDDDDr.   c                     | j         t          j        d          z  }|j        }t	          |d         |d         j                   t	          |d         |d         j                   d S )Nz
mag(ST),yrrz  r   )r|  r"   r	   r   r   )r+   r|  mag_time_sis      r,   test_quantity_siz&TestStructuredLogUnit.test_quantity_si  s]    =AF<$8$88k;u-x/ABBB;s+Xc]-=>>>>>r.   N)r/   r0   r1   r-   r  r  r  r3   r.   r,   rx  rx    sV        U U U/ / /E E E? ? ? ? ?r.   rx  c                   :     e Zd ZdZ fdZd Zd Zd Zd Z xZ	S )TestStructuredMaskedQuantityz6Somewhat minimal tests.  Conversion is most stringent.c                    t                                                       | j        | j        z  | _        t          j        g ddt          fdt          fg          | _        t          | j        | j                  | _
        d S )N))TF)FF)FTr   r   )mask)r9   r-   r   r:   qpvr   r(   boolpv_maskr   mpvr<   s    r,   r-   z(TestStructuredMaskedQuantity.setup_class  s{    7dl*x  
 4[3+&
 
 $(666r.   c                     t          | j        t                    sJ t          | j        t                    sJ t	          | j        j        | j                   t	          | j        j        | j                   d S r   )	rI   r  r   r   r   unmaskedr  r  r  r*   s    r,   rt  z&TestStructuredMaskedQuantity.test_init  se    $(F+++++$(H-----48,dh77748=$,77777r.   c                     | j         d         }t          |t                    sJ t          |t                    sJ t	          |j        | j        d                    t	          |j        | j        d                    d S )Nr   )	r  rI   r   r   r   r  r  r  r  )r+   mps     r,   test_slicingz)TestStructuredMaskedQuantity.test_slicing  sp    Xc]"f%%%%%"h'''''2;66627DL$566666r.   c                 b   | j                             d          }t          |t                    sJ t          |t                    sJ t          |j        | j                            d                     t          |j        | j	                   t          j        || j         k              sJ d S )Nrs  )r  r   rI   r   r   r   r  r  r  r  r   r   r+   r  s     r,   r  z,TestStructuredMaskedQuantity.test_conversion  s    hkk+&&#v&&&&&#x(((((3<[)A)ABBB38T\222vcTXo&&&&&&&r.   c                 *   | j         j        }t          |t                    sJ t          |t                    sJ t          |j        | j        j                   t          |j        | j	                   t          j        || j         k              sJ d S r   )r  r   rI   r   r   r   r  r  r  r  r   r   r  s     r,   r   z$TestStructuredMaskedQuantity.test_si  s    hk#v&&&&&#x(((((3<55538T\222vcTXo&&&&&&&r.   )
r/   r0   r1   __doc__r-   rt  r  r  r   r>   r?   s   @r,   r  r    sz        @@7 7 7 7 78 8 87 7 7' ' '' ' ' ' ' ' 'r.   r  )(r  r   numpyr   numpy.lib.recfunctionslibrecfunctionsr`  rf   numpy.testingr   astropyr   r"   astropy.tests.helperr   r   astropy.unitsr   r   r	   r
   astropy.units.quantityr   astropy.utils.compatr   astropy.utils.maskedr   r   r5   rA   r   r   r   r  r  rU  rk  rx  r  r3   r.   r,   <module>r     s.         $ $ $ $ $ $ $ $ $  , , , , , ,       I I I I I I I I B B B B B B B B B B B B > > > > > > 0 0 0 0 0 0 ' ' ' ' ' '
 
 
 
 
 
 
 
*R R R R R"4 R R Rw$ w$ w$ w$ w$1 w$ w$ w$tA A A A A$? A A A$#( #( #( #( #("= #( #( #(LWI WI WI WI WI ; WI WI WIt    #>   @VA VA VA VA VA8 VA VA VAr!M !M !M !M !M&A !M !M !MN4 4 4 4 4)D 4 4 42? ? ? ? ? ? ? ?:+' +' +' +' +'#> +' +' +' +' +'r.   