+
    i&                        R t ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHt ^ RIHtHt ^ RIHt ^ RIHt ^ RI H!t! ^ RI"H#t# R t$RR lt%RR R llt&RR lt'R# )zA
Several methods to simplify expressions involving unit objects.
)reduce)Iterable)Optional)default_sort_key)Add)Tuple)Mul)Pow)ordered)sympify)Function)NonInvertibleMatrixError)	DimensionDimensionSystem)Prefix)Quantity
UnitSystem)siftc                 n   ^ RI Hp VP                  4       p\        VP	                  V 4      4      pVP                  VRR7      pV Uu. uF  p\        VP	                  V4      4      NK  	  ppV UU	u. uF  qtP                  VRR7       F  qNK  	  K  	  p
pp	\        V4      pVP                  \        V
4      4      '       g   R# \        4       pV
 U	u. uF&  qV9   d   K  VP                  V	4      '       d   K$  V	NK(  	  p
p	T! V
 UU	u. uF4  q U	u. uF%  qP                  V	RR7      P                  V^ 4      NK'  	  up	NK6  	  up	p4      pT! V
 Uu. uF  qP                  V^ 4      NK  	  up4      p VP                  V4      pV# u upi u up	pi u up	i u up	i u up	pi u upi   \         d     R# i ; i)    )MatrixTmark_dimensionlessN)sympy.matrices.denser   get_dimension_systemr   get_dimensional_exprget_dimensional_dependenciessetissubsetaddgetsolver   )exprtarget_unitsunit_systemr   dimension_systemexpr_dimdim_dependenciesxtarget_dimsicanon_dim_unitscanon_expr_unitsseenjcamatkexprmatres_exponentss   &&&               V/var/www/html/photoedit/myenv/lib/python3.14/site-packages/sympy/physics/units/util.py_get_conversion_matrix_for_exprr5      s   +"77999$?@H'DDXbfDgKWX<a9[==a@A<KX"-  B+Q7d7def{7d  8A!q  8Aq+O  B+,$$S%9::5D"1T/Qt)qtxxPQ{qq/OT  IX  Y  IX  DEr}~r}mnBB1Y]B^bbcdfghr}~  IX  Y  ZE/J/Q**1a0/JKGG, % Y B U~  YJ $ sN   #F2#F
F F9FF
+F;F
F 2F% F
%F43F4c                "  aaa ^ RI Hp VP                  ! S4      o\        S\        \
        34      '       g   S.oVV3R lp\        V \        4      '       d	   V! V 4      # \        V \        4      '       dD   \        V P                  \        4      '       d$   V! V P                  4      V P                  ,          # \        V 4      p \        S4      o\        V \        4      '       d   V P                  4       p \        V \        4      '       g4   V P                  \        4      '       d   V P                  R VV3R l4      p VV3R lo\!        V SS4      pVf   V # S! V 4      pV\"        P$                  ! V3R l\'        SV4       4       4      ,          # )aT  
Convert ``expr`` to the same expression with all of its units and quantities
represented as factors of ``target_units``, whenever the dimension is compatible.

``target_units`` may be a single unit/quantity, or a collection of
units/quantities.

Examples
========

>>> from sympy.physics.units import speed_of_light, meter, gram, second, day
>>> from sympy.physics.units import mile, newton, kilogram, atomic_mass_constant
>>> from sympy.physics.units import kilometer, centimeter
>>> from sympy.physics.units import gravitational_constant, hbar
>>> from sympy.physics.units import convert_to
>>> convert_to(mile, kilometer)
25146*kilometer/15625
>>> convert_to(mile, kilometer).n()
1.609344*kilometer
>>> convert_to(speed_of_light, meter/second)
299792458*meter/second
>>> convert_to(day, second)
86400*second
>>> 3*newton
3*newton
>>> convert_to(3*newton, kilogram*meter/second**2)
3*kilogram*meter/second**2
>>> convert_to(atomic_mass_constant, gram)
1.660539060e-24*gram

Conversion to multiple units:

>>> convert_to(speed_of_light, [meter, second])
299792458*meter/second
>>> convert_to(3*newton, [centimeter, gram, second])
300000*centimeter*gram/second**2

