a
    ߙfbB                  
   @   s  d 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lmZ ddlmZ d	d
 Zejdejejejfdd ZejejejgZejdedd Zejdedd Zejdedd Zejdedd Zejdedd Zejdedd Z dZ!ejde"e#ee!dd Z$ddej% dfZ&ejde"e#ee&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d0g d1ej/fg d2ej0d3 fg d4ej1fg d5ej2fgd6d7 Z3ejd8d9ej/ d:ej1 d;d9ej/  d<ej2 fd=d> Z4d?d@ Z5dAdB Z6dCdD Z7dEdF Z8ejdGej9ej:dH  ej; ej:ej: ej; d3 fej9ej:dH  ej; ej<ej:ej: ej; ej=  fej<ej:dH  ej; ej:ej: ej; d3 fej<ej:dH  ej; ej<ej:ej: ej; ej=  fgdIdJ Z>dKdL Z?dMdN Z@dOdP ZAdQdR ZBdSdT ZCdUdV ZDdWdX ZEdYdZ ZFd[d\ ZGd]d^ ZHd_d` ZIdadb ZJdcdd ZKdedf ZLdgdh ZMdidj ZNdkdl ZOdmdn ZPdodp ZQdqdr ZRdsdt ZSdudv ZTdwdx ZUdS )yz.Separate tests specifically for equivalencies.    N)assert_allclose)units)Equivalency)	constants)assert_quantity_allclose)AstropyDeprecationWarningc                     sx  t   t jjd ddks J t jjd dt jt jksBJ t jjd ddksZJ t jjt j ddkstJ dt j jd ddksJ dt j jd dt jt jksJ dt j jd ddksJ dt j	 t j
d  } t jdt j  }d|  |d  }|jt j d}t|j|t jd  t j G  fdddt j}|dt j}|dt jt jkstJ d S )	N   equivalencies      ?g\CkFI         ?c                       s   e Zd Z ZdS )z)test_dimensionless_angles.<locals>.MyRad1N)__name__
__module____qualname__Z_equivalencies Zrad1r   Elib/python3.9/site-packages/astropy/units/tests/test_equivalencies.pyMyRad1(   s   r   )udimensionless_anglesradiantoZdegZradZ	steradiandimensionless_unscaledto_valuegcmcyclesergr   valueQuantity)IOmegaZErotZErot_in_erg1r   phaser   r   r   test_dimensionless_angles   s     "&r%   log_unitc              	   C   st  t tj | dd W d    n1 s.0    Y  t tj tj|  W d    n1 sf0    Y  | jddt ddksJ tjj| t ddksJ tg dtj	 }d|j
 tj }|| }t|jdt d|ksJ t|j| t d|ksJ tt 8 tt|||  d|  k sPJ W d    n1 sf0    Y  d S )Nr           r	   r   )r'   g      r          @      $@g|=)pytestraisesr   
UnitsErrorr   r   Zlogarithmicnparraydexr    allset_enabled_equivalenciesabs)r&   Zq_dexZ
q_expectedZ
q_log_unitr   r   r   test_logarithmic/   s.    **

r3   functionc                 C   s6   dt j }|jt jt j | |d}|jdks2J d S )Nq=
ף@Z@r	   r   )r   GHzr   kmr   r    )r4   restvelo0r   r   r   test_doppler_frequency_0K   s    
r:   c                 C   sF   dt j }dt j }|jt jt j | |d}tjj|j	ddd d S )Nr5   g]Z%cg?r	   r      Zdecimal)
r   r6   mr   r7   r   r-   testingassert_almost_equalr    r4   r8   q1r9   r   r   r   test_doppler_wavelength_0R   s    

rB   c                 C   sF   dt j }dt j }|jt jt j | |d}tjj|j	ddd d S )Nr5   g)v<?r	   r   r;   r<   )
r   r6   eVr   r7   r   r-   r>   r?   r    r@   r   r   r   test_doppler_energy_0Z   s    

rD   c                 C   s\   dt j }dt j }|jt jt j | |d}|jt j| |d}tjj|j|jdd d S Nr5   gRAZ@r	      r<   )	r   r6   r   r7   r   r-   r>   r?   r    )r4   r8   shiftedveloZfreqr   r   r   test_doppler_frequency_circleb   s
    

