a
    kh.M                     @   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@mAZAmBZBmCZCmDZD d dlEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZM d dlNmOZOmPZP d dlQmRZRmSZS d dlTmUZU d dlVmWZW eOd ZXdd 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/ Zfd0d1 Zgd2d3 Zhd4d5 Zid6d7 Zjd8d9 Zkd:d; Zld<d= Zmd>d? Znd@dA ZodBdC ZpdDdE ZqdFdG ZrdHdI ZsdJdK ZtdLdM ZudNdO ZvdPdQ ZwdRdS ZxdTdU ZydS )V    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electron_rest_mass)	Dimensionchargelengthtimetemperaturepressureenergymass)PREFIXESkilo)PhysicalConstantQuantity)SI)raiseskc                   C   s   t tdksJ d S )Nr7   )strr%    rJ   rJ   W/var/www/auris/lib/python3.9/site-packages/sympy/physics/units/tests/test_quantities.pytest_str_repr#   s    rL   c                   C   s,   dt  dt  ksJ dt  dt ks(J d S )N
   )r'   r,   rJ   rJ   rJ   rK   test_eq'   s    rN   c                  C   s   t d} | tdt | tdt ks.J ttt dt t ksLJ ttdt ksbJ | t| kstJ tttksJ t	t
 }t|t	}|t	t
 ksJ d S )Nq1  iJxiQ )rE    set_global_relative_scale_factorr   r(   r   r'   r.   r,   r    r   r-   )qexprconvrJ   rJ   rK   test_convert_to-   s    
rU   c                  C   s  t ddd} | dt t ddd}|dt t d}|tt t d}|dt t | jdksjJ | jtksxJ | jt	dksJ |jt
ksJ |jdksJ |jt	dksJ |jd	ksJ |j|j |ksJ |j|j j|jksJ |jt
ksJ |jd
ksJ d S )NZs10ZsabbrabbrevrM   udamr&        rP   )rE   rQ   r-   r(   rC   scale_factorZ	dimensionr=   rW   r   r<   funcargs)rR   rX   r&   vrJ   rJ   rK   test_Quantity_definition?   s&    r`   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shJ | jtdkszJ | jdksJ t	| jt
sJ t ddd} | dt t | jtdksJ | jdksJ d S )NrX   ZomrV      Zikm     )rE   rQ   r   Oner(   namer   rW   r\   
isinstancer   rC   rX   rJ   rJ   rK   test_abbrevY   s    rh   c                  C   s0   t ddd} t| dksJ t| dks,J d S )NZunitnamerY   rV   )rE   reprrI   rg   rJ   rJ   rK   
test_printo   s    rj   c                  C   sT   t ddd} t d}| |ks J t ddd}| |ks8J t ddd}| |ksPJ d S )	NrX   rY   rV   v1v2ZdsZv3dm)rE   )rX   r_   rJ   rJ   rK   test_Quantity_equ   s    rn   c                  C   s   t d} t d}t d}| tdt |tdt |tdt t| | tsZJ | ||  dtj |  kszJ t| | tsJ | ||  tj|  ksJ d S )NrX   r_   wrM   rZ   ra      )	rE   rQ   r   r(   r-   rf   r   r   ZHalf)rX   r_   ro   rJ   rJ   rK   test_add_sub   s     rq   c                  C   s   t d} t d}t d}| dtt  |dtt  |dtt  |t| |  }t| tt j	kspJ t
t|}t |tdtdiksJ tttd ksJ d S )Nv_w1v_w2v_w3rp   ra   )rE   rQ   r(   r-   r
   rF   get_dimensional_exprr<   r=   re   r:   get_dimension_systemget_dimensional_dependenciesr   )rr   rs   rt   rS   DqrJ   rJ   rK   test_quantity_abs   s    
rz   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 )NrX   r_   ro   rM   rZ   ra   c                 S   s   t |  d S N)rF   _collect_factor_and_dimension)rS   rJ   rJ   rK   check_unit_consistency   s    z;test_check_unit_consistency.<locals>.check_unit_consistencyc                      s     S r{   rJ   rJ   r}   rX   ro   rJ   rK   <lambda>       z-test_check_unit_consistency.<locals>.<lambda>c                      s     S r{   rJ   rJ   r~   rJ   rK   r      r   c                      s    d S Nrp   rJ   rJ   r}   rX   rJ   rK   r      r   c                      s    d S r   rJ   rJ   r   rJ   rK   r      r   c                      s    dt   S r   )r   rJ   r~   rJ   rK   r      r   )rE   rQ   r   r(   r-   rG   
ValueError)r_   rJ   r~   rK   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sJ | d	 | ksJ | | }|}||ksJ |||ksJ | d	 | ksJ | | }|}||ksJ |||ks
J t d}|tdd	t  | | dks8J | d d	ksJJ | d	 | ks\J 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 )NrX   r_   tutrM   rZ   ra      rp   ru   lp1r   u2u3d   )rE   rQ   r   r(   r-   r   r   )rX   r_   r   r   rl   rk   Zut1Zut2r   r   r   rJ   rJ   rK   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sJ ttd tksJ ttd tksJ td
} t| t t | dt dt fdt t ksJ | t t | dt dt fdt t ks*J d S )NrZ   rp   i  i  i'  ra   z6.0e+23l   !|8. l   eJ r      )r   r'   r,   r    r&   r!   r(   r   rI   r"   r   nr   r.   r*   simplifyr   r   r   )r   rJ   rJ   rK   
test_units   s    " 0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   rb      )r   r+   r$   r(   r)   rJ   rJ   rJ   rK   test_issue_quart  s    r   c                   C   s0   t ttdt ksJ t ttdt ks,J d S )Ngy9goR:)r   r9   r7   r"   rJ   rJ   rJ   rK   test_electron_rest_mass
  s    r   c                   C   s   t tk jsJ d S r{   )r'   r,   Zis_RelationalrJ   rJ   rJ   rK   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sPJ t td g dkshJ t td g dksJ t td g dksJ t td	 g d
ksJ t dg dksJ t tg dksJ d S )Nr   )r   coulombsZcoulomb_constant)Cr   r   Zplanck_charger   )1r'   r   cmrm   ftr&   ZlymimmnmZpmZumZydZnmiZfeetr!   r$   ZmileZyardr(   ZmilesZyardsZinchesZmetersZmicronZmicronsZangstromZ	angstromsZ	decimeterr   Z	lightyearZ	nanometerZ	picometerr   Z
decimetersZ
kilometersZ
lightyearsZ
micrometerr)   Z
nanometersZ
picometersZcentimetersZmicrometersZmillimetersZnautical_mileZplanck_lengthZnautical_milesZastronomical_unitZastronomical_unitsru   )DZdioptreZoptical_powerra   )ZhaZhectareZplanck_arearb   )LlZcLZclZdLdlZmLmlZliterr+   ZlitersZquartsZ	deciliterZ
centiliterZ
decilitersZ
milliliterZcentilitersZmillilitersZplanck_volumeZvoltage)Vr_   r   ZvoltsZplanck_voltage)gr   Dar%   meZmgZugr   ZmmuZamusgramZmmusr"   poundtonneZdaltonZpoundsr7   Z	kilogramsZ	microgramZ	milligramZ
metric_tonZ
microgramsZ
milligramsZplanck_massZmilli_mass_unitZatomic_mass_unitr9   Zatomic_mass_constant)r   r   r;   r$   r<   r"   rJ   rJ   rJ   rK   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sLJ tttdks^J ttd tdt ksxJ d S )Nxrb   ra   rp   )r	   r   r(   )r   rJ   rJ   rK   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   | | sXJ | | }tt	|}t
 |tdtdtdtdiksJ d S )NrO   q2ra   ru   rp   )rE   rF   set_quantity_dimensionr<   r?   r>   r=   r@   r:   rv   rw   rx   rA   )rO   r   rR   ry   rJ   rJ   rK   test_quantity_postprocessing5  s     r   c                  C   s  dt dftdksJ dtfttt ks4J dtt fttt dt dt   ksbJ t	d\} }| |d  tft| t
 |t  ksJ td	}t|tt  t| }dtt ftt|ksJ td
}td}|tddtt  |dtt  t|d | }tddtt ft|ks@J 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 d S )Nrc   rp   i  ra   $   rM   zx yr   cHrr   rs   rb   rZ   r   i  )r:   rF   r|   r<   r(   r&   r=   r-   r#   r	   r'   r   rE   r   r   r   r   r   rQ   r   r
   )r   yr   ZpHrr   rs   rS   rJ   rJ   rK   test_factor_and_dimensionG  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rtd	td
d  ksn J t	|t	| | |   krdttd  fksn J d S )Nr   r   t1r   rp   r   r   fr<   r=   ra   rM   )rE   rQ   r&   r#   r-   r   r   r   subsrF   rv   r|   r<   r=   )r   r   r   r   r   r   ZdfdxZdl_dtrJ   rJ   rK   #test_dimensional_expr_of_derivativel  s*    r   c                  C   sn   t d} t d}| dtt  |dtt  tt| tt| ksPJ tt| | dksjJ d S )Nrr   rs   rp   )rE   rQ   r(   r-   rF   rv   r   )rr   rs   rJ   rJ   rK   '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sBJ t ttdt ksXJ t ttdt ksnJ t ttdt ksJ t tdt ksJ t tdt ksJ d	t t	 } t | td
t t	 ksJ t | t
dt t
 ksJ t | tt
gdt t
 ksJ d S )Ni   i   i   @l        l           l            i       rM   i (  iX  i `	 )r   r1   r0   r2   r3   r4   r5   r6   r/   r#   r*   )arJ   rJ   rK   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sJ d S )N