Conversion to Planck units:

>>> convert_to(atomic_mass_constant, [gravitational_constant, speed_of_light, hbar]).n()
7.62963087839509e-20*hbar**0.5*speed_of_light**0.5/gravitational_constant**0.5

r   c                 Z   < \         P                  ! VV3R  lV P                   4       4      # )c              3   >   <"   T F  p\        VSS4      x  K  	  R # 5iN
convert_to).0r+   r$   r%   s   & r4   	<genexpr>2convert_to.<locals>.handle_Adds.<locals>.<genexpr>g   s$        'q,DDs   )r   fromiterargs)r#   r$   r%   s   &r4   handle_Addsconvert_to.<locals>.handle_Addsf   s%    ||  YY    	     c                 "    \        V \        4      # r9   )
isinstancer   )r)   s   &r4   <lambda>convert_to.<locals>.<lambda>v   s    jH&=rC   c                 (   < V P                  SS4      # r9   r:   )r)   r$   r%   s   &r4   rF   rG   w   s    all<=rC   c           	      X  < \        V \        4      '       d.   \        R  V P                   Uu. uF  pS! V4      NK  	  up4      # \        V \        4      '       d$   S! V P
                  4      V P                  ,          # \        V \        4      '       d   SP                  V 4      # V # u upi )c                     W,          # r9    )r)   ys   &&r4   rF   <convert_to.<locals>.get_total_scale_factor.<locals>.<lambda>{   s    qurC   )	rE   r   r   r@   r	   baseexpr   get_quantity_scale_factor)r#   r+   get_total_scale_factorr%   s   & r4   rQ   *convert_to.<locals>.get_total_scale_factory   s    dC  ,48II>Iq'*I>@ @c"")$))4@@h''88>> ?s   B'
c              3   b   <"   T F$  w  r^S! V4      ,          V,          V,          x  K&  	  R# 5i)   NrK   )r<   uprQ   s   &  r4   r=   convert_to.<locals>.<genexpr>   s2      ,#! 04q!!$	$Q	&**!s   ,/)sympy.physics.unitsr   get_unit_systemrE   r   r   r   r	   rN   rO   r   r   togetherr   hasreplacer5   r   r?   zip)r#   r$   r%   r   rA   depmatexpr_scale_factorrQ   s   &ff    @r4   r;   r;   4   s6   X /,,[9KlXu$566$~  $4  	D#		:dii#=#=499%114=D<(L$!!}}dH%%$((8*<*<||==? -T<MF~.t4s|| ,#L&!,#  # # #rC   Nc                $    V ^8  d   QhR\         /# )   across_dimensions)bool)formats   "r4   __annotate__re      s     A At ArC   c           	        V P                   '       g!   V P                  \        \        4      '       g   V # V P	                  \        4      pT P                  V Uu/ uF  q3VP                  bK  	  up4      p \        V P	                  \        4      R 4      pV F  p\        WE,          4      ^8X  d   K  \        \        WE,          4      4      pV^ ,          V^ ,          P                  ,          pT P                  VR,           Uu/ uF  qWxP                  ,          bK  	  up4      p K  	  V'       d   Vf   \        R4      h\        P                  ! V4      pVP                  4       p	VP                  V 4      p
V	P!                  V
RR7      pRpV	P"                  P%                  4        F  w  rW8X  g   K  Tp M	  Vf   V # VP&                  P)                  V4      pV'       d   \+        WV4      p V # u upi u upi )a  Return an equivalent expression in which prefixes are replaced
with numerical values and all units of a given dimension are the
unified in a canonical manner by default. `across_dimensions` allows
for units of different dimensions to be simplified together.

`unit_system` must be specified if `across_dimensions` is True.

Examples
========

>>> from sympy.physics.units.util import quantity_simplify
>>> from sympy.physics.units.prefixes import kilo
>>> from sympy.physics.units import foot, inch, joule, coulomb
>>> quantity_simplify(kilo*foot*inch)
250*foot**2/3
>>> quantity_simplify(foot - 6*inch)
foot/2
>>> quantity_simplify(5*joule/coulomb, across_dimensions=True, unit_system="SI")
5*volt
c                     V P                   # r9   )	dimension)r+   s   &r4   rF   #quantity_simplify.<locals>.<lambda>   s    Q[[rC   :rT   NNNz:unit_system must be specified if across_dimensions is TrueTr   )is_Atomr[   r   r   atomsxreplacescale_factorr   lenlistr
   
ValueErrorr   rY   r   r   r   dimensional_dependenciesitemsderived_unitsr!   r;   )r#   rb   r%   rV   dr1   vrefvir&   dim_exprdim_depstarget_dimensionds_dimds_dim_depstarget_units   &&&             r4   quantity_simplifyr~      s   , |||488FH55 	

