
~9\c           @   ss  d  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 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/ 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 d d
 lE 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 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 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 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 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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]d   Z^d S(   sK  
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.

i(   t   string_typesi   (   t	   Dimensiont   DimensionSystem(   t
   UnitSystem(   t
   convert_to(   t   Quantity(   t   amount_of_substancet   accelerationt   actiont   capacitancet   charget   conductancet   currentt   energyt   forcet	   frequencyt	   impedancet
   inductancet   lengtht   luminous_intensityt   magnetic_densityt   magnetic_fluxt   masst   momentumt   powert   pressuret   temperaturet   timet   velocityt   voltaget   volume(   t   yottat   zettat   exat   petat   terat   gigat   megat   kilot   hectot   decat   decit   centit   millit   microt   nanot   picot   femtot   attot   zeptot   yoctot   kibit   mebit   gibit   tebit   pebit   exbi(  t   percentt   percentst   permillet   radt   radiant   radianst   degt   degreet   degreest   srt	   steradiant
   steradianst   milt   angular_milt   angular_milst   mt   metert   meterst   kgt   kilogramt	   kilogramst   st   secondt   secondst   At   amperet   amperest   Kt   kelvint   kelvinst   molt   molet   molest   cdt   candelat   candelast   gt   gramt   gramst   mgt	   milligramt
   milligramst   ugt	   microgramt
   microgramst   newtont   newtonst   Nt   joulet   joulest   Jt   wattt   wattst   Wt   pascalt   pascalst   Pat   pat   hertzt   hzt   Hzt   coulombt   coulombst   Ct   voltt   voltst   vt   Vt   ohmt   ohmst   siemenst   St   mhot   mhost   faradt   faradst   Ft   henryt   henryst   Ht   teslat   teslast   Tt   webert   weberst   Wbt   wbt   optical_powert   dioptret   Dt   luxt   lxt   katalt   katt   grayt   Gyt	   becquerelt   Bqt   kmt	   kilometert
   kilometerst   dmt	   decimetert
   decimeterst   cmt
   centimetert   centimeterst   mmt
   millimetert   millimeterst   umt
   micrometert   micrometerst   micront   micronst   nmt	   nanometert
   nanometerst   pmt	   picometert
   picometerst   ftt   foott   feett   incht   inchest   ydt   yardt   yardst   mit   milet   milest   nmit   nautical_milet   nautical_milest   lt   litert   literst   dlt	   decilitert
   deciliterst   clt
   centilitert   centiliterst   mlt
   millilitert   milliliterst   mst   millisecondt   millisecondst   ust   microsecondt   microsecondst   nst
   nanosecondt   nanosecondst   pst
   picosecondt   picosecondst   minutet   minutest   ht   hourt   hourst   dayt   dayst   anomalistic_yeart   anomalistic_yearst   sidereal_yeart   sidereal_yearst   tropical_yeart   tropical_yearst   common_yeart   common_yearst   julian_yeart   julian_yearst   draconic_yeart   draconic_yearst   gaussian_yeart   gaussian_yearst   full_moon_cyclet   full_moon_cyclest   yeart   yearsR   t   Gt   gravitational_constantt   ct   speed_of_lightt   Z0t   hbart   planckt   eVt   electronvoltt   electronvoltst   avogadro_numbert   avogadrot   avogadro_constantt	   boltzmannt   boltzmann_constantt   stefant   stefan_boltzmann_constantt   Rt   molar_gas_constantt   faraday_constantt   josephson_constantt   von_klitzing_constantt   amut   amust   atomic_mass_unitt   atomic_mass_constantt   geet   geest   acceleration_due_to_gravityt   u0t   magnetic_constantt   vacuum_permeabilityt   e0t   electric_constantt   vacuum_permittivityR   t   vacuum_impedancet   coulomb_constantt   electric_force_constantt
   atmospheret   atmospherest   atmt   kPat   bart   barst   poundt   poundst   psit   dHg0t   mmHgt   torrt   mmut   mmust   milli_mass_unitt   quartt   quartst   lyt	   lightyeart
   lightyearst   aut   astronomical_unitt   astronomical_unitst   planck_masst   planck_timet   planck_temperaturet   planck_lengtht   planck_charget   planck_areat   planck_volumet   planck_momentumt   planck_energyt   planck_forcet   planck_powert   planck_densityt   planck_energy_densityt   planck_intensityt   planck_angular_frequencyt   planck_pressuret   planck_currentt   planck_voltaget   planck_impedancet   planck_accelerationt   bitt   bitst   bytet   kibibytet	   kibibytest   mebibytet	   mebibytest   gibibytet	   gibibytest   tebibytet	   tebibytest   pebibytet	   pebibytest   exbibytet	   exbibytesc         C   s  d d l  j j } g  } t |  t  r g  t |  D]0 } |  | k r4 t t | |  t  r4 | ^ q4 } t | |   } t | t  r| j	 t
 |   qn x t t |   D] } t | |  } t | t  s q n  t |  t  r|  j | j k r| j t |   qq t |  t  rO| j |  k r| j t |   qq | j t t j |    k r | j t |   q q Wt t |  d d   S(   s  
    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']
    >>> u.find_unit(u.charge)
    ['C', 'coulomb', 'coulombs', 'planck_charge']
    >>> u.find_unit("ampere")
    ['ampere', 'amperes']
    >>> u.find_unit('volt')
    ['volt', 'volts', 'electronvolt', 'electronvolts', 'planck_voltage']
    >>> u.find_unit(u.inch**3)[:5]
    ['l', 'cl', 'dl', 'ml', 'liter']
    iNt   keyc         S   s   t  |   |  f S(   N(   t   len(   t   x(    (    s;   lib/python2.7/site-packages/sympy/physics/units/__init__.pyt   <lambda>  t    (   t   sympy.physics.unitst   physicst   unitst
   isinstanceR    t   dirt   getattrR   R   t   extendt	   find_unitt   sortedt	   dimensiont   appendt   strt   get_dimensional_exprt   set(   t   quantityt   ut   rvt   it   dimt   other(    (    s;   lib/python2.7/site-packages/sympy/physics/units/__init__.pyR]     s(    CN(_  t   __doc__t   sympy.core.compatibilityR    t
   dimensionsR   R   t
   unitsystemR   t   utilR   t
   quantitiesR   R   R   R   R	   R
   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t   Unitt   speedt
   luminosityt   magnetic_flux_densityt   amountt   prefixesR   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   t   definitionsR9   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  R]  (    (    (    s;   lib/python2.7/site-packages/sympy/physics/units/__init__.pyt   <module>   s(   	      