o
    *ήcL                     @   s  d dl Z d dlmZ d dlmZmZ d dlmZmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC d dlDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZL d dlMmNZNmOZO d dlPmQZQmRZR d dlSmTZT d dlUmVZVmWZWmXZX eNd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_d d! Z`d"d# Zad$d% Zbd&d' Zcd(d) Zdd*d+ Zed,d- Zfd.d/ Zgd0d1 Zhd2d3 Zid4d5 Zjd6d7 ZkeVd8d9 Zld:d; Zmd<d= Znd>d? Zod@dA ZpdBdC ZqdDdE ZrdFdG ZsdHdI ZtdJdK ZudLdM ZvdNdO ZwdPdQ ZxdRdS ZydS )T    N)Add)Functiondiff)NumberRational)S)Symbolsymbols)Abs)explog)sqrt)sin)	integrate)amount_of_substancearea
convert_to	find_unitvolume	kilometerjoulemolar_gas_constantvacuum_permittivityelementary_chargevoltohm)amuau
centimetercoulombdayfootgramshourinchkgkmmmeter
millimeterminutequartssecondspeed_of_lightbitbytekibibytemebibytegibibytetebibytepebibyteexbibytekilogramgravitational_constant)	Dimensionchargelengthtimetemperaturepressureenergymass)PREFIXESkilo)PhysicalConstantQuantity)SI)XFAILraiseswarns_deprecated_sympykc                   C   s   t tdksJ d S )Nr7   )strr%    rK   rK   P/tmp/pip-target-vg8gfxp4/lib/python/sympy/physics/units/tests/test_quantities.pytest_str_repr#   s   rM   c                   C   s,   dt  dt  ks
J dt  dt ksJ d S )N
   )r'   r,   rK   rK   rK   rL   test_eq'   s   rO   c                  C   s   t d} | tdt | tdt ksJ ttt dt t ks&J ttdt ks1J | t| ks:J tttksCJ t	t
 }t|t	}|t	t
 ksTJ d S )Nq1  iJxiQ )rD    set_global_relative_scale_factorr   r(   r   r'   r.   r,   r    r   r-   )qexprconvrK   rK   rL   test_convert_to-   s   
rV   c                  C   sz  t ddd} | dt t ddd}|dt t d}|tt t d}|dt t | jdks5J | jtks<J | jt	dksEJ |jt
ksLJ |jdksSJ |jt	dks\J |jd	kscJ |j|j |ksmJ |j|j j|jksyJ |jt
ksJ |jd
ksJ t  t ddd W d    n1 sw   Y  t  t dt
td W d    d S 1 sw   Y  d S )Ns10sabbrabbrevrN   udamr&        rQ   invalid	dimension   mismatch)r`   scale_factor)rD   rR   r-   r(   rB   rc   r`   r<   rZ   r   r;   funcargsrH   r%   )rS   r[   r&   vrK   rK   rL   test_Quantity_definitionA   s2   "rg   c                  C   s   t d} | tjt | jtdksJ | jtdksJ t ddd} | tdt | jtdks4J | jtdks=J | jdksDJ t	| jt
sLJ t ddd} | dt t | jtdkscJ | jdksjJ d S )Nr[   omrY      ikm     )rD   rR   r   Oner(   namer   rZ   rc   
isinstancer   rB   r[   rK   rK   rL   test_abbrev`   s   rq   c                  C   s0   t ddd} t| dksJ t| dksJ d S )Nunitnamer\   rY   )rD   reprrJ   rp   rK   rK   rL   
test_printv   s   rt   c                  C   sT   t ddd} t d}| |ksJ t ddd}| |ksJ t ddd}| |ks(J d S )	Nr[   r\   rY   v1v2dsv3dm)rD   )r[   rf   rK   rK   rL   test_Quantity_eq|   s   rz   c                  C   s   t d} t d}t d}| tdt |tdt |tdt t| | ts-J | ||  dtj |  ks=J t| | tsFJ | ||  tj|  ksTJ d S )Nr[   rf   wrN   r]   ri   ra   )	rD   rR   r   r(   r-   ro   r   r   Half)r[   rf   r{   rK   rK   rL   test_add_sub   s     r}   c                  C   s   t d} t d}t d}| dtt  |dtt  |dtt  |t| |  }t| tt j	ks8J t
t|}t  t
t |}||ksPJ W d    n1 sZw   Y  t |tdtdiksnJ tttd ksxJ d S )Nv_w1v_w2v_w3ra   ri   )rD   rR   r(   r-   r
   rE   get_dimensional_exprr;   r<   rn   r9   rH   get_dimension_systemget_dimensional_dependenciesr   )r~   r   r   rT   DqDq1rK   rK   rL   test_quantity_abs   s$   