6A==Q7QQ^^+Q78D 	TZZ!#89Aqt9>d1Q4$$$}}"F"#oo"55FG   YZZ 00=,7,L,L,N33D9#@@^b@c04#3#L#L#R#R#TF&#)  $U
 #K!//334DEd=DKM 8 Gs   G0G5
c                   ^ RI Hp VP                  ! V4      pR pV P                  \        4      pVP                  4       P                  pV EF]  p\        4       pVP                   EF>  pVP                  '       d   VP                  R4       K)  . p	Rp
/ p\        P                  ! V4       Fy  pVP                  \        4      '       d   \        VP!                  V4      4      pVP                  \        4      '       d   V! W! V4      4      pKc  VP"                  '       g   Kw  Rp
 M	  V	P%                  VP'                  4       4       V
'       d   K  VP                  \)        \+        V	\,        R7      4      4       \/        V4      ^8  g   EK'  \1        RP3                  V4      4      h	  EK`  	  / pV P                  \        4       F  p\4        ;QJ d&    R VP                   4       F  '       g   K   RM	  RM! R VP                   4       4      '       g   KS  VP6                  ! VP                   Uu. uF  qP                  '       d   K  VNK  	  up!  W&   K  	  V P9                  V4      # u upi )	zWReturn expr if units in addends have the same
base dimensions, else raise a ValueError.r   c                    / V CVCpVP                  4        F&  w  r4W09   g   K  W19   g   K  W@V,          ,           W#&   K(  	  VP                  4        UUu/ uF  w  r5V^ 8w  g   K  W5bK  	  upp# u uppi )zUMerge dictionaries by adding values of common keys and
removing keys with value of 0.)rr   )dict1dict2dict3keyvaluevals   &&    r4   addDict!check_dimensions.<locals>.addDict   sh     #5"E"++-JC|"3Z/
 ( ).BHCBBBs   A.$A.FT)r   z(addends have incompatible dimensions: {}c              3   B   "   T F  p\        V\        4      x  K  	  R # 5ir9   )rE   r   )r<   r+   s   & r4   r=   #check_dimensions.<locals>.<genexpr>  s     8Az!Y''s   rK   )rX   r   rY   rk   r   r   r   r   r@   	is_numberr    r   	make_argsr[   r   r   r   free_symbolsextendrr   tuplesortedr   rn   rp   rd   anyfuncrl   )r#   r%   r   r   addsDIM_OFadesetaidimsskipdimdictr+   repsms   &&             r4   check_dimensionsr      s    /,,[9KC ::c?D--/LLF&&B|||		"DDG]]2&55??!+"B"B1"EFA55##%gvay9G^^^D ' KK(4		%t1A BCDu:>$BII%PR R'  4 DZZ_3883338888ff666!a66 7DG 
 ==6s   3I-
I-
)SI)FN)(__doc__	functoolsr   collections.abcr   typingr   sympyr   sympy.core.addr   sympy.core.containersr   sympy.core.mulr   sympy.core.powerr	   sympy.core.sortingr
   sympy.core.sympifyr   sympy.core.functionr   sympy.matrices.exceptionsr   sympy.physics.units.dimensionsr   r   sympy.physics.units.prefixesr   sympy.physics.units.quantitiesr   sympy.physics.units.unitsystemr   sympy.utilities.iterablesr   r5   r;   r~   r   rK   rC   r4   <module>r      sW     $  "  '    & & ( > E / 3 5 *8V#rAH8rC   