rI   c                 C   s\   dt j }dt j }|jt jt j | |d}|jt j| |d}tjj|j|jdd d S rE   )	r   nmr   r7   r   r-   r>   r?   r    )r4   r8   rG   rH   wavr   r   r   test_doppler_wavelength_circlek   s
    

rL   c                 C   s\   dt j }dt j }|jt jt j | |d}|jt j| |d}tjj|j|jdd d S )Ng>yX5?g o_?r	   rF   r<   )	r   rC   r   r7   r   r-   r>   r?   r    )r4   r8   rG   rH   Zenr   r   r   test_doppler_energy_circlet   s
    

rM   )gf'3?@g3?@gos3?@r4   r    c                 C   sF   dt j }dt j t j }|jt j| |d}tjj|j|dd d S )N     r	   rF   r<   )	r   r6   r7   r   r   r-   r>   r?   r    )r4   r    r8   rH   rG   r   r   r   
test_30kms   s    
rQ      c                 C   s8   t tj | | W d    n1 s*0    Y  d S N)r*   r+   r   r,   rN   r   r   r   test_bad_restfreqs   s    rT   c                  C   s  t g dt j} t g dt j}tj| jt jt  d|jddsJJ tj|jt jt  d| jddspJ t dt jt j	d  }t dt jt j
d  }tj|jt jt j
d  t  d|jddsJ tj|jt jt j	d  t  d|jddsJ t dt jt j	d	  }t d
t jt j
d	  }tj|jt jt j
d	  t  d|jddsdJ tj|jt jt j	d	  t  d|jddsJ t dt jt j }t dt jt j }tj|jt jt j t  d|jddsJ tj|jt jt j t  d|jddsJ d S )N)gˡE[0Ag   rAg   P Ag   0AtKF)gAR:gQ5- ;gT2 ;gKo%:r   r	   gHz>ZrtolrU   r   g-C6?   ư>r   )r   r!   rC   r   r-   Zallcloser   Zmass_energyr    r=   r   r   )Zmass_eVZmass_gZsdens_eVZsdens_gZdens_eVZdens_gZpow_eVZpow_gr   r   r   test_massenergy   s`    




rY   c                   C   s\  t jt jsJ t jt js$J t jt jr6J t jt jt  sNJ t jt j	r`J t jt j	t 
 sxJ t j	t jt 
 sJ t jt jt  sJ t jt jt  sJ t jt jt jt jfsJ t jt jt jt jfsJ t jt jt jt jfsJ t jt jt jt jfr4J t jt j t jt jt jfrXJ d S rS   )r   r=   is_equivalentpcr   masr   r   HzJspectral	arcsecondparallax	arcminuteaur   r   kgZmsr   Lr7   r   r   r   r   test_is_equivalent   s     
rf   c                  C   s   t jt jdt  } t| ddd t jt j| t  }t|ddd t jt jdt  } t| ddd t jt j| t  }t|ddd dt j t jt  }t	
|jsJ dt j t jt  }t	
|sJ d S )N
   皙?-q=rV   r   g^X~۪@)r   r`   r   r[   ra   r   rb   rc   r\   r-   Zisnanr    r   )abvalr   r   r   test_parallax   s    rn   c                  C   s0   t jt jddgt  } t| ddgdd d S )Nrh         @rg   皙?ri   rV   )r   r`   r   r[   ra   r   rk   r   r   r   test_parallax2   s    rr   c                  C   s   t jt jdt  } t| d t jt j| t  }t|d t jt jdt  } t| d t jt j| t  }t|d t jt jdt  } t| d t jt j| t  }t|d d S )Nr   g'BbCgTЅBgIxޱA)r   AAr   r]   r_   r   ZMHzr=   )rk   rl   r   r   r   test_spectral   s    




rt   c                  C   s   t jt jdt  } t| d t jt j| t  }t|d t jt jdt  } t jt j| t  }t jt jdt  }t|| t jt j|t  }t| | d S )Ni  goaP<r   )r   rJ   r   r^   r_   r   rs   r]   )rk   rl   cr   r   r   test_spectral2  s    


