rational-linkages 2.1.0__cp312-cp312-macosx_12_0_arm64.whl → 2.2.3__cp312-cp312-macosx_12_0_arm64.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.
- rational_linkages/CollisionAnalyser.py +12 -7
- rational_linkages/CollisionFreeOptimization.py +4 -1
- rational_linkages/DualQuaternion.py +5 -2
- rational_linkages/FactorizationProvider.py +6 -5
- rational_linkages/MiniBall.py +8 -1
- rational_linkages/MotionApproximation.py +5 -1
- rational_linkages/MotionDesigner.py +549 -541
- rational_linkages/MotionFactorization.py +6 -5
- rational_linkages/MotionInterpolation.py +1 -1
- rational_linkages/PlotterMatplotlib.py +16 -4
- rational_linkages/PlotterPyqtgraph.py +552 -532
- rational_linkages/RationalBezier.py +2 -3
- rational_linkages/RationalCurve.py +12 -3
- rational_linkages/RationalDualQuaternion.py +5 -4
- rational_linkages/RationalMechanism.py +4 -4
- rational_linkages/SingularityAnalysis.py +2 -3
- rational_linkages/utils.py +60 -3
- rational_linkages/utils_rust.cpython-312-darwin.so +0 -0
- {rational_linkages-2.1.0.dist-info → rational_linkages-2.2.3.dist-info}/METADATA +31 -18
- rational_linkages-2.2.3.dist-info/RECORD +40 -0
- rational_linkages-2.1.0.dist-info/RECORD +0 -40
- {rational_linkages-2.1.0.dist-info → rational_linkages-2.2.3.dist-info}/WHEEL +0 -0
- {rational_linkages-2.1.0.dist-info → rational_linkages-2.2.3.dist-info}/licenses/LICENSE +0 -0
- {rational_linkages-2.1.0.dist-info → rational_linkages-2.2.3.dist-info}/top_level.txt +0 -0
@@ -2,7 +2,6 @@ from copy import deepcopy
|
|
2
2
|
|
3
3
|
import numpy as np
|
4
4
|
import sympy as sp
|
5
|
-
from sympy.integrals.quadrature import gauss_legendre
|
6
5
|
|
7
6
|
from .DualQuaternion import DualQuaternion
|
8
7
|
from .MiniBall import MiniBall
|
@@ -93,7 +92,7 @@ class RationalBezier(RationalCurve):
|
|
93
92
|
"""
|
94
93
|
Get the numerical coefficients of the Bezier curve
|
95
94
|
"""
|
96
|
-
from scipy.special import comb #
|
95
|
+
from scipy.special import comb # lazy import
|
97
96
|
|
98
97
|
control_pts = np.array([point.array() for point in control_points])
|
99
98
|
degree = len(control_points) - 1
|
@@ -210,7 +209,7 @@ class BezierSegment:
|
|
210
209
|
|
211
210
|
@metric.setter
|
212
211
|
def metric(self, metric: "AffineMetric"):
|
213
|
-
from .AffineMetric import AffineMetric #
|
212
|
+
from .AffineMetric import AffineMetric # lazy import
|
214
213
|
|
215
214
|
if isinstance(metric, AffineMetric):
|
216
215
|
self._metric = metric
|
@@ -3,7 +3,6 @@ from typing import Union
|
|
3
3
|
|
4
4
|
import numpy as np
|
5
5
|
import sympy as sp
|
6
|
-
from scipy.integrate import quad
|
7
6
|
|
8
7
|
from .DualQuaternion import DualQuaternion
|
9
8
|
from .PointHomogeneous import PointHomogeneous
|
@@ -136,7 +135,7 @@ class RationalCurve:
|
|
136
135
|
|
137
136
|
@metric.setter
|
138
137
|
def metric(self, metric: "AffineMetric"):
|
139
|
-
from .AffineMetric import AffineMetric #
|
138
|
+
from .AffineMetric import AffineMetric # lazy import
|
140
139
|
|
141
140
|
if isinstance(metric, AffineMetric):
|
142
141
|
self._metric = metric
|
@@ -573,7 +572,7 @@ class RationalCurve:
|
|
573
572
|
if not self.is_motion:
|
574
573
|
raise ValueError("Not a motion curve, cannot split into Bezier curves.")
|
575
574
|
|
576
|
-
from .RationalBezier import BezierSegment #
|
575
|
+
from .RationalBezier import BezierSegment # lazy import
|
577
576
|
|
578
577
|
curve = self.get_curve_in_pr12()
|
579
578
|
|
@@ -657,6 +656,11 @@ class RationalCurve:
|
|
657
656
|
:raises ValueError: if the interval values are identical
|
658
657
|
:raises ValueError: if the number of segments is less than 1
|
659
658
|
"""
|
659
|
+
try:
|
660
|
+
from scipy.integrate import quad # lazy import
|
661
|
+
except ImportError:
|
662
|
+
raise RuntimeError("Scipy import failed. Check the package installation.")
|
663
|
+
|
660
664
|
if interval[0] > interval[1]:
|
661
665
|
raise ValueError("The interval must be in the form [a, b] where a < b")
|
662
666
|
elif interval[0] == interval[1]:
|
@@ -708,6 +712,11 @@ class RationalCurve:
|
|
708
712
|
:return: t value that splits the curve into given segment length
|
709
713
|
:rtype: float
|
710
714
|
"""
|
715
|
+
try:
|
716
|
+
from scipy.integrate import quad # lazy import
|
717
|
+
except ImportError:
|
718
|
+
raise RuntimeError("Scipy import failed. Check the package installation.")
|
719
|
+
|
711
720
|
# initial lower and upper bounds
|
712
721
|
low = section_start
|
713
722
|
high = curve_interval[1] # start with the upper bound
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import numpy as np
|
2
|
-
|
2
|
+
|
3
|
+
from sympy import Rational
|
3
4
|
|
4
5
|
from .DualQuaternion import DualQuaternion
|
5
6
|
|
@@ -12,7 +13,7 @@ class RationalDualQuaternion(DualQuaternion):
|
|
12
13
|
"""
|
13
14
|
RationalDualQuaternion class representing a 8-dimensional dual quaternion.
|
14
15
|
"""
|
15
|
-
def __init__(self, study_parameters: list[
|
16
|
+
def __init__(self, study_parameters: list[Rational]):
|
16
17
|
"""
|
17
18
|
RationalDualQuaternion class
|
18
19
|
|
@@ -34,7 +35,7 @@ class RationalDualQuaternion(DualQuaternion):
|
|
34
35
|
"""
|
35
36
|
return f"{self.rational_numbers}"
|
36
37
|
|
37
|
-
def __getitem__(self, idx) ->
|
38
|
+
def __getitem__(self, idx) -> Rational:
|
38
39
|
"""
|
39
40
|
Get an element of DualQuaternion
|
40
41
|
|
@@ -50,6 +51,6 @@ class RationalDualQuaternion(DualQuaternion):
|
|
50
51
|
Get the array of the rational numbers
|
51
52
|
|
52
53
|
:return: Rational numbers
|
53
|
-
:rtype:
|
54
|
+
:rtype: sympy.Matrix
|
54
55
|
"""
|
55
56
|
return np.array(self.rational_numbers)
|
@@ -110,7 +110,7 @@ class RationalMechanism(RationalCurve):
|
|
110
110
|
This metric is used for collision detection.
|
111
111
|
"""
|
112
112
|
if self._metric is None:
|
113
|
-
from .AffineMetric import AffineMetric #
|
113
|
+
from .AffineMetric import AffineMetric # lazy import
|
114
114
|
mechanism_points = self.points_at_parameter(0,
|
115
115
|
inverted_part=True,
|
116
116
|
only_links=False)
|
@@ -400,7 +400,7 @@ class RationalMechanism(RationalCurve):
|
|
400
400
|
:return: list of TransfMatrix objects
|
401
401
|
:rtype: list[TransfMatrix]
|
402
402
|
"""
|
403
|
-
from .TransfMatrix import TransfMatrix #
|
403
|
+
from .TransfMatrix import TransfMatrix # lazy import
|
404
404
|
|
405
405
|
screws = deepcopy(self.get_screw_axes())
|
406
406
|
|
@@ -942,7 +942,7 @@ class RationalMechanism(RationalCurve):
|
|
942
942
|
"""
|
943
943
|
Perform singularity check of the mechanism.
|
944
944
|
"""
|
945
|
-
from .SingularityAnalysis import SingularityAnalysis #
|
945
|
+
from .SingularityAnalysis import SingularityAnalysis # lazy import
|
946
946
|
|
947
947
|
sa = SingularityAnalysis()
|
948
948
|
return sa.check_singularity(self)
|
@@ -957,7 +957,7 @@ class RationalMechanism(RationalCurve):
|
|
957
957
|
result of the optimization
|
958
958
|
:rtype: list, list, float
|
959
959
|
"""
|
960
|
-
from .CollisionFreeOptimization import CollisionFreeOptimization #
|
960
|
+
from .CollisionFreeOptimization import CollisionFreeOptimization # lazy import
|
961
961
|
|
962
962
|
# get smallest polyline
|
963
963
|
pts, points_params, res = CollisionFreeOptimization(self).smallest_polyline()
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import
|
1
|
+
from sympy import Matrix
|
2
2
|
|
3
3
|
from .Linkage import LineSegment
|
4
4
|
from .RationalMechanism import RationalMechanism
|
@@ -49,8 +49,7 @@ class SingularityAnalysis:
|
|
49
49
|
# normalization
|
50
50
|
|
51
51
|
|
52
|
-
|
53
|
-
jacobian = sympy.Matrix.zeros(6, len(algebraic_plucker_coords))
|
52
|
+
jacobian = Matrix.zeros(6, len(algebraic_plucker_coords))
|
54
53
|
for i, plucker_line in enumerate(algebraic_plucker_coords):
|
55
54
|
jacobian[:, i] = plucker_line.screw
|
56
55
|
|
rational_linkages/utils.py
CHANGED
@@ -13,7 +13,7 @@ def dq_algebraic2vector(ugly_expression: list) -> list:
|
|
13
13
|
:return: 8-vector representation of the algebraic equation
|
14
14
|
:rtype: list
|
15
15
|
"""
|
16
|
-
from sympy import expand, symbols #
|
16
|
+
from sympy import expand, symbols # lazy import
|
17
17
|
i, j, k, epsilon = symbols('i j k epsilon')
|
18
18
|
|
19
19
|
expr = expand(ugly_expression)
|
@@ -41,7 +41,7 @@ def extract_coeffs(expr, var, deg: int, expand: bool = True):
|
|
41
41
|
:rtype: list
|
42
42
|
"""
|
43
43
|
if expand:
|
44
|
-
from sympy import expand #
|
44
|
+
from sympy import expand # lazy import
|
45
45
|
expr = expand(expr)
|
46
46
|
return [expr.coeff(var, i) for i in range(deg, -1, -1)]
|
47
47
|
|
@@ -97,10 +97,67 @@ def is_package_installed(package_name: str) -> bool:
|
|
97
97
|
"""
|
98
98
|
Check if a package is installed.
|
99
99
|
"""
|
100
|
-
from importlib.metadata import distribution
|
100
|
+
from importlib.metadata import distribution # lazy import
|
101
101
|
|
102
102
|
try:
|
103
103
|
distribution(package_name)
|
104
104
|
return True
|
105
105
|
except ImportError:
|
106
106
|
return False
|
107
|
+
|
108
|
+
|
109
|
+
def tr_from_dh_rationally(t_theta, di, ai, t_alpha):
|
110
|
+
"""
|
111
|
+
Create transformation matrix from DH parameters using Sympy in rational form.
|
112
|
+
|
113
|
+
The input shall be rational numbers, including the angles which are expected
|
114
|
+
to be parameters of tangent half-angle substitution, i.e., t_theta = tan(theta/2)
|
115
|
+
and t_alpha = tan(alpha/2).
|
116
|
+
|
117
|
+
:param sp.Rational t_theta: DH parameter theta in tangent half-angle form
|
118
|
+
:param sp.Rational di: DH parameter d, the offset along Z axis
|
119
|
+
:param sp.Rational ai: DH parameter a, the length along X axis
|
120
|
+
:param sp.Rational t_alpha: DH parameter alpha in tangent half-angle form
|
121
|
+
|
122
|
+
:return: 4x4 transformation matrix
|
123
|
+
:rtype: sp.Matrix
|
124
|
+
"""
|
125
|
+
from sympy import Matrix, eye, Expr # lazy import
|
126
|
+
|
127
|
+
if not all(isinstance(param, Expr) for param in [t_theta, di, ai, t_alpha]):
|
128
|
+
raise ValueError("All parameters must be of type sympy objects (Expr).")
|
129
|
+
|
130
|
+
s_th = 2*t_theta / (1 + t_theta**2)
|
131
|
+
c_th = (1 - t_theta**2) / (1 + t_theta**2)
|
132
|
+
s_al = 2*t_alpha / (1 + t_alpha**2)
|
133
|
+
c_al = (1 - t_alpha**2) / (1 + t_alpha**2)
|
134
|
+
|
135
|
+
mat = eye(4)
|
136
|
+
mat[1:4, 0] = Matrix([ai * c_th, ai * s_th, di])
|
137
|
+
mat[1, 1:4] = Matrix([[c_th, -s_th * c_al, s_th * s_al]])
|
138
|
+
mat[2, 1:4] = Matrix([[s_th, c_th * c_al, -c_th * s_al]])
|
139
|
+
mat[3, 1:4] = Matrix([[0, s_al, c_al]])
|
140
|
+
return mat
|
141
|
+
|
142
|
+
|
143
|
+
def normalized_line_rationally(point, direction):
|
144
|
+
"""
|
145
|
+
Create a normalized Plücker line from a point and a direction using Sympy.
|
146
|
+
|
147
|
+
The input shall be rational numbers, i.e. Sympy objects.
|
148
|
+
|
149
|
+
:param sp.Rational point:
|
150
|
+
:param sp.Rational direction:
|
151
|
+
|
152
|
+
:return: 6-vector representing the Plücker line
|
153
|
+
:rtype: sp.Matrix
|
154
|
+
"""
|
155
|
+
from sympy import Matrix, Expr # lazy import
|
156
|
+
|
157
|
+
if not all(isinstance(param, Expr) for param in point + direction):
|
158
|
+
raise ValueError("All parameters must be of type sympy objects (Expr).")
|
159
|
+
|
160
|
+
dir = Matrix(direction)
|
161
|
+
pt = Matrix(point)
|
162
|
+
mom = (-1 * dir).cross(pt)
|
163
|
+
return Matrix.vstack(dir, mom)
|
Binary file
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: rational-linkages
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.2.3
|
4
4
|
Summary: Rational Linkages
|
5
5
|
Author-email: Daniel Huczala <daniel.huczala@uibk.ac.at>
|
6
6
|
License-Expression: GPL-3.0-or-later
|
@@ -14,15 +14,17 @@ Requires-Python: >=3.10
|
|
14
14
|
Description-Content-Type: text/markdown
|
15
15
|
License-File: LICENSE
|
16
16
|
Requires-Dist: biquaternion-py>=1.2.0
|
17
|
-
Requires-Dist:
|
17
|
+
Requires-Dist: numpy>=1.10.0
|
18
18
|
Requires-Dist: sympy>=1.10.0
|
19
19
|
Requires-Dist: PyQt6>=6.2.0
|
20
20
|
Requires-Dist: pyqtgraph>=0.12.4
|
21
21
|
Requires-Dist: PyOpenGL>=3.0.0
|
22
|
+
Requires-Dist: matplotlib>=3.9.0; platform_system == "Windows" and platform_machine == "ARM64"
|
22
23
|
Provides-Extra: opt
|
23
24
|
Requires-Dist: ipython>=8.0.0; extra == "opt"
|
24
|
-
Requires-Dist:
|
25
|
+
Requires-Dist: scipy>=1.10.0; extra == "opt"
|
25
26
|
Requires-Dist: matplotlib>=3.9.0; extra == "opt"
|
27
|
+
Requires-Dist: gmpy2>=2.2.0; (platform_system != "Windows" and platform_machine != "ARM64") and extra == "opt"
|
26
28
|
Provides-Extra: exu
|
27
29
|
Requires-Dist: exudyn>=1.9.0; extra == "exu"
|
28
30
|
Requires-Dist: numpy-stl>=3.0.0; extra == "exu"
|
@@ -113,17 +115,28 @@ Using pip:
|
|
113
115
|
|
114
116
|
<code>pip install rational-linkages</code>
|
115
117
|
|
116
|
-
or
|
118
|
+
or with optional dependencies:
|
117
119
|
|
118
|
-
<code>pip install rational-linkages[opt]</code>
|
120
|
+
<code>pip install rational-linkages[opt,exu]</code>
|
119
121
|
|
120
|
-
Mac users might need to use backslashes to escape the brackets, e.g.:
|
122
|
+
Mac/linux users might need to use backslashes to escape the brackets, e.g.:
|
121
123
|
|
122
|
-
<code>pip install rational-linkages\\[opt\\]</code>
|
124
|
+
<code>pip install rational-linkages\\[opt,exu\\]</code>
|
123
125
|
|
124
|
-
for installing also
|
125
|
-
|
126
|
-
|
126
|
+
for installing also **opt**ional dependencies (scipy - optimization problems solving, ipython - inline plotting,
|
127
|
+
matplotlib - alternative engine for 3D plotting, gmpy2 - optimized symbolic computations)
|
128
|
+
and **exu**dyn dependencies (exudyn - multibody simulations,
|
129
|
+
numpy-stl + ngsolve - work with meshes in exudyn).
|
130
|
+
|
131
|
+
On **Linux systems**, to run GUI interactive plotting,
|
132
|
+
some additional libraries are required for plotting with PyQt6. For example,
|
133
|
+
on Ubuntu, it can be installed as follows:
|
134
|
+
|
135
|
+
<code>sudo apt install libgl1-mesa-glx libxkbcommon-x11-0 libegl1 libdbus-1-3</code>
|
136
|
+
|
137
|
+
or on Ubuntu 24.04 and higher:
|
138
|
+
|
139
|
+
<code>sudo apt install libgl1 libxkbcommon-x11-0 libegl1 libdbus-1-3</code>
|
127
140
|
|
128
141
|
### Install from source
|
129
142
|
|
@@ -143,21 +156,21 @@ work with meshes in exudyn).
|
|
143
156
|
|
144
157
|
<code>pip install -e .[opt,dev,doc]</code> including the development and documentation dependencies.
|
145
158
|
|
146
|
-
Mac
|
159
|
+
Mac/linux users might need to use backslashes to escape the brackets, e.g.:
|
147
160
|
|
148
161
|
<code>pip install -e .\\[opt\\]</code>
|
149
162
|
|
150
|
-
Additionally, on Linux systems, some additional libraries are required for plotting with PyQt6. For example,
|
151
|
-
on Ubuntu, it can be installed as follows:
|
152
163
|
|
153
|
-
<code>sudo apt install libgl1-mesa-glx libxkbcommon-x11-0 libegl1 libdbus-1-3</code>
|
154
164
|
|
155
|
-
|
165
|
+
To run the Rust functions, you need to install the [Rust toolchain](https://www.rust-lang.org) and
|
166
|
+
build the Rust code yourself. On top of that, on Windows, you need to install a
|
167
|
+
C++ build toolchain. In `Visual Studio Installer`, select:
|
156
168
|
|
157
|
-
|
169
|
+
* MSVC v143 - VS 2022 C++ x64/x86 build tools (latest)
|
170
|
+
* Windows 11 SDK
|
171
|
+
* C++ CMake tools for Windows
|
158
172
|
|
159
|
-
|
160
|
-
build the Rust code yourself, for example:
|
173
|
+
Then, navigate to the `rational_linkages/rust` folder and run:
|
161
174
|
|
162
175
|
<code>cargo build --release</code>
|
163
176
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
rational_linkages-2.2.3.dist-info/RECORD,,
|
2
|
+
rational_linkages-2.2.3.dist-info/WHEEL,sha256=4ny2_etdYKASVddQYLgwyio2eqEhum1X6UW2KKfUqw0,136
|
3
|
+
rational_linkages-2.2.3.dist-info/top_level.txt,sha256=IxRIuCa6RJFZKK15jamktxgS0abg1PV2WqXo1Z-MalI,18
|
4
|
+
rational_linkages-2.2.3.dist-info/METADATA,sha256=dkMOxC5JuBfc4304By9_c91wmir5KOkSn4QEf2CqnrQ,9631
|
5
|
+
rational_linkages-2.2.3.dist-info/licenses/LICENSE,sha256=L6gckgyu1UWPusHTuO7e5Lz62VaOlvh-I1kPZ4cGycQ,35110
|
6
|
+
rational_linkages/CollisionAnalyser.py,sha256=oVUidgAmVaGybayCmbJxlzSO-ZW8k4EkkKtbehbVL74,21091
|
7
|
+
rational_linkages/SingularityAnalysis.py,sha256=hxCfjDQafH4luPCO5cATCATz13-YssWynGqhqCQ9Bqk,1847
|
8
|
+
rational_linkages/PointHomogeneous.py,sha256=3CKh1jmcGNqUfY2aA0ca7Kg5LIzOaiAAhfAbzU_omEM,13355
|
9
|
+
rational_linkages/MotionInterpolation.py,sha256=fji0E2UDhHNJ3YatCNTajQAgWe-e2MunZjH4kpkSyGY,35037
|
10
|
+
rational_linkages/models.py,sha256=J3mJahJIJ_1MgY018iNG0MYwc47Gvh9gQShbLMBX94c,7105
|
11
|
+
rational_linkages/Linkage.py,sha256=7EfFhI0As_h17BWhimxHlEszewwipVuMf-toXuAmVwU,10095
|
12
|
+
rational_linkages/RationalDualQuaternion.py,sha256=2gogaelV4j4nFLkPQRxqHH0jMHY20XIQY_SNKsPAaDw,1438
|
13
|
+
rational_linkages/ExudynAnalysis.py,sha256=Z3TsLZfs89KCgY5njqQ_NpTiZXYDo2CvEy5SVZa1BG0,6106
|
14
|
+
rational_linkages/NormalizedLine.py,sha256=XbQYVJsmACRHWauaxpdMtuesUCwCpgrJ0_8Yqa6gPk0,15219
|
15
|
+
rational_linkages/NormalizedPlane.py,sha256=3Wxknual_h8gGQLWcKOdJRhhzO04syvdH3eHkJl0Mb0,5853
|
16
|
+
rational_linkages/DualQuaternionAction.py,sha256=CB05xGXkhd_2Is8iMnLn7XQd4bLszqkWk8TM85rxx1g,4394
|
17
|
+
rational_linkages/RationalCurve.py,sha256=mPTtroMrAXION-924TT6ATDlgLaF8nxeuLDhcndugdE,28296
|
18
|
+
rational_linkages/Quaternion.py,sha256=j9EyUOqJHNMNB5k3hIh0MjK52R2ES_UA2MhetpB9VZg,5083
|
19
|
+
rational_linkages/__init__.py,sha256=EOM1Nu9cecOyNFIb2nVaYE3X9Va_SzDMXa_L0Jj61uo,1023
|
20
|
+
rational_linkages/utils_rust.pyi,sha256=d0jxgYhwPQRbGY21dsXAXaWJb0OQWIEkUH3R4pP3sYs,137
|
21
|
+
rational_linkages/StaticMechanism.py,sha256=Slh6-9ml6p9jX-krvJ7_sJ8fRropBG-nsUboDyVJJSY,12476
|
22
|
+
rational_linkages/MotionApproximation.py,sha256=XkotKnIg8pRdIJy6cja-AmXMV7tvgp8_dCa4kjgVCzU,9964
|
23
|
+
rational_linkages/MotionFactorization.py,sha256=ecO6IEh6QVk_toNXDNiP5Py-dGC6jpdCU8SNGOy0GTA,16803
|
24
|
+
rational_linkages/Plotter.py,sha256=JWZH2crPwE77ExwC8C5sZT2z7Mz7ZRGNFIp7f82pTM0,4352
|
25
|
+
rational_linkages/PlotterPyqtgraph.py,sha256=GQlkxX-Aif-w0kQ8bgPjI32afnHfErkwmbqNFbUJdr8,53291
|
26
|
+
rational_linkages/utils.py,sha256=lUxWCwcQvnd_rATeIdotvkHqFYdKjwjOeZWrImxFomo,5084
|
27
|
+
rational_linkages/CollisionFreeOptimization.py,sha256=JPqwcV3A38TQou9MLRN1OwJwrM5rEXxwCb0QzP-dCy4,12328
|
28
|
+
rational_linkages/PlotterMatplotlib.py,sha256=EH0dXjvt1vN7RC0vs6nx4NCM3uWlxbyJYzvHx_rr12w,36756
|
29
|
+
rational_linkages/TransfMatrix.py,sha256=9Hx-jxV_hgvOsmVgedMlTss-E4D40TaN6zCSR0n_5Yc,16355
|
30
|
+
rational_linkages/FactorizationProvider.py,sha256=WB_eBFbH28Pyt141qfxzlpRdraLSl1-YbgQl5inoydg,6636
|
31
|
+
rational_linkages/AffineMetric.py,sha256=ky_DdcPx91k3USU-J4x9854wtnLHfQwjOFAfO_AV-dw,6451
|
32
|
+
rational_linkages/DualQuaternion.py,sha256=FPeUPLhT4xNi7rtvbPtCXuSXNLaGKHXaxdIDj8VphQw,24688
|
33
|
+
rational_linkages/MotionDesigner.py,sha256=GvwCb4rxdjUAsTz4QaK8n_AJvNnxiidfJsJ1aNrHhPg,30877
|
34
|
+
rational_linkages/RationalBezier.py,sha256=irpwzO6pN-32OS3EBMRX6WKcYOMb1OnPtNeJlILHFeE,14822
|
35
|
+
rational_linkages/MiniBall.py,sha256=dqCV53avb1Z4ucipTng4NypsGlGYEMGSKsrqmZX7YKM,10170
|
36
|
+
rational_linkages/RationalMechanism.py,sha256=NT6YrXEy9reZz0wKD96NkihfrY9sSVBzOcvCpoHQjFA,63115
|
37
|
+
rational_linkages/utils_rust.cpython-312-darwin.so,sha256=-iBuD6goHIBBsRW8Amym3oG4U9wKfZ5I_-Gm_jC1XNM,500960
|
38
|
+
rational_linkages/data/bennett_ark24.pkl,sha256=Eh7S5PHOi0ENg8-FS7KjQsc6BBeMXT984Yz5VKiqwNM,39216
|
39
|
+
rational_linkages/data/plane_fold_6r.pkl,sha256=lbrnqFksdJ6QW4LJqyVv-ujjhP25kkUWdGY7bjR6Hbo,48752
|
40
|
+
rational_linkages/data/collisions_free_6r.pkl,sha256=XZFvnt8jEUfDY3JacLlS1kE-EQvtgmb7Un07DovmUmg,73101
|
@@ -1,40 +0,0 @@
|
|
1
|
-
rational_linkages-2.1.0.dist-info/RECORD,,
|
2
|
-
rational_linkages-2.1.0.dist-info/WHEEL,sha256=4ny2_etdYKASVddQYLgwyio2eqEhum1X6UW2KKfUqw0,136
|
3
|
-
rational_linkages-2.1.0.dist-info/top_level.txt,sha256=IxRIuCa6RJFZKK15jamktxgS0abg1PV2WqXo1Z-MalI,18
|
4
|
-
rational_linkages-2.1.0.dist-info/METADATA,sha256=IlVBpmnUUL3KbWqgVA-kyXCEws5ADWTUN4ym19JktqI,8956
|
5
|
-
rational_linkages-2.1.0.dist-info/licenses/LICENSE,sha256=L6gckgyu1UWPusHTuO7e5Lz62VaOlvh-I1kPZ4cGycQ,35110
|
6
|
-
rational_linkages/CollisionAnalyser.py,sha256=YrR9EJZmOMvZyLcRdrCnjZd1V6wBlT62-1q3xeLWLOA,20940
|
7
|
-
rational_linkages/SingularityAnalysis.py,sha256=kVLm6Nz1IE6pPJLk1DUXGnlyMlByo_Fk2hEkpdF3iRc,1842
|
8
|
-
rational_linkages/PointHomogeneous.py,sha256=3CKh1jmcGNqUfY2aA0ca7Kg5LIzOaiAAhfAbzU_omEM,13355
|
9
|
-
rational_linkages/MotionInterpolation.py,sha256=foZjh-snmgO6rj9ZhCH-Lu39l4OL8szp51gxzXATiGU,35038
|
10
|
-
rational_linkages/models.py,sha256=J3mJahJIJ_1MgY018iNG0MYwc47Gvh9gQShbLMBX94c,7105
|
11
|
-
rational_linkages/Linkage.py,sha256=7EfFhI0As_h17BWhimxHlEszewwipVuMf-toXuAmVwU,10095
|
12
|
-
rational_linkages/RationalDualQuaternion.py,sha256=_JTXjmDY2RbX71GIRYCyO9ko6jiLUtiDzNbtbsuWfXU,1432
|
13
|
-
rational_linkages/ExudynAnalysis.py,sha256=Z3TsLZfs89KCgY5njqQ_NpTiZXYDo2CvEy5SVZa1BG0,6106
|
14
|
-
rational_linkages/NormalizedLine.py,sha256=XbQYVJsmACRHWauaxpdMtuesUCwCpgrJ0_8Yqa6gPk0,15219
|
15
|
-
rational_linkages/NormalizedPlane.py,sha256=3Wxknual_h8gGQLWcKOdJRhhzO04syvdH3eHkJl0Mb0,5853
|
16
|
-
rational_linkages/DualQuaternionAction.py,sha256=CB05xGXkhd_2Is8iMnLn7XQd4bLszqkWk8TM85rxx1g,4394
|
17
|
-
rational_linkages/RationalCurve.py,sha256=53Sd-lHwhvjzUakvAQMkMNtu9MNv299oyC-FfdHMeJc,27953
|
18
|
-
rational_linkages/Quaternion.py,sha256=j9EyUOqJHNMNB5k3hIh0MjK52R2ES_UA2MhetpB9VZg,5083
|
19
|
-
rational_linkages/__init__.py,sha256=EOM1Nu9cecOyNFIb2nVaYE3X9Va_SzDMXa_L0Jj61uo,1023
|
20
|
-
rational_linkages/utils_rust.pyi,sha256=d0jxgYhwPQRbGY21dsXAXaWJb0OQWIEkUH3R4pP3sYs,137
|
21
|
-
rational_linkages/StaticMechanism.py,sha256=Slh6-9ml6p9jX-krvJ7_sJ8fRropBG-nsUboDyVJJSY,12476
|
22
|
-
rational_linkages/MotionApproximation.py,sha256=znmJf3hQMxvLbX4MCSOqodNCgSV25Gb8XRQwmnEMWrI,9878
|
23
|
-
rational_linkages/MotionFactorization.py,sha256=25YCv69a9bs88bkYKWO_Y9yJecbSjkwRGNub-geGreQ,16802
|
24
|
-
rational_linkages/Plotter.py,sha256=JWZH2crPwE77ExwC8C5sZT2z7Mz7ZRGNFIp7f82pTM0,4352
|
25
|
-
rational_linkages/PlotterPyqtgraph.py,sha256=0zD89MBRudywpr_hw743RvGg31BqJse9Q_BUmLYwfuw,50969
|
26
|
-
rational_linkages/utils.py,sha256=XKvukpwLPmu1khL63molq2sa0KpvUAH2LaX-bnsU-bE,3046
|
27
|
-
rational_linkages/CollisionFreeOptimization.py,sha256=BEAZxOUjC2JOgBOKgO_T02_s_3Q74zrD1KWMkJyJU_w,12189
|
28
|
-
rational_linkages/PlotterMatplotlib.py,sha256=h2iRIhfN17R4NIv9IsaDzL3ltTJN0sOs_y5PODXL4Tc,36502
|
29
|
-
rational_linkages/TransfMatrix.py,sha256=9Hx-jxV_hgvOsmVgedMlTss-E4D40TaN6zCSR0n_5Yc,16355
|
30
|
-
rational_linkages/FactorizationProvider.py,sha256=P10xj6GfDKX2lw9Ou-aE0W0_5RWNnyh6FbQhTQyV-YE,6631
|
31
|
-
rational_linkages/AffineMetric.py,sha256=ky_DdcPx91k3USU-J4x9854wtnLHfQwjOFAfO_AV-dw,6451
|
32
|
-
rational_linkages/DualQuaternion.py,sha256=Y5_vpNE2D6Yr0LG9EpZ3tXKdgw9L1pCEnMToonMmPWw,24551
|
33
|
-
rational_linkages/MotionDesigner.py,sha256=ofQvpD4iFzGkO58VlJAaODRKld6mHDOaCoFTYb-U-0Y,28895
|
34
|
-
rational_linkages/RationalBezier.py,sha256=xzOnu5r_W1CZIGQCsTEQcVuADX9WifsZdYNg_5yGPUg,14878
|
35
|
-
rational_linkages/MiniBall.py,sha256=bbW-vRlWuxZibqdJdC2sXIrJpVchxcAuYD0TP6hRY8w,9912
|
36
|
-
rational_linkages/RationalMechanism.py,sha256=pIhRmrIwfF1Ha3TGhFwUJgtoT1j0sPfviuCYycETrwc,63119
|
37
|
-
rational_linkages/utils_rust.cpython-312-darwin.so,sha256=1zq83-1oCJenRfNN2ZObCHcpHx5U7Zzv3cKqso5YJEo,500960
|
38
|
-
rational_linkages/data/bennett_ark24.pkl,sha256=Eh7S5PHOi0ENg8-FS7KjQsc6BBeMXT984Yz5VKiqwNM,39216
|
39
|
-
rational_linkages/data/plane_fold_6r.pkl,sha256=lbrnqFksdJ6QW4LJqyVv-ujjhP25kkUWdGY7bjR6Hbo,48752
|
40
|
-
rational_linkages/data/collisions_free_6r.pkl,sha256=XZFvnt8jEUfDY3JacLlS1kE-EQvtgmb7Un07DovmUmg,73101
|
File without changes
|
File without changes
|
File without changes
|