r   c                     s   t dt d} t dtdt | tdt tdt dd  tt fd	d
 tt fdd
 tt fdd
 tt fdd
 tt fdd
 d S )Nr[   rf   r{   rN   r]   ri   c                 S   s   t |  d S N)rE   _collect_factor_and_dimension)rT   rK   rK   rL   check_unit_consistency   s   z;test_check_unit_consistency.<locals>.check_unit_consistencyc                      s     S r   rK   rK   r   r[   r{   rK   rL   <lambda>       z-test_check_unit_consistency.<locals>.<lambda>c                      s     S r   rK   rK   r   rK   rL   r      r   c                      s    d S Nra   rK   rK   r   r[   rK   rL   r      r   c                      s    d S r   rK   rK   r   rK   rL   r      r   c                      s    dt   S r   )r   rK   r   rK   rL   r      s    )rD   rR   r   r(   r-   rG   
ValueError)rf   rK   r   rL   test_check_unit_consistency   s   r   c                  C   s  t d} t d}t d}t d}t d}| tdt |tdt |tdt |tdtt  |tdtt  d	|  | d
 ksJJ | d	 | ksRJ | | }|}||ks^J |||ksgJ | d	 | ksoJ | | }|}||ks{J |||ksJ t d}|tdd	t  | | dksJ | d d	ksJ | d	 | ksJ t d}	t d}
|	tdtd  |
td	dd	t  | d |	ksJ | d
 |
ksJ | d |	| ksJ | d
 |
