o
    jgb0                     @   s  d 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mZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ e	Z%e"Z&eZ'eZ(eZ)ddl*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lEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z mZmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZm dd	lnmoZompZpmqZq dddZrg dZsdS )aK  
Dimensional analysis and unit systems.

This module defines dimension/unit systems and physical quantities. It is
based on a group-theoretical construction where dimensions are represented as
vectors (coefficients being the exponents), and units are defined as a dimension
to which we added a scale.

Quantities are built from a factor and a unit, and are the basic objects that
one will use when doing computations.

All objects except systems and prefixes can be used in SymPy expressions.
Note that as part of a CAS, various objects do not combine automatically
under operations.

Details about the implementation can be found in the documentation, and we
will not repeat all the explanations we gave there concerning our approach.
Ideas about future developments can be found on the `Github wiki
<https://github.com/sympy/sympy/wiki/Unit-systems>`_, and you should consult
this page if you are willing to help.

Useful functions:

- ``find_unit``: easily lookup pre-defined units.
- ``convert_to(expr, newunit)``: converts an expression into the same
    expression expressed in another unit.

   )	DimensionDimensionSystem)
UnitSystem)
convert_to)Quantity)amount_of_substanceaccelerationactionareacapacitancechargeconductancecurrentenergyforce	frequency	impedance
inductancelengthluminous_intensitymagnetic_densitymagnetic_fluxmassmomentumpowerpressuretemperaturetimevelocityvoltagevolume)yottazettaexapetateragigamegakilohectodecadecicentimillimicronanopicofemtoattozeptoyoctokibimebigibitebipebiexbi((  percentpercentspermilleradradianradiansdegdegreedegreessr	steradian
steradiansmilangular_milangular_milsmmetermeterskgkilogram	kilogramsssecondsecondsAampereamperesKkelvinkelvinsmolmolemolescdcandelacandelasggramgramsmg	milligram
milligramsug	microgram
microgramsttonne
metric_tonnewtonnewtonsNjoulejoulesJwattwattsWpascalpascalsPapahertzhzHzcoulombcoulombsCvoltvoltsvVohmohmssiemensSmhomhosfaradfaradsFhenryhenrysHteslateslasTweberwebersWbwboptical_powerdioptreDluxlxkatalkatgrayGy	becquerelBqkm	kilometer
kilometersdm	decimeter
decimeterscm
centimetercentimetersmm
millimetermillimetersum
micrometermicrometersmicronmicronsnm	nanometer
nanometerspm	picometer
picometersftfootfeetinchinchesydyardyardsmimilemilesnminautical_milenautical_milesangstrom	angstromshahectarelLliterlitersdldL	deciliter
decilitersclcL
centilitercentilitersmlmL
millilitermillilitersmsmillisecondmillisecondsusmicrosecondmicrosecondsns
nanosecondnanosecondsps
picosecondpicosecondsminuteminuteshhourhoursdaydaysanomalistic_yearanomalistic_yearssidereal_yearsidereal_yearstropical_yeartropical_yearscommon_yearcommon_yearsjulian_yearjulian_yearsdraconic_yeardraconic_yearsgaussian_yeargaussian_yearsfull_moon_cyclefull_moon_cyclesyearyearsGgravitational_constantcspeed_of_lightelementary_chargehbarplanckeVelectronvoltelectronvoltsavogadro_numberavogadroavogadro_constant	boltzmannboltzmann_constantstefanstefan_boltzmann_constantRmolar_gas_constantfaraday_constantjosephson_constantvon_klitzing_constantDadaltonamuamusatomic_mass_unitatomic_mass_constantmeelectron_rest_massgeegeesacceleration_due_to_gravityu0magnetic_constantvacuum_permeabilitye0electric_constantvacuum_permittivityZ0vacuum_impedancecoulomb_constantelectric_force_constant
atmosphereatmospheresatmkPabarbarspoundpoundspsidHg0mmHgtorrmmummusmilli_mass_unitquartquartsly	lightyear
lightyearsauastronomical_unitastronomical_unitsplanck_massplanck_timeplanck_temperatureplanck_lengthplanck_chargeplanck_areaplanck_volumeplanck_momentumplanck_energyplanck_forceplanck_powerplanck_densityplanck_energy_densityplanck_intensityplanck_angular_frequencyplanck_pressureplanck_currentplanck_voltageplanck_impedanceplanck_accelerationbitbitsbytekibibyte	kibibytesmebibyte	mebibytesgibibyte	gibibytestebibyte	tebibytespebibyte	pebibytesexbibyte	exbibytes)mksmksasiSIc                    s  t |}ddlm  m g }t tr3 fddtD }t }t|t	r2|
t| nJttD ]C}t|}t|tsFq9t trY j|jkrX|t| q9t t	rk|j krj|t| q9|jt	| kr||t| q9tt|dd dS )aK  
    Return a list of matching units or dimension names.

    - If ``quantity`` is a string -- units/dimensions containing the string
    `quantity`.
    - If ``quantity`` is a unit or dimension -- units having matching base
    units or dimensions.

    Examples
    ========

    >>> from sympy.physics import units as u
    >>> u.find_unit('charge')
    ['C', 'coulomb', 'coulombs', 'planck_charge', 'elementary_charge']
    >>> u.find_unit(u.charge)
    ['C', 'coulomb', 'coulombs', 'planck_charge', 'elementary_charge']
    >>> u.find_unit("ampere")
    ['ampere', 'amperes']
    >>> u.find_unit('angstrom')
    ['angstrom', 'angstroms']
    >>> u.find_unit('volt')
    ['volt', 'volts', 'electronvolt', 'electronvolts', 'planck_voltage']
    >>> u.find_unit(u.inch**3)[:9]
    ['L', 'l', 'cL', 'cl', 'dL', 'dl', 'mL', 'ml', 'liter']
        Nc                    s(   g | ]} |v rt t|tr|qS  )
isinstancegetattrr   ).0iquantityurh  T/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/physics/units/__init__.py
<listcomp>   s   ( zfind_unit.<locals>.<listcomp>c                 S   s   t | | fS )N)len)xrh  rh  rp  <lambda>  s    zfind_unit.<locals>.<lambda>)key)r   get_unit_systemsympy.physics.unitsphysicsunitsri  strdirrj  r   extend	find_unitsortedr   	dimensionappendget_dimensional_exprset)rn  unit_systemrvdimrl  otherrh  rm  rp  r}     s2   








r}  (i  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    Unitspeed
luminositymagnetic_flux_densityamountr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   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   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   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   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  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/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  N)rf  (t  __doc__
dimensionsr   r   
unitsystemr   utilr   
quantitiesr   !definitions.dimension_definitionsr   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  prefixesr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   definitionsr;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   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   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   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   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  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/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  systemsrc  rd  re  r}  __all__rh  rh  rh  rp  <module>   s.   p	p     l  "6