rv   c                  C   s,   t jt jddgt  } t| ddg d S )NrO   i   hr
Bg hr
B)r   rJ   r   r]   r_   r   rq   r   r   r   test_spectral3  s    rx   )in_valin_unit)rh   g     @g     @g     j@r(   r   rj   )g}Ӻ Cg hr
Crw   )g3]=g#aP<g`P<c                 C   sv   t jd t jt j g}g dg dg}t||D ]@\}}||| t  }t|| |||t  }t||  q0dS )z;Wave number conversion w.r.t. wavelength, freq, and energy.rj   r{   )gd;,#AgS!)@ghtT!@N)r   micronr   zipr   r_   r   )ry   rz   Z	out_unitsZanswersZout_unitZansrk   rl   r   r   r   test_spectral4  s    	
r~   rK   i  g pz8XCr   g.j$<c                 C   s"  t jt j t jd  t j }t jt j t jd  t j }||dt | }t|d t jt jd  t j }t j	t jd  t j }||dt | }t|d ||dt | }t|d t jt j t j }t jt j t j }||dt | }t|d ||dt | }t|d d S )Nr   r   gvQ{=g  &DBga=gmz}LB)
r   r   angstromr   r   r]   r   spectral_densityr   ph)rK   Zflambdafnurk   Zf_intZphot_intZllambdaZlnur   r   r   test_spectraldensity2.  s     



r   c               
   C   s  t j} t jt jd  t j t j }t dt j}t| 	t jt jd  t j t j
 ddd t| j	t jt jd  t j dt |d ddd t| j	|dt |ddd t|j	t jdt |dd	d t|j	t jt jd  t j dt t dt jdd
d d S )Nr   r   r   gQ@-(;rg   r	   gvIh%<=g7J;g}Ӻ Cr)   )r   Jyr   r   r   r|   r!   r6   r   r   r]   r   )Zf_nuZf_lambdaZone_ghzr   r   r   test_spectraldensity3O  s0    ,
r   c                  C   s  t jt jd t j t j  } t jt jd t j t j  }t jt jd t j t j  }t jt jd t j t j  }t g dt j}g d}g d}g d}g d}g d}	g d}
g d	}t|	| |t 
||d
d t| 	||t 
||d
d t|	||t 
||d
d t|	||t 
||d
d t|	t j|t 
||	d
d tt j	||	t 
||d
d t|	||t 
||d
d t|	||t 
||d
d t|	||t 
||d
d t|	||t 
||d
d t|	| |t 
||d
d t| 	||t 
||d
d t|	t j|t 
||
d
d tt j	||
t 
||d
d t|	t j|t 
||d
d tt j	||t 
||d
d dS )zPHOTLAM and PHOTNU conversions.r   g\@ǧ_@gLb@g?g9gN?gu0:
?g6=g2)/7=g dE6=g<&=gC&=g	&=gs)N:g٭/8j:gZ7v:)gÖuk?g?gnx?)gHP(@gu&D(@g&h(@)g9)iD)@gx\C5)@ǵ17C)@rX   rV   N)r   r   r   r   rs   r]   photonr!   r   r   r   r   ZSTmagZABmag)Zflamr   ZphotlamZphotnuwaveZflux_photlamZflux_photnuZ	flux_flamZflux_fnuZflux_jyZ
flux_stmagZ
flux_abmagr   r   r   test_spectraldensity4q  s    r   c            	      C   s  t jt jt j  } t jt jt j  }t jt jt j  }t jt jt j  }t g dt j}g d}g d}g d}g d}t|| |t 	||dd t| ||t 	||dd t|||t 	||dd t|||t 	||dd t|||t 	||dd t|||t 	||dd t|||t 	||dd t|||t 	||dd t|| |t 	||dd t| ||t 	||dd dS )	z- Test photon luminosity density conversions. r   r   r   r   r   rX   rV   N)
r   r   r   rs   r]   r   r!   r   r   r   )	ZL_laZL_nuZ	phot_L_laZ	phot_L_nur   Zflux_phot_L_laZflux_phot_L_nuZ	flux_L_laZ	flux_L_nur   r   r   test_spectraldensity5  sv    r   c                  C   s   t jt jd t j t j t j  } t jt jd t j t j t j  }t g dt j}g d}g d}t|	| |t 
||dd t| 	||t 
||dd dS )z& Test surface brightness conversions. r   r   r   r   rX   rV   N)r   r   r   r   rs   srr]   r!   r   r   r   )ZslamZsnur   Zsb_flamZsb_fnur   r   r   test_spectraldensity6  s    ""r   Z	from_unitZto_unitr   c              	   C   s   t jtjdd* | |dtdtj  W d   n1 s@0    Y  t jtjdd* || dtdtj  W d   n1 s0    Y  dS )zTNot allowed to succeed as
    per https://github.com/astropy/astropy/pull/10015
    znot convertiblematchr   N)r*   r+   r   ZUnitConversionErrorr   r   rs   r   r   r   r    test_spectraldensity_not_allowed  s    
