73 lines
2.8 KiB
Diff
73 lines
2.8 KiB
Diff
# sympy__sympy-20442
|
|
# Loki Mode Multi-Agent Patch
|
|
# Attempts: 1
|
|
|
|
--- a/sympy/physics/units/util.py
|
|
+++ b/sympy/physics/units/util.py
|
|
@@ -14,7 +14,7 @@ from sympy.physics.units.dimensions import Dimension
|
|
from sympy.physics.units.prefixes import Prefix
|
|
from sympy.physics.units.quantities import Quantity
|
|
from sympy.utilities.iterables import sift
|
|
-from sympy.matrices.dense import zeros
|
|
+from sympy.core.add import Add
|
|
|
|
|
|
def _get_conversion_matrix_for_expr(expr, target_units, unit_system):
|
|
@@ -25,19 +25,24 @@ def _get_conversion_matrix_for_expr(expr, target_units, unit_system):
|
|
|
|
expr_dim = Dimension(unit_system.get_dimensional_expr(expr))
|
|
dim_dependencies = unit_system.get_dimension_dependencies(expr_dim)
|
|
- target_dims = [Dimension(unit_system.get_dimensional_expr(x)) for x in target_units]
|
|
- canon_dim_units = {i for x in target_dims for i in unit_system.get_dimension_dependencies(x)}
|
|
+ target_dims = [unit_system.get_dimension_dependencies(
|
|
+ Dimension(unit_system.get_dimensional_expr(x))) for x in target_units]
|
|
+ canon_dim_units = {i for x in target_dims for i in x}
|
|
canon_expr_units = set(dim_dependencies)
|
|
|
|
if not canon_expr_units.issubset(canon_dim_units):
|
|
return None
|
|
|
|
- camat = zeros(len(googol_dim_dependencies), len(target_dims))
|
|
- for i, td in enumerate(target_dims):
|
|
- canon_target_dim = unit_system.get_dimension_dependencies(td)
|
|
- for j, d in enumerate(canon_dim_units):
|
|
- camat[j, i] = canon_target_dim.get(d, 0)
|
|
-
|
|
seen = set()
|
|
canon_dim_units = [i for i in canon_dim_units if not (i in seen or seen.add(i))]
|
|
- return camat, canon_dim_units
|
|
+
|
|
+ camat = Matrix([[td.get(d, 0) for td in target_dims] for d in canon_dim_units])
|
|
+ exprmat = Matrix([dim_dependencies.get(d, 0) for d in canon_dim_units])
|
|
+
|
|
+ try:
|
|
+ res_exponents = camat.solve(exprmat)
|
|
+ except ValueError:
|
|
+ return None
|
|
+
|
|
+ return res_exponents
|
|
|
|
|
|
def convert_to(expr, target_units, unit_system="SI"):
|
|
@@ -101,19 +106,14 @@ def convert_to(expr, target_units, unit_system="SI"):
|
|
if depmat is None:
|
|
return expr
|
|
|
|
- camat, canon_dim_units = depmat
|
|
-
|
|
- expr_dim = Dimension(unit_system.get_dimensional_expr(expr))
|
|
- dim_dependencies = unit_system.get_dimension_dependencies(expr_dim)
|
|
- exprmat = Matrix([dim_dependencies.get(k, 0) for k in canon_dim_units])
|
|
-
|
|
- res_exponents = camat.solve_least_squares(exprmat, method=None)
|
|
+ res_exponents = depmat
|
|
res_exponents = [i for i in res_exponents]
|
|
expr_scale_factor = get_total_scale_factor(expr)
|
|
return expr_scale_factor * Mul(*[target_unit**exp for target_unit, exp in zip(target_units, res_exponents)])
|
|
|
|
|
|
from sympy.core.compatibility import reduce
|
|
+from sympy.matrices.dense import Matrix
|
|
from functools import reduce
|
|
from sympy.core.mul import Mul
|
|
from sympy import Pow
|