| ksJ d S )Nr[   rf   tutrN   r]   ri      ra   r   lp1r   u2u3d   )rD   rR   r   r(   r-   r   r   )r[   rf   r   r   rv   ru   ut1ut2r   r   r   rK   rK   rL   test_mul_div   sD   r   c                  C   s,  t dt t t t ddksJ t tt ttddksJ tt t	t
 t	ddks/J dt t t } t t | tt t} |  tdd	ksLJ ttd tksVJ ttd tks`J td
} t| t t | dt dt fdt t ks|J | t t | dt dt fdt t ksJ d S )Nr]   ra   i  i  i'  ri   z6.0e+23l   !|8. l   eJ r      )r   r'   r,   r    r&   r!   r(   r   rJ   r"   r   nr   r.   r*   simplifyr   r   r   )r   rK   rK   rL   
test_units   s   " 04r   c                   C   s@   t dt td  tdksJ t dt td  tdksJ d S )N   rk      )r   r+   r$   r(   r)   rK   rK   rK   rL   test_issue_quart  s   "r   c                   C   s   t tk jsJ d S r   )r'   r,   is_RelationalrK   rK   rK   rL   test_issue_5565  s   r   c                   C   s   t dg dks
J t tg dksJ t tg dksJ t tg dks(J t td g dks4J t td g dks@J t td g dksLJ t td	 g d
ksXJ t dg dksbJ t tg dkslJ d S )Nr   )r   coulombscoulomb_constant)Cr   r   planck_charger   )/r'   r   cmry   ftr&   lymimmnmpmumydnmifeetr!   r$   mileyardr(   milesyardsinchesmetersmicronmicrons	decimeterr   	lightyear	nanometer	picometerr   
decimeters
kilometers
lightyears
micrometerr)   
nanometers
picometerscentimetersmicrometersmillimetersnautical_mileplanck_lengthnautical_milesastronomical_unitastronomical_unitsr   )Ddioptreoptical_powerri   )hahectareplanck_areark   )LlcLcldLdlmLmlliterr+   litersquarts	deciliter
centiliter
deciliters
millilitercentilitersmillilitersplanck_volumevoltage)Vrf   r   voltsplanck_voltage)gr   Dar%   mgugr   mmuamusgrammmusr"   poundtonnedaltonpoundsr7   	kilograms	microgram	milligram
metric_ton
micrograms
milligramsplanck_massmilli_mass_unitatomic_mass_unitatomic_mass_constant)r   r   r:   r$   r;   r"   rK   rK   rK   rL   test_find_unit  s   	r   c                  C   s|   t d} t| t | tksJ t| d td  | d| d  td  ks&J tttdks/J ttd tdt ks<J d S )Nxrk   ri   ra   )r	   r   r(   )r  rK   rK   rL   test_Quantity_derivative:  s
   .r  c               	   C   s   t d} t d}t| ttd  t t  t|tt t td t   | | s,J | | }tt	|}t
 |tdtdtdtdiksJJ d S )NrP   q2ri   r   ra   )rD   rE   set_quantity_dimensionr;   r>   r=   r<   r?   r9   r   r   r   r@   )rP   r  rS   r   rK   rK   rL   test_quantity_postprocessingB  s    r  c                  C   s  dt dftdksJ dtfttt ksJ dtt fttt dt dt   ks1J t	d\} }| |d  tft| t
 |t  ksLJ td	}t|tt  t| }dtt ftt|kslJ td
}td}|tddtt  |dtt  t|d | }tddtt ft|ksJ tddt t | d }dtdd  t dft|ksJ |||  }tddtdd tt tdd ft|ksJ t  dt dftdksJ W d    d S 1 sw   Y  d S )Nrl   ra   i  ri   $   rN   zx yr   cHr~   r   rk   r]   r   i  )r9   rE   r   r;   r(   r&   r<   r-   r#   r	   r'   r   rD   r  r   r   r   r   rR   r   r
   rH   )r  yr  pHr~   r   rT   rK   rK   rL   test_factor_and_dimensionT  sD   



$"r  c                  C   s   t   tdtt tddt t } W d    n1 sw   Y  | tddtt  | t|  }t   dtt ft	|ksDJ W d    d S 1 sOw   Y  d S )Nr~   rk   ri   r   )
rH   rD   r;   r<   r   r(   r-   rR   r
   r   )r~   rT   rK   rK   rL   "test_factor_and_dimension_with_Abs|  s    "r  c                  C   s  t d} t d}t d}| dt |dt |dt td}td}td}|||||}||||| ||||i}t	
|t	
| | |   kr^td	td
d  ksaJ  J t	|t	| | |   kr|dttd  fksJ  J d S )Nr   r   t1r  ra   r  r	  fr;   r<   ri   rN   )rD   rR   r&   r#   r-   r   r   r   subsrE   r   r   r;   r<   )r   r   r  r  r	  r  dfdxdl_dtrK   rK   rL   #test_dimensional_expr_of_derivative  s*   r  c                  C   sn   t d} t d}| dtt  |dtt  tt| tt| ks(J tt| | dks5J d S )Nr~   r   ra   )rD   rR   r(   r-   rE   r   r   )r~   r   rK   rK   rL   'test_get_dimensional_expr_with_function  s   r  c                  C   s  t ttdt ksJ t ttdt ksJ t ttdt ks!J t ttdt ks,J t ttdt ks7J t ttdt ksBJ t tdt ksMJ t tdt ksXJ d	t t	 } t | td
t t	 kskJ t | t
dt t
 ksxJ t | tt
gdt t
 ksJ d S )Ni   i   i   @l        l           l            i       rN   i (  iX  i `	 )r   r1   r0   r2   r3   r4   r5   r6   r/   r#   r*   )arK   rK   rL   test_binary_information  s   "r  c                  C   s   t d} t d}t d}|d|  |tjd | t d}t d}t d}|tjd | |d	| t|| t ||tgtjd d
 d | | t ksSJ d S )N