8r   c                  C   s   ddl m}  t| n tj }t|}ttjtjtjtj	tj
tjtjtjtj| j| j| j| j| jg}||ksvJ W d    n1 s0    Y  t|}|dt|d ksJ d S )Nr   imperial
r   )astropy.unitsr   r   add_enabled_unitsr   find_equivalent_unitssetZM_eZM_prd   ZsolMasstZM_earthZM_jupZozZlbstZtonZslugreprcountlen)r   r   Z	units_setr   rr   r   r   test_equivalent_units   s    
 *r   c                  C   s  t tjt } t tjtjtjtjtjtj	tj
tjtjtjtjtjtjtjtjtjtjtjtjg}| |kstJ ddlm} t| t tjt } t tjtj|jtjtjtj|jtj	tj
tj|j|j|j|jtjtj|j tj|j!tjtjtj|j"tjtj|j#tjtjtjg}| |ks*J W d    n1 s@0    Y  t tjt } t tjtjtjtjtjtj	tj
tjtjtjtjtjtjtjtjtjtjtjtjg}| |ksJ d S )Nr   r   )$r   r   r]   r   r_   ZAUZAngstromr^   ZRyr   rC   r   ZlyrZlsecr=   r|   r[   ZsolRadZBqZCikZearthRadZ
jupiterRadr   r   r   ZBTUZcalZftZfurZinchZkcalmiZmilZydZnmi)r   r   r   r   r   r   test_equivalent_units2  s8    ( .( r   c                   C   s(   t jjt jt jt jfgddks$J d S )Nr	   r   )r   r=   r   rd   r   r   r   r   test_trivial_equivalency*  s    r   c                   C   s   t t( tjjtjtjfgd W d    n1 s80    Y  t t* tjjtjtjdfgd W d    n1 s|0    Y  d S )Nr	   g      @)r*   r+   
ValueErrorr   r=   r   rd   r   r   r   r   test_invalid_equivalency.  s    6r   c                   C   sL   t tj, tjjtjtjtjfgd W d    n1 s>0    Y  d S )Nr	   )r*   r+   r   r,   r=   r   rd   lr   r   r   r   test_irrelevant_equivalency6  s    r   c               	   C   s|   t jdtj d  } tjd }dtj }t j|jdtj	 j
tjtj|| dd t jd|j
tj	tj|| dd d S )	N2   r   rR   M5@r   )Z	beam_arear	   r   )r-   pir   arcsecr6   Kr>   r?   r    r   r   brightness_temperature)omega_Bnutbr   r   r   test_brightness_temperature;  s    

