o
    GZh.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   X/var/www/auris/lib/python3.10/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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 )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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 d S )NZs10ZsabbrabbrevrM   udamr&        rP   )rE   rQ   r-   r(   rC   scale_factor	dimensionr=   rW   r   r<   funcargs)rR   rX   r&   vrJ   rJ   rK   test_Quantity_definition?   s&   ra   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 )NrX   omrV      Zikm     )rE   rQ   r   Oner(   namer   rW   r\   
isinstancer   rC   rX   rJ   rJ   rK   test_abbrevY   s   rj   c                  C   s0   t ddd} t| dksJ t| dksJ d S )NZunitnamerY   rV   )rE   reprrI   ri   rJ   rJ   rK   
test_printo   s   rl   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 )	NrX   rY   rV   v1v2ZdsZv3dm)rE   )rX   r`   rJ   rJ   rK   test_Quantity_equ   s   rp   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 )NrX   r`   wrM   rZ   rc      )	rE   rQ   r   r(   r-   rh   r   r   ZHalf)rX   r`   rq   rJ   rJ   rK   test_add_sub   s     rs   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dtdiksNJ tttd ksXJ d S )Nv_w1v_w2v_w3rr   rc   )rE   rQ   r(   r-   r
   rF   get_dimensional_exprr<   r=   rg   r:   get_dimension_systemget_dimensional_dependenciesr   )rt   ru   rv   rS   DqrJ   rJ   rK   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 )NrX   r`   rq   rM   rZ   rc   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   rq   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 Nrr   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      s    )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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 )NrX   r`   tutrM   rZ   rc      rr   rw   lp1r   u2u3d   )rE   rQ   r   r(   r-   r   r   )rX   r`   r   r   rn   rm   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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 )NrZ   rr   i  i  i'  rc   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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   rd      )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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   coulombsZcoulomb_constant)Cr   r   Zplanck_charger   )1r'   r   cmro   ftr&   ZlymimmnmpmZumZydZnmi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_unitsrw   )DZdioptreZoptical_powerrc   )ZhaZhectareZplanck_areard   )LlZcL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s&J tttdks/J ttd tdt ks<J d S )Nxrd   rc   rr   )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   | | s,J | | }tt	|}t
 |tdtdtdtdiksJJ d S )NrO   q2rc   rw   rr   )rE   rF   set_quantity_dimensionr<   r?   r>   r=   r@   r:   rx   ry   rz   rA   )rO   r   rR   r{   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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 d S )Nre   rr   i  rc   $   rM   zx yr   cHrt   ru   rd   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pHrt   ru   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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   rr   r   r   fr<   r=   rc   rM   )rE   rQ   r&   r#   r-   r   r   r   subsrF   rx   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s(J tt| | dks5J d S )Nrt   ru   rr   )rE   rQ   r(   r-   rF   rx   r   )rt   ru   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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       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sSJ d S )N
good_gradekilo_good_gradecenti_good_grader[   i charity_pointsmilli_charity_pointsmissions   ix rM   )rE   rQ   r   rf   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s(J || }|ttd  td  |ti}||tt td  ksIJ d S )Nzenergy mass forcerc   )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s#J tddd} t tt |   t t|  ks;J d S )Nrc   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 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   rr   )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errorro   rr   bad_exp)warningssimplefilterrE   rF   r   r<   set_quantity_scale_factorr~   )ro   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sJ |tt	diks&J |j
dks-J d S )Nr   )r   r   r   )	dimsys_SIi@B rc   g/K ;)r   r   r   r   Zsympy.physics.units.systems.sir   r   rz   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sGJ d S )Nr   E)r@   rX   r`   rr   rc   )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
 |s\J dt|
 }t
|d|  tdfksqJ d S )Nr   r   )	impedancecapacitancer=   r   faradr-   Rr   Trr   )r   r   r   r   r   r=   r   r   r-   rE   rF   r   rQ   r~   ry   Zis_dimensionlessr   r:   )r   r   r   r=   r   r   r-   r   r   r   rS   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(   V1rr   A1rc   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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(   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 ],}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   )definitionsZ	_constantz" must be PhysicalConstant, but is z4 is not marked as physics constant when it should be)r   r   dirgetattrrh   rE   endswithrD   typeZis_physical_constantr8   r   r   r.   r   r(   r   )r   rg   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   ra   rj   rl   rp   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   rJ   rJ   rJ   rK   <module>   sh    8(
9%