good_gradekilo_good_gradecenti_good_grader^   i charity_pointsmilli_charity_pointsmissions   ix rN   )rD   rR   r   rm   r   r)   r   )r  r  r  r  r  r  rK   rK   rL   -test_conversion_with_2_nonstandard_dimensions  s    
r  c                  C   s   t d\} }}| | }| ttd  td  |ti}||td td  ks(J || }|ttd  td  |ti}||tt td  ksIJ d S )Nzenergy mass forceri   )r	   r7   r(   r-   r  r8   )r?   r@   forceexpr1unitsexpr2rK   rK   rL   test_eval_subs  s   "r#  c                  C   sz   t tt d  t td ksJ t tt t  t d ks#J tddd} t tt |   t t|  ks;J d S )Nri   r   pT)positive)r   r$   r   r!   r	   )r$  rK   rK   rL   test_issue_14932  s   $"(r&  c                  C   s   ddl m} m} ddlm} t| jd u sJ t| jd u s J t| jd u s)J t| j	d u s2J t| j
d u s;J t| jd u sDJ |t| t|d usQJ td}| | }|jret|j| |hksgJ | d }|jrwt|j| dhksyJ d S )Nr   )r!   r$   )Eqr  ra   )sympy.physics.unitsr!   r$   sympy.core.relationalr'  r   is_zerois_positiveis_nonnegativeis_negativeis_algebraicis_rationalr   is_Addsetre   )r!   r$   r'  r  erK   rK   rL   test_issue_14547  s    r3  c                  C   s   t d} t 3 | t | dt  t| tdt ksJ td|  t t	t dt	 t ks2J W d    d S 1 s=w   Y  d S )Nstepri      r^   )
rD   rH   set_dimensionr;   set_scale_factorr(   r   r   r-   r   )r4  rK   rK   rL    test_deprecated_quantity_methods  s   
("r8  c                  C   s`   t d td} t| t t| d td}t|t t|d | | }t| d S )Nerrorry   ra   bad_exp)warningssimplefilterrD   rE   r  r;   set_quantity_scale_factorr   )ry   r:  rT   rK   rK   rL   test_issue_22164  s   
r>  c                  C   s^   ddl m} m}m} ddlm} | |d| ksJ |tt	diks&J |j
dks-J d S )Nr   )r   r   r   )	dimsys_SIi@B ri   g/K ;)r(  r   r   r   sympy.physics.units.systems.sir?  r   r   r   r;   rc   )r   r   r   r?  rK   rK   rL   test_issue_22819  s
   rA  c                  C   s   ddl m}  ddlm} td}td}t|| t|| |dt |dt dt	|d |d   }t
|d|  tdfksGJ d S )Nr   )E)r?   r[   rf   ra   ri   )sympy.core.numbersrB  r(  r?   rD   rE   r  rR   r   r   r   r9   )rB  r?   r[   rf   rT   rK   rK   rL   test_issue_20288  s   "rD  c                   C   sh   t jrJ tjr
J tjrJ tjrJ tjrJ tjrJ tjs#J tjs(J t	js-J t
js2J d S r   )r(   is_prefixedr   r    r-   r   r   r   r   r7   r5   rK   rK   rK   rL   test_prefixed_property   s   








rF  c                  C   s   ddl m}  t| D ],}t| |}t|tsq
|dr6t|ts,J | dt| |j	s6J | dq
t
ttttfD ]}t|tsPJ | dt| |j	sZJ | dq>tj	r`J tj	reJ d S )Nr   )definitions	_constantz" must be PhysicalConstant, but is z4 is not marked as physics constant when it should be)r(  rG  dirgetattrro   rD   endswithrC   typeis_physical_constantr8   r   r   r.   r   r(   r   )rG  rn   quantityconstrK   rK   rL   test_physics_constant,  s   


  
rP  )zr;  sympy.core.addr   sympy.core.functionr   r   rC  r   r   sympy.core.singletonr   sympy.core.symbolr   r	   $sympy.functions.elementary.complexesr
   &sympy.functions.elementary.exponentialr   r   (sympy.functions.elementary.miscellaneousr   (sympy.functions.elementary.trigonometricr   sympy.integrals.integralsr   r(  r   r   r   r   r   r   r   r   r   r   r   r   sympy.physics.units.definitionsr   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   5sympy.physics.units.definitions.dimension_definitionsr9   r:   r;   r<   r=   r>   r?   r@   sympy.physics.units.prefixesrA   rB   sympy.physics.units.quantitiesrC   rD   sympy.physics.units.systemsrE   sympy.testing.pytestrF   rG   rH   rI   rM   rO   rV   rg   rq   rt   rz   r}   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r#  r&  r3  r8  r>  rA  rD  rF  rP  rK   rK   rK   rL   <module>   sh    8|(
9(
	