r   c                  C   s   t jdtj d  } tjd }dtj }ttF}dtj	 j
tjt| |d}|j
tj	t| |d}W d   n1 s~0    Y  t|dksJ t j|j|j t j|jd dS )zT
    #5173 changes the order of arguments but accepts the old (deprecated) args
    r   r   rR   r   r   r	   N)r-   r   r   r   r6   r   r*   Zwarnsr   r   r   r   r   r>   r?   r    )r   r   r   wresultZ	roundtripr   r   r   (test_swapped_args_brightness_temperatureG  s    


$r   c                  C   sR   dt j t j } | t jt dt j }tj	|j
dd |jt jsNJ d S )Nr   g:?rR   )r   MJyr   r   r   r   r6   r-   r>   r?   r    unitrZ   )Zsbr   r   r   r   test_surfacebrightnessY  s    r   c                  C   s   dt j dtj d  } dtj tjtj| }t j	
| tjjd |j |jtjsdJ |tjtj| }t j	
|jd dtj dtj tj|  dtj tj tjtj tj| }t j	
|jd d S )Nr   r   rR   r   g+@)r-   r   r   r   Zbeamr   r   r
   Zbeam_angular_arear>   r?   r    r   rZ   r   r   )r   Znew_beamZnbeamsZflux_densityr   r   r   	test_beam`  s     (r   c                  C   st   dt j } dt j }t j| dt j d}tj|jdt jt j	  j
t j|d tjd|j
t jt j	 |d d S )N   gG&Ϗe?g@)ZT_cmbr   r	   r   )r   r6   r   Zthermodynamic_temperaturer-   r>   r?   r    r   r   r   )r   r   eqr   r   r   test_thermodynamic_temperaturew  s    

r   c            	   	      s  t t  
 t dt j} ttd|  d t jdt j  }ttd| d t j	 d t
t j | jdd d W d    n1 s0    Y  t | t j}t|jt jt j G dd dtj}td|}d|_t |t j}t|jt jt j W d    n1 s"0    Y  t t  h t jt j t j  t
t j" t jjt jd d W d    n1 s0    Y  W d    n1 s0    Y  t j }t fd	d
|D sJ t|t k sJ t dt j }dt j }|jt jt j |ddt j t j ks6J t |` |dt j t j ks\J t|dt j t j  t jdt j t j k sJ W d    n1 s0    Y  d S )Nr   y              ?g      N@r   r	   c                   @   s   e Zd ZdS )z5test_equivalency_context.<locals>.MyQuantityLookalikeN)r   r   r   r   r   r   r   MyQuantityLookalike  s   r   r   c                 3   s   | ]}|t  v V  qd S rS   )r   ).0r   Zeq_onr   r   	<genexpr>      z+test_equivalency_context.<locals>.<genexpr>ip  iz  g      Y@g     @@) r   r1   r   r!   r   r   r-   ZexpZminutesecondr*   r+   r,   r   r   r    r   Zndarrayr.   Zviewr   r_   r6   r   r   r0   r   doppler_opticalr   r7   r   r2   )	r$   r#   rA   r   ZmylookalikeZq2Zeq_offZl2vl1r   r   r   test_equivalency_context  s8    ,6
R

,r   c               	   C   s  t  } dd }|t  }|t  }t| jdks:J t t  ^ t  }t||jt|ksnJ t|jt| jksJ t t  J t  }t||jt|ksJ t|jt| jksJ W d    n1 s0    Y  t||jt|ks
J t|jt| jks$J t 	t  V t  }t||jt|t|B ks`J t|jt| jkszJ W d    n1 s0    Y  W d    n1 s0    Y  | t  u sJ d S )Nc                 S   s   dd | D S )Nc                 S   s   g | ]}|d  |d fqS )r   r   r   )r   Zequivr   r   r   
<listcomp>  r   zPtest_equivalency_context_manager.<locals>.just_to_from_units.<locals>.<listcomp>r   r	   r   r   r   just_to_from_units  s    z<test_equivalency_context_manager.<locals>.just_to_from_unitsr   )
r   Zget_current_unit_registryr   r_   r   r
   r1   r   Z	all_unitsZadd_enabled_equivalencies)Zbase_registryr   Ztf_dimensionless_anglesZtf_spectralZnew_registryZnewer_registryr   r   r    test_equivalency_context_manager  s@    &

Jr   c                  C   s  ddl m} m} dtj }t|tjt d t|| t d dtj }t||t d d| }t|tjt ddd	 d|  }t||t d
 d| }t|| t d dtj }t||t d d| }t|tjt ddd	 d S )Nr   )deg_Fdeg_RgfffffqgQ|   g      B@gQ8&@g{Gz?)ZatolgQ}@gQz{g(\}@gv`p)	Zastropy.units.imperialr   r   r   r   r   r   Zdeg_CZtemperature)r   r   Zt_kr   r   r   test_temperature  s     


r   c                  C   sT   dt j } | tj t j}t| t jt  |j	 t|t jt  | j	 d S )NrO   )
r   r   r   Zk_Br   keVr   r   temperature_energyr    xyr   r   r   test_temperature_energy  s    
r   c                  C   s   dt jt j  } dt j  }t| t j t  |j t|t jt j t  | j tt j	 | 
t j  W d    n1 s0    Y  d S )Nr   )r   r   Zmolr   r   Zmolar_mass_amur    r*   r+   r,   r   r   r   r   r   test_molar_mass_amu  s    
 r   c               	   C   s*  t djt jft  d} | d t jks.J t djt jft  d} | d t dt j ksfJ t jjt  d} t t jt j| v sJ t j	jt j
