rational-linkages 2.1.0__cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl → 2.2.3__cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  import numpy
2
- import sympy
3
- from scipy.optimize import minimize
4
2
 
5
- from . import LineSegment
3
+ from sympy import symbols, Poly
4
+
5
+ from .Linkage import LineSegment
6
6
  from .DualQuaternion import DualQuaternion
7
7
  from .NormalizedLine import NormalizedLine
8
8
  from .PointHomogeneous import PointHomogeneous, PointOrbit
@@ -47,11 +47,11 @@ class CollisionAnalyser:
47
47
 
48
48
  relative_motions = branch0 + branch1[::-1]
49
49
 
50
- t = sympy.symbols('t')
50
+ t = symbols('t')
51
51
 
52
52
  motions = []
53
53
  for motion in relative_motions:
54
- motions.append(RationalCurve([sympy.Poly(c, t, greedy=False)
54
+ motions.append(RationalCurve([Poly(c, t, greedy=False)
55
55
  for c in motion],
56
56
  metric=self.metric))
57
57
  return motions
@@ -296,6 +296,11 @@ class CollisionAnalyser:
296
296
  """
297
297
  Optimize the link control points to avoid collisions with the bounding orbits.
298
298
  """
299
+ try:
300
+ from scipy.optimize import minimize # lazy import
301
+ except ImportError:
302
+ raise RuntimeError("Scipy import failed. Check its installation.")
303
+
299
304
  def flatten_cps(cps):
300
305
  return numpy.array([cp.normalized_in_3d() for cp in cps]).flatten()
301
306
 
@@ -348,11 +353,11 @@ class CollisionAnalyser:
348
353
  :param min_splits: Minimum number of splits for the bezier curves.
349
354
  """
350
355
 
351
- t = sympy.symbols('t')
356
+ t = symbols('t')
352
357
  motions = []
353
358
  for i, idx in enumerate(reduced_indices):
354
359
  rel_motion = self.mechanism.relative_motion(segment_id_number, idx)
355
- motions.append(RationalCurve([sympy.Poly(c, t, greedy=False)
360
+ motions.append(RationalCurve([Poly(c, t, greedy=False)
356
361
  for c in rel_motion],
357
362
  metric=self.metric))
358
363
 
@@ -30,7 +30,10 @@ class CollisionFreeOptimization:
30
30
  parameters of the points, result of the optimization
31
31
  :rtype: tuple
32
32
  """
33
- from scipy.optimize import minimize
33
+ try:
34
+ from scipy.optimize import minimize # lazy import
35
+ except ImportError:
36
+ raise RuntimeError("Scipy import failed. Check its installation.")
34
37
 
35
38
  # get the axes represented as normalized lines
36
39
  if len(self.mechanism.factorizations) == 1:
@@ -226,10 +226,13 @@ class DualQuaternion:
226
226
  :return: DualQuaternion with rational elements
227
227
  :rtype: DualQuaternion
228
228
  """
229
- from sympy import Rational, nsimplify
229
+ from sympy import Rational
230
230
 
231
231
  if study_parameters is not None:
232
- rational_numbers = [nsimplify(x, tolerance=1*(-10)) for x in study_parameters]
232
+ rational_numbers = [x if isinstance(x, Expr)
233
+ else Rational(*x) if isinstance(x, tuple)
234
+ else Rational(x)
235
+ for x in study_parameters]
233
236
  else:
234
237
  rational_numbers = [Rational(1), Rational(0), Rational(0), Rational(0),
235
238
  Rational(0), Rational(0), Rational(0), Rational(0)]
@@ -3,7 +3,8 @@ from warnings import warn
3
3
 
4
4
  import biquaternion_py
5
5
  import numpy as np
6
- import sympy as sp
6
+
7
+ from sympy import Symbol, Rational
7
8
 
8
9
  from .DualQuaternion import DualQuaternion
9
10
  from .MotionFactorization import MotionFactorization
@@ -45,7 +46,7 @@ class FactorizationProvider:
45
46
 
46
47
  :warning: If the given curve has not only rational numbers as input.
47
48
  """
48
- t = sp.Symbol("t")
49
+ t = Symbol("t")
49
50
 
50
51
  if isinstance(curve, RationalCurve):
51
52
  bi_quat = biquaternion_py.BiQuaternion(curve.extract_expressions())
@@ -58,7 +59,7 @@ class FactorizationProvider:
58
59
  poly_coeffs = bi_poly.all_coeffs()
59
60
  for i in range(len(poly_coeffs)):
60
61
  for j in range(len(poly_coeffs[i].args)):
61
- if not isinstance(poly_coeffs[i].args[j], sp.Rational):
62
+ if not isinstance(poly_coeffs[i].args[j], Rational):
62
63
  warn('The given curve has not only rational numbers as input. The factorization will be performed with floating point numbers, but may be instable.')
63
64
  break
64
65
 
@@ -92,7 +93,7 @@ class FactorizationProvider:
92
93
  'as input. The factorization will be performed with floating '
93
94
  'point numbers, but may be instable.')
94
95
 
95
- t = sp.Symbol("t")
96
+ t = Symbol("t")
96
97
 
97
98
  bi_poly = t - biquaternion_py.BiQuaternion(factorization.dq_axes[0].array())
98
99
  for i in range(1, factorization.number_of_factors):
@@ -147,7 +148,7 @@ class FactorizationProvider:
147
148
  :return: The rotation axis of the factor.
148
149
  :rtype: DualQuaternion
149
150
  """
150
- t = sp.Symbol("t")
151
+ t = Symbol("t")
151
152
  t_dq = DualQuaternion([t, 0, 0, 0, 0, 0, 0, 0])
152
153
 
153
154
  factor_dq = DualQuaternion(factor.poly.coeffs)
@@ -1,5 +1,4 @@
1
1
  import numpy as np
2
- from scipy.optimize import minimize
3
2
 
4
3
  from .AffineMetric import AffineMetric
5
4
  from .PointHomogeneous import PointHomogeneous
@@ -55,6 +54,14 @@ class MiniBall:
55
54
  return PointHomogeneous(center), radius_squared
56
55
 
57
56
  def get_ball_minimize(self):
57
+ """
58
+ Find the smallest ball containing all given points using optimization
59
+ """
60
+ try:
61
+ from scipy.optimize import minimize # lazy import
62
+ except ImportError:
63
+ raise RuntimeError("Scipy import failed. Check the package installation.")
64
+
58
65
  def objective_function(x):
59
66
  """
60
67
  Objective function to minimize the squared radius r^2 of the ball
@@ -1,13 +1,17 @@
1
1
  from typing import Union
2
2
 
3
3
  import numpy as np
4
- from scipy.optimize import minimize
5
4
 
6
5
  from .AffineMetric import AffineMetric
7
6
  from .DualQuaternion import DualQuaternion
8
7
  from .PointHomogeneous import PointHomogeneous
9
8
  from .RationalCurve import RationalCurve
10
9
 
10
+ try:
11
+ from scipy.optimize import minimize # lazy import, optional dependency
12
+ except ImportError:
13
+ minimize = None
14
+
11
15
  ### NOT YET in the documentation ### TODO: add to docs
12
16
 
13
17