good_gradekilo_good_gradecenti_good_grader[   i charity_pointsmilli_charity_pointsmissions   ix rM   )rE   rQ   r   rd   r   r)   r   )r   r   r   r   r   r   rJ   rJ   rK   -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sPJ || }|ttd  td  |ti}||tt td  ksJ d S )Nzenergy mass forcera   )r	   r7   r(   r-   r   r8   )r@   rA   forceexpr1ZunitsZexpr2rJ   rJ   rK   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sFJ tddd} t tt |   t t|  ksvJ d S )Nra   r   pT)Zpositive)r   r$   r   r!   r	   )r   rJ   rJ   rK   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 sRJ t| j	d u sdJ t| j
d u svJ t| jd u sJ |t| t|d usJ td}| | }|jrt|j| |hksJ | d }|jrt|j| dhksJ d S )Nr   )r!   r$   )Eqr   rp   )sympy.physics.unitsr!   r$   Zsympy.core.relationalr   r   is_zeroZis_positiveZis_nonnegativeZis_negativeZis_algebraicZis_rationalr   Zis_Addsetr^   )r!   r$   r   r   erJ   rJ   rK   test_issue_14547  s    r   c                  C   s`   t d td} t| t t| d td}t|t t|d | | }t| d S )Nerrorrm   rp   bad_exp)warningssimplefilterrE   rF   r   r<   set_quantity_scale_factorr|   )rm   r   rS   rJ   rJ   rK   test_issue_22164  s    
r   c                  C   s^   ddl m} m}m} ddlm} | |d| ks6J |tt	diksLJ |j
dksZJ d S )Nr   )r   r   r   )	dimsys_SIi@B ra   g/K ;)r   r   r   r   Zsympy.physics.units.systems.sir   r   rx   r   r<   r\   )r   r   r   r   rJ   rJ   rK   test_issue_22819  s
    r   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sJ d S )Nr   E)r@   rX   r_   rp   ra   )sympy.core.numbersr   r   r@   rE   rF   r   rQ   r   r   r|   r:   )r   r@   rX   r_   rS   rJ   rJ   rK   test_issue_20288  s    r   c                  C   s   ddl m}  ddlm}m}m}m}m}m} t	d}t	d}t	d}	t
|| t
|| t
|	| |d| |d| |	d| |	||  }
t
|
d }t
 |sJ dt|
 }t
|d|  tdfksJ d S )Nr   r   )	impedancecapacitancer=   r   faradr-   Rr   Trp   )r   r   r   r   r   r=   r   r   r-   rE   rF   r   rQ   r|   rw   Zis_dimensionlessr   r:   )r   r   r   r=   r   r   r-   r   r   r   rS   ZdimZexp_exprrJ   rJ   rK   test_issue_24062  s      r   c            	      C   s   ddl m} m}m}m}m} td}t|| t	|d| |  td}t|| t	|d| |d   td}t||  t	|d|  || | }t
| d S )Nr   )r=   velocityaccelerationr-   r(   V1rp   A1ra   T1)r   r=   r   r   r-   r(   rE   rF   r   r   r|   )	r=   r   r   r-   r(   r   r   r   rS   rJ   rJ   rK   test_issue_24211  s    r   c                   C   sh   t jr
J tjrJ tjrJ tjr(J tjr2J tjr<J tjsFJ tjsPJ t	jsZJ t
jsdJ d S r{   )r(   Zis_prefixedr   r    r-   r   r   r   r   r7   r5   rJ   rJ   rJ   rK   test_prefixed_property#  s    








r   c                  C   s   ddl m}  t| D ]X}t| |}t|ts.q|drt|tsXJ | dt| |j	sJ | dqt
ttttfD ]8}t|tsJ | dt| |j	s|J | dq|tj	rJ tj	rJ d S )Nr   )definitionsZ	_constantz" must be PhysicalConstant, but is z4 is not marked as physics constant when it should be)r   r   dirgetattrrf   rE   endswithrD   typeZis_physical_constantr8   r   r   r.   r   r(   r   )r   re   ZquantityconstrJ   rJ   rK   test_physics_constant/  s    


  
r   )zr   Zsympy.core.addr   Zsympy.core.functionr   r   r   r   r   Zsympy.core.singletonr   Zsympy.core.symbolr   r	   Z$sympy.functions.elementary.complexesr
   Z&sympy.functions.elementary.exponentialr   r   Z(sympy.functions.elementary.miscellaneousr   Z(sympy.functions.elementary.trigonometricr   Zsympy.integrals.integralsr   r   r   r   r   r   r   r   r   r   r   r   r   r   Z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   r9   Z5sympy.physics.units.definitions.dimension_definitionsr:   r;   r<   r=   r>   r?   r@   rA   Zsympy.physics.units.prefixesrB   rC   Zsympy.physics.units.quantitiesrD   rE   Zsympy.physics.units.systemsrF   Zsympy.testing.pytestrG   rH   rL   rN   rU   r`   rh   rj   rn   rq   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rJ   rJ   rJ   rK   <module>   sf   8(
9%