t jft dt j d} | D ]Z}|jt j
t jgkr|jdd	gksJ t|jt j	jt j
t j t dt j d  q&qd
s&J dd S )Nr   )r   r
   r   z2 arcsecr   r	   g?r   rj   Fz$Didn't find speed in compose results)r   ZUnitZcomposer[   ra   Zdegreer   r   r   rJ   r=   r   r   r|   basesZpowersr   Zscaler   r   r   r   test_compose_equivalencies  s     $"r   c                  C   s   dt j } dt j }dt j t j }dt j t j }t| t jt || t| t jt || t| t jt || t| t jt || t|t jt ||  t|t jt ||  d S )NK   rP   rp   ro   )r   pixr   r   r   pixel_scalearcmin)r   asecpixscale	pixscale2r   r   r   test_pixel_scale  s    

r   c                  C   s   dt j } dt j t jd  }tjt jdd t |  W d    n1 sN0    Y  tjt jdd t | W d    n1 s0    Y  d S )Nrp   r   zpixel dimensionr   )r   r   r   r*   r+   r,   r   )r   r   r   r   r   #test_pixel_scale_invalid_scale_unit  s    
(r   c                  C   s   dt j } dt jt j  }dt jt j t j  }dt jt jt j   }t| t jt j t || t| t jt j t || t| t jt j t || t| t jt j t || t|t jt ||  t|t jt ||  d S )Nr   i  rp   ro   )	r   r   r   r   r=   r   r   r   r7   )r   vr   r   r   r   r   &test_pixel_scale_acceptable_scale_unit(  s    
    r   c                  C   s   dt j } dt j }dt j t j }dt j t j }t| t jt || t| t jt || t| t jt || t| t jt || t|t jt ||  t|t jt ||  d S )Ng      ?rP   r   g?)r   mmr   r   r   Zplate_scaler   )r   r   Z
platescaleZplatescale2r   r   r   test_plate_scale:  s    

r   c                  C   s   t dt j t j } t| ts$J t| jts4J t| jdksFJ | jd dksXJ t| j	tshJ t| j	dkszJ | j	d t
ddt j t j iksJ d S )Nrg   r   r   r   r   )r   r   r   r   
isinstancer   namelistr   kwargsdict)Zpsr   r   r   test_equivelencyK  s    r   c                  C   s   t dt j t j t   } t| ts,J | jddgks>J t| jt	sNJ | jt
ddt j t j it
 gksvJ t dt j t j g d }t|t	sJ d S )Nrg   r   r   r   )r   r   rW   )r   r   r   Zpixelr   r   r   r   r   r   r   r   )Ze1Ze2r   r   r   test_add_equivelenciesV  s    (r   c                  C   sB   t jj} t j }| | g dks,J | |dks>J d S )N)z/  Primary name | Unit definition | Aliases     [z1  Bq           | 1 / s           | becquerel    ,z1  Ci           | 3.7e+10 / s     | curie        ,z1  Hz           | 1 / s           | Hertz, hertz ,]a  <table style="width:50%"><tr><th>Primary name</th><th>Unit definition</th><th>Aliases</th></tr><tr><td>Bq</td><td>1 / s</td><td>becquerel</td></tr><tr><td>Ci</td><td>3.7e+10 / s</td><td>curie</td></tr><tr><td>Hz</td><td>1 / s</td><td>Hertz, hertz</td></tr></table>)r   ZUnitBaseZEquivalentUnitsListr]   r   __repr__
splitlinesZ_repr_html_)Zpprint_classZequiv_units_to_Hzr   r   r   test_pprinta  s    
r   )V__doc__r*   Znumpyr-   Znumpy.testingr   Zastropyr   r   Zastropy.units.equivalenciesr   r   Zastropy.tests.helperr   Zastropy.utils.exceptionsr   r%   ZmarkZparametrizeZmagr/   ZdBr3   r   Zdoppler_radioZdoppler_relativisticZdoppler_functionsr:   rB   rD   rI   rL   rM   Z
values_ghzr   r}   rQ   r   Z
bad_valuesrT   rY   rf   rn   rr   rt   rv   rx   rs   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   








5

"A,*2*2

-%	