diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ece800..b579788 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ the [Deprecations](https://hugofara.github.io/pylinkage/deprecations.html) page. ## [Unreleased] +## [1.3.0] - 2026-10-25 + ### Added - **Python 3.15 support.** It is tested in CI. On 3.15 the `cad` extra @@ -17,9 +19,12 @@ the [Deprecations](https://hugofara.github.io/pylinkage/deprecations.html) page. ### Changed -- **Breaking:** Dropped Python 3.10 support, which reached end of life in - October 2026. Minimum version is now Python 3.11. `typing_extensions` is no - longer a dependency. +- **Python 3.11 or later is required.** Python 3.10 reached end of life in + October 2026. pip keeps a 3.10 environment on 1.2.2. `typing_extensions` is + no longer a dependency. +- The development lockfile is refreshed. It moves pillow to 13.0.0, along with + certifi, tornado, urllib3 and nbconvert, past the advisories Dependabot + reported. None of them reach the published package. ### Fixed diff --git a/CITATION.cff b/CITATION.cff index 26bf532..535b173 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -7,8 +7,8 @@ authors: given-names: Hugo orcid: "https://orcid.org/0009-0001-0769-4434" affiliation: "Independent Researcher, France" -version: 1.2.2 -date-released: "2026-09-18" +version: 1.3.0 +date-released: "2026-10-25" identifiers: - type: doi value: "10.5281/zenodo.21207486" diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index 6b54cf4..2372992 100644 --- a/docs/_static/documentation_options.js +++ b/docs/_static/documentation_options.js @@ -1,5 +1,5 @@ const DOCUMENTATION_OPTIONS = { - VERSION: '1.2.2', + VERSION: '1.3.0', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/api/modules.html b/docs/api/modules.html index 2a08533..f402cab 100644 --- a/docs/api/modules.html +++ b/docs/api/modules.html @@ -6,14 +6,14 @@ - pylinkage — pylinkage 1.2.2 documentation + pylinkage — pylinkage 1.3.0 documentation - + diff --git a/docs/api/pylinkage.actuators.html b/docs/api/pylinkage.actuators.html index 60dd454..7ecd0d4 100644 --- a/docs/api/pylinkage.actuators.html +++ b/docs/api/pylinkage.actuators.html @@ -6,14 +6,14 @@ - pylinkage.actuators package — pylinkage 1.2.2 documentation + pylinkage.actuators package — pylinkage 1.3.0 documentation - + @@ -154,7 +154,7 @@

SubmodulesExample

-
>>> O1 = Ground(0.0, 0.0, name="O1")
+
>>> O1 = Ground(0.0, 0.0, name="O1")
 >>> arc_crank = ArcCrank(
 ...     anchor=O1,
 ...     radius=1.0,
@@ -263,6 +263,17 @@ 

Submodules +
+set_coord(x: float | None, y: float | None) → None
+

Place the output, and read the crank angle from where it lands.

+

The angle is the direction from the anchor to (x, y), brought +onto the arc; the sweep restarts in the positive direction, as it +does on a new crank. Like a Crank, the arc crank is then +entirely in the state its coordinates describe, so putting a +linkage back in a position puts its actuators back too.

+
+ @@ -290,7 +301,7 @@

SubmodulesExample

-
>>> O1 = Ground(0.0, 0.0, name="O1")
+
>>> O1 = Ground(0.0, 0.0, name="O1")
 >>> crank = Crank(anchor=O1, radius=1.0)
 >>> crank.position
 (1.0, 0.0)
@@ -415,7 +426,7 @@ 

SubmodulesExample

-
@@ -552,7 +575,7 @@

Module contents
from pylinkage.components import Ground
 from pylinkage.actuators import LinearActuator
 
-O1 = Ground(0.0, 0.0, name="O1")
+O1 = Ground(0.0, 0.0, name="O1")
 actuator = LinearActuator(anchor=O1, angle=0.0, stroke=2.0, speed=0.1)
 

@@ -578,7 +601,7 @@

Module contentsExample

-
>>> O1 = Ground(0.0, 0.0, name="O1")
+
>>> O1 = Ground(0.0, 0.0, name="O1")
 >>> arc_crank = ArcCrank(
 ...     anchor=O1,
 ...     radius=1.0,
@@ -687,6 +710,17 @@ 

Module contents +
+set_coord(x: float | None, y: float | None) → None
+

Place the output, and read the crank angle from where it lands.

+

The angle is the direction from the anchor to (x, y), brought +onto the arc; the sweep restarts in the positive direction, as it +does on a new crank. Like a Crank, the arc crank is then +entirely in the state its coordinates describe, so putting a +linkage back in a position puts its actuators back too.

+
+
@@ -708,7 +742,7 @@

Module contentsExample

-

+
speed: float
diff --git a/docs/api/pylinkage.assur.html b/docs/api/pylinkage.assur.html index f7eb9d1..d54ab5e 100644 --- a/docs/api/pylinkage.assur.html +++ b/docs/api/pylinkage.assur.html @@ -6,14 +6,14 @@ - pylinkage.assur package — pylinkage 1.2.2 documentation + pylinkage.assur package — pylinkage 1.3.0 documentation - + @@ -307,8 +307,8 @@

Submodules>>> assur = AssurMechanism(mechanism) >>> >>> # Access formal properties ->>> print(f"DOF: {assur.degree_of_freedom}") ->>> print(f"Groups: {[g.joint_signature for g in assur.assur_groups]}") +>>> print(f"DOF: {assur.degree_of_freedom}") +>>> print(f"Groups: {[g.joint_signature for g in assur.assur_groups]}") >>> >>> # Simulation still works via delegation >>> for positions in assur.step(): @@ -553,10 +553,10 @@

SubmodulesExample

>>> result = decompose_assur_groups(graph)
->>> print(f"Ground: {result.ground}")
->>> print(f"Drivers: {result.drivers}")
+>>> print(f"Ground: {result.ground}")
+>>> print(f"Drivers: {result.drivers}")
 >>> for group in result.groups:
-...     print(f"  {group.joint_signature}: {group.internal_nodes}")
+...     print(f"  {group.joint_signature}: {group.internal_nodes}")
 
@@ -630,10 +630,10 @@

SubmodulesExample

-
>>> graph = LinkageGraph(name="Four-bar")
+
>>> graph = LinkageGraph(name="Four-bar")
 >>> # ... add nodes and edges ...
 >>> result = decompose_assur_groups(graph)
->>> print(f"Found {len(result.groups)} Assur groups")
+>>> print(f"Found {len(result.groups)} Assur groups")
 

@@ -681,7 +681,7 @@

SubmodulesExample

-
>>> edge = Edge("AB", source="A", target="B")
+
>>> edge = Edge("AB", source="A", target="B")
 
@@ -753,12 +753,12 @@

SubmodulesExample

-
>>> graph = LinkageGraph(name="Four-bar")
->>> graph.add_node(Node("A", role=NodeRole.GROUND))
->>> graph.add_node(Node("B", role=NodeRole.DRIVER))
->>> graph.add_edge(Edge("AB", source="A", target="B"))
->>> graph.neighbors("A")
-['B']
+
>>> graph = LinkageGraph(name="Four-bar")
+>>> graph.add_node(Node("A", role=NodeRole.GROUND))
+>>> graph.add_node(Node("B", role=NodeRole.DRIVER))
+>>> graph.add_edge(Edge("AB", source="A", target="B"))
+>>> graph.neighbors("A")
+['B']
 
@@ -947,7 +947,7 @@

SubmodulesExample

-

@@ -1547,8 +1547,8 @@

SubmodulesExample

-
>>> graph_to_json(graph, "my_linkage.json")
->>> restored = graph_from_json("my_linkage.json")
+
>>> graph_to_json(graph, "my_linkage.json")
+>>> restored = graph_from_json("my_linkage.json")
 

@@ -1595,14 +1595,14 @@

Submodules
>>> from pylinkage.assur import parse_signature, signature_to_hypergraph
 >>>
 >>> # Parse formal syntax
->>> sig = parse_signature("RRR")
+>>> sig = parse_signature("RRR")
 >>> print(sig.joint_signature)
-'RRR'
+'RRR'
 >>>
 >>> # Generate pure topology
 >>> graph = signature_to_hypergraph(sig)
 >>> print(list(graph.nodes.keys()))
-['anchor_0', 'anchor_1', 'internal_0']
+['anchor_0', 'anchor_1', 'internal_0']
 

@@ -1652,13 +1652,13 @@

SubmodulesExample

-

@@ -1788,19 +1788,19 @@

SubmodulesExample

-
>>> sig = parse_signature("RRR")
+
>>> sig = parse_signature("RRR")
 >>> sig.joints
 (JointType.REVOLUTE, JointType.REVOLUTE, JointType.REVOLUTE)
 
-
>>> sig = parse_signature("R_P_R")  # With separators
+
>>> sig = parse_signature("R_P_R")  # With separators
 >>> sig.canonical_form
-'RPR'
+'RPR'
 
-
>>> sig = parse_signature("RTR")  # T accepted as alias for P
+
>>> sig = parse_signature("RTR")  # T accepted as alias for P
 >>> sig.canonical_form
-'RPR'
+'RPR'
 

@@ -1820,15 +1820,15 @@

SubmodulesExample

-
>>> sig = parse_signature("RRR")
+
>>> sig = parse_signature("RRR")
 >>> cls = signature_to_group_class(sig)
 >>> cls.__name__
-'DyadRRR'
+'DyadRRR'
 
-
>>> cls = signature_to_group_class("RPR")
+
>>> cls = signature_to_group_class("RPR")
 >>> cls.__name__
-'DyadRPR'
+'DyadRPR'
 
@@ -1859,7 +1859,7 @@

SubmodulesExample

-
>>> graph = signature_to_hypergraph("RRR")
+
@@ -1900,8 +1900,8 @@

Module contents>>> assur = AssurMechanism(mechanism) >>> >>> # Access structural properties ->>> print(f"DOF: {assur.degree_of_freedom}") ->>> print(f"Groups: {[g.joint_signature for g in assur.assur_groups]}") +>>> print(f"DOF: {assur.degree_of_freedom}") +>>> print(f"Groups: {[g.joint_signature for g in assur.assur_groups]}") >>> >>> # Simulation via delegation >>> for positions in assur.step(): @@ -2252,13 +2252,13 @@

Module contentsExample

-
>>> sig = parse_signature("RRR")
+
>>> sig = parse_signature("RRR")
 >>> sig.joints
 (JointType.REVOLUTE, JointType.REVOLUTE, JointType.REVOLUTE)
 >>> sig.group_class
 <AssurGroupClass.DYAD: 1>
 >>> sig.canonical_form
-'RRR'
+'RRR'
 
@@ -2325,10 +2325,10 @@

Module contentsExample

>>> result = decompose_assur_groups(graph)
->>> print(f"Ground: {result.ground}")
->>> print(f"Drivers: {result.drivers}")
+>>> print(f"Ground: {result.ground}")
+>>> print(f"Drivers: {result.drivers}")
 >>> for group in result.groups:
-...     print(f"  {group.joint_signature}: {group.internal_nodes}")
+...     print(f"  {group.joint_signature}: {group.internal_nodes}")
 
@@ -2512,7 +2512,7 @@

Module contentsExample

-
>>> edge = Edge("AB", source="A", target="B")
+
>>> edge = Edge("AB", source="A", target="B")
 
@@ -2629,12 +2629,12 @@

Module contentsExample

-

@@ -3079,8 +3079,8 @@

Module contentsExample

-
>>> graph_to_json(graph, "my_linkage.json")
->>> restored = graph_from_json("my_linkage.json")
+
>>> graph_to_json(graph, "my_linkage.json")
+>>> restored = graph_from_json("my_linkage.json")
 

@@ -3114,9 +3114,9 @@

Module contentsExample

-

@@ -3199,15 +3199,15 @@

Module contentsExample

-
>>> sig = parse_signature("RRR")
+
>>> sig = parse_signature("RRR")
 >>> cls = signature_to_group_class(sig)
 >>> cls.__name__
-'DyadRRR'
+'DyadRRR'
 
-
>>> cls = signature_to_group_class("RPR")
+
>>> cls = signature_to_group_class("RPR")
 >>> cls.__name__
-'DyadRPR'
+'DyadRPR'
 
@@ -3238,7 +3238,7 @@

Module contentsExample

-
>>> graph = signature_to_hypergraph("RRR")
+
@@ -3270,7 +3270,7 @@

Module contentsExample

-
>>> assur_graph = LinkageGraph(name="Four-bar")
+
>>> assur_graph = LinkageGraph(name="Four-bar")
 >>> # ... add nodes and edges ...
 >>> hg = to_hypergraph(assur_graph)
 
diff --git a/docs/api/pylinkage.bridge.html b/docs/api/pylinkage.bridge.html index 7e2c8cc..7c2e5c9 100644 --- a/docs/api/pylinkage.bridge.html +++ b/docs/api/pylinkage.bridge.html @@ -6,14 +6,14 @@ - pylinkage.bridge package — pylinkage 1.2.2 documentation + pylinkage.bridge package — pylinkage 1.3.0 documentation - + diff --git a/docs/api/pylinkage.cam.html b/docs/api/pylinkage.cam.html index f286566..1b66f83 100644 --- a/docs/api/pylinkage.cam.html +++ b/docs/api/pylinkage.cam.html @@ -6,14 +6,14 @@ - pylinkage.cam package — pylinkage 1.2.2 documentation + pylinkage.cam package — pylinkage 1.3.0 documentation - + diff --git a/docs/api/pylinkage.components.html b/docs/api/pylinkage.components.html index e69e9ed..89b0cac 100644 --- a/docs/api/pylinkage.components.html +++ b/docs/api/pylinkage.components.html @@ -6,14 +6,14 @@ - pylinkage.components package — pylinkage 1.2.2 documentation + pylinkage.components package — pylinkage 1.3.0 documentation - + @@ -141,8 +141,8 @@

SubmodulesExample

-
>>> O1 = Ground(0.0, 0.0, name="O1")
->>> O2 = Ground(2.0, 0.0, name="O2")
+
>>> O1 = Ground(0.0, 0.0, name="O1")
+>>> O2 = Ground(2.0, 0.0, name="O2")
 >>> O1.position
 (0.0, 0.0)
 
@@ -201,16 +201,16 @@

SubmodulesExample

-
>>> O1 = Ground(0.0, 0.0, name="O1")
+
>>> O1 = Ground(0.0, 0.0, name="O1")
 >>> crank = Crank(anchor=O1, radius=1.0)
->>> O2 = Ground(2.0, 0.0, name="O2")
+>>> O2 = Ground(2.0, 0.0, name="O2")
 >>> # Track a point at 45 degrees from crank->O2 line
 >>> tracker = PointTracker(
 ...     anchor1=crank.output,
 ...     anchor2=O2,
 ...     distance=0.5,
 ...     angle=math.pi/4,
-...     name="tracer_point"
+...     name="tracer_point"
 ... )
 
@@ -433,8 +433,8 @@

Module contentsExample

-
>>> O1 = Ground(0.0, 0.0, name="O1")
->>> O2 = Ground(2.0, 0.0, name="O2")
+
>>> O1 = Ground(0.0, 0.0, name="O1")
+>>> O2 = Ground(2.0, 0.0, name="O2")
 >>> O1.position
 (0.0, 0.0)
 
@@ -486,16 +486,16 @@

Module contentsExample

-
>>> O1 = Ground(0.0, 0.0, name="O1")
+
>>> O1 = Ground(0.0, 0.0, name="O1")
 >>> crank = Crank(anchor=O1, radius=1.0)
->>> O2 = Ground(2.0, 0.0, name="O2")
+>>> O2 = Ground(2.0, 0.0, name="O2")
 >>> # Track a point at 45 degrees from crank->O2 line
 >>> tracker = PointTracker(
 ...     anchor1=crank.output,
 ...     anchor2=O2,
 ...     distance=0.5,
 ...     angle=math.pi/4,
-...     name="tracer_point"
+...     name="tracer_point"
 ... )
 
diff --git a/docs/api/pylinkage.dyads.html b/docs/api/pylinkage.dyads.html index 015def9..5671cb4 100644 --- a/docs/api/pylinkage.dyads.html +++ b/docs/api/pylinkage.dyads.html @@ -6,14 +6,14 @@ - pylinkage.dyads package — pylinkage 1.2.2 documentation + pylinkage.dyads package — pylinkage 1.3.0 documentation - + @@ -181,30 +181,30 @@

SubmodulesExamples

>>> # Circle-circle (RRR)
 >>> dyad = create_dyad(
-...     signature="RRR",
-...     anchors={"anchor1": crank.output, "anchor2": ground2},
-...     constraints={"distance1": 2.0, "distance2": 1.5},
-...     name="rocker",
+...     signature="RRR",
+...     anchors={"anchor1": crank.output, "anchor2": ground2},
+...     constraints={"distance1": 2.0, "distance2": 1.5},
+...     name="rocker",
 ... )
 
>>> # Circle-line (RT_R - slider crank)
 >>> dyad = create_dyad(
-...     signature="RT_R",
-...     anchors={"revolute": crank.output, "line1": L1, "line2": L2},
-...     constraints={"distance": 1.5},
-...     name="slider",
+...     signature="RT_R",
+...     anchors={"revolute": crank.output, "line1": L1, "line2": L2},
+...     constraints={"distance": 1.5},
+...     name="slider",
 ... )
 
>>> # Line-line (T_R_T - double slider)
 >>> dyad = create_dyad(
-...     signature="T_R_T",
+...     signature="T_R_T",
 ...     anchors={
-...         "line1_p1": A, "line1_p2": B,
-...         "line2_p1": C, "line2_p2": D,
+...         "line1_p1": A, "line1_p2": B,
+...         "line2_p1": C, "line2_p2": D,
 ...     },
-...     name="double_slider",
+...     name="double_slider",
 ... )
 
@@ -291,8 +291,8 @@

SubmodulesExample

-
>>> O1 = Ground(0.0, 0.0, name="O1")
->>> O2 = Ground(2.0, 0.0, name="O2")
+
@@ -390,8 +390,8 @@ 

Submodules>>> from pylinkage.cam import FunctionProfile, CycloidalMotionLaw >>> import math >>> ->>> O_cam = Ground(0.0, 0.0, name="cam_center") ->>> O_pivot = Ground(2.0, 0.0, name="pivot") +>>> O_cam = Ground(0.0, 0.0, name="cam_center") +>>> O_pivot = Ground(2.0, 0.0, name="pivot") >>> cam = Crank(anchor=O_cam, radius=0.1, angular_velocity=0.1) >>> # Profile: maps cam angle to arm angle offset (radians) >>> profile = FunctionProfile( @@ -541,16 +541,16 @@

SubmodulesExample

-
>>> A = Ground(0.0, 0.0, name="A")
->>> B = Ground(2.0, 0.0, name="B")
->>> C = Ground(0.0, 1.0, name="C")
->>> D = Ground(2.0, 2.0, name="D")
+
>>> A = Ground(0.0, 0.0, name="A")
+>>> B = Ground(2.0, 0.0, name="B")
+>>> C = Ground(0.0, 1.0, name="C")
+>>> D = Ground(2.0, 2.0, name="D")
 >>> joint = PPDyad(
 ...     line1_anchor1=A,
 ...     line1_anchor2=B,
 ...     line2_anchor1=C,
 ...     line2_anchor2=D,
-...     name="intersection"
+...     name="intersection"
 ... )
 
@@ -650,16 +650,16 @@

SubmodulesExample

-
>>> O1 = Ground(0.0, 0.0, name="O1")
->>> L1 = Ground(0.0, 1.0, name="L1")
->>> L2 = Ground(2.0, 1.0, name="L2")
+
>>> O1 = Ground(0.0, 0.0, name="O1")
+>>> L1 = Ground(0.0, 1.0, name="L1")
+>>> L2 = Ground(2.0, 1.0, name="L2")
 >>> crank = Crank(anchor=O1, radius=1.0)
 >>> slider = RRPDyad(
 ...     revolute_anchor=crank.output,
 ...     line_anchor1=L1,
 ...     line_anchor2=L2,
 ...     distance=1.5,
-...     name="slider"
+...     name="slider"
 ... )
 
@@ -756,15 +756,15 @@

SubmodulesExample

-
@@ -1074,8 +1074,8 @@

Module contentsExample

-
>>> O1 = Ground(0.0, 0.0, name="O1")
->>> O2 = Ground(2.0, 0.0, name="O2")
+
@@ -1166,8 +1166,8 @@ 

Module contents>>> from pylinkage.cam import FunctionProfile, CycloidalMotionLaw >>> import math >>> ->>> O_cam = Ground(0.0, 0.0, name="cam_center") ->>> O_pivot = Ground(2.0, 0.0, name="pivot") +>>> O_cam = Ground(0.0, 0.0, name="cam_center") +>>> O_pivot = Ground(2.0, 0.0, name="pivot") >>> cam = Crank(anchor=O_cam, radius=0.1, angular_velocity=0.1) >>> # Profile: maps cam angle to arm angle offset (radians) >>> profile = FunctionProfile( @@ -1310,16 +1310,16 @@

Module contentsExample

-
>>> A = Ground(0.0, 0.0, name="A")
->>> B = Ground(2.0, 0.0, name="B")
->>> C = Ground(0.0, 1.0, name="C")
->>> D = Ground(2.0, 2.0, name="D")
+
>>> A = Ground(0.0, 0.0, name="A")
+>>> B = Ground(2.0, 0.0, name="B")
+>>> C = Ground(0.0, 1.0, name="C")
+>>> D = Ground(2.0, 2.0, name="D")
 >>> joint = PPDyad(
 ...     line1_anchor1=A,
 ...     line1_anchor2=B,
 ...     line2_anchor1=C,
 ...     line2_anchor2=D,
-...     name="intersection"
+...     name="intersection"
 ... )
 
@@ -1413,16 +1413,16 @@

Module contentsExample

-
>>> O1 = Ground(0.0, 0.0, name="O1")
->>> L1 = Ground(0.0, 1.0, name="L1")
->>> L2 = Ground(2.0, 1.0, name="L2")
+
>>> O1 = Ground(0.0, 0.0, name="O1")
+>>> L1 = Ground(0.0, 1.0, name="L1")
+>>> L2 = Ground(2.0, 1.0, name="L2")
 >>> crank = Crank(anchor=O1, radius=1.0)
 >>> slider = RRPDyad(
 ...     revolute_anchor=crank.output,
 ...     line_anchor1=L1,
 ...     line_anchor2=L2,
 ...     distance=1.5,
-...     name="slider"
+...     name="slider"
 ... )
 
@@ -1513,15 +1513,15 @@

Module contentsExample

-
>>> O1 = Ground(0.0, 0.0, name="O1")
->>> O2 = Ground(2.0, 0.0, name="O2")
+
>>> O1 = Ground(0.0, 0.0, name="O1")
+>>> O2 = Ground(2.0, 0.0, name="O2")
 >>> crank = Crank(anchor=O1, radius=1.0)
 >>> rocker = RRRDyad(
 ...     anchor1=crank.output,
 ...     anchor2=O2,
 ...     distance1=2.0,
 ...     distance2=1.5,
-...     name="rocker"
+...     name="rocker"
 ... )
 
@@ -1609,14 +1609,14 @@

Module contents>>> from pylinkage.cam import FunctionProfile, HarmonicMotionLaw >>> import math >>> ->>> O = Ground(0.0, 0.0, name="cam_center") +>>> O = Ground(0.0, 0.0, name="cam_center") >>> cam = Crank(anchor=O, radius=0.1, angular_velocity=0.1) >>> profile = FunctionProfile( ... motion_law=HarmonicMotionLaw(), ... base_radius=1.0, ... total_lift=0.5, ... ) ->>> guide = Ground(0.0, 0.0, name="guide") +>>> guide = Ground(0.0, 0.0, name="guide") >>> follower = TranslatingCamFollower( ... cam_driver=cam, ... profile=profile, @@ -1753,30 +1753,30 @@

Module contentsExamples

>>> # Circle-circle (RRR)
 >>> dyad = create_dyad(
-...     signature="RRR",
-...     anchors={"anchor1": crank.output, "anchor2": ground2},
-...     constraints={"distance1": 2.0, "distance2": 1.5},
-...     name="rocker",
+...     signature="RRR",
+...     anchors={"anchor1": crank.output, "anchor2": ground2},
+...     constraints={"distance1": 2.0, "distance2": 1.5},
+...     name="rocker",
 ... )
 
>>> # Circle-line (RT_R - slider crank)
 >>> dyad = create_dyad(
-...     signature="RT_R",
-...     anchors={"revolute": crank.output, "line1": L1, "line2": L2},
-...     constraints={"distance": 1.5},
-...     name="slider",
+...     signature="RT_R",
+...     anchors={"revolute": crank.output, "line1": L1, "line2": L2},
+...     constraints={"distance": 1.5},
+...     name="slider",
 ... )
 
>>> # Line-line (T_R_T - double slider)
 >>> dyad = create_dyad(
-...     signature="T_R_T",
+...     signature="T_R_T",
 ...     anchors={
-...         "line1_p1": A, "line1_p2": B,
-...         "line2_p1": C, "line2_p2": D,
+...         "line1_p1": A, "line1_p2": B,
+...         "line2_p1": C, "line2_p2": D,
 ...     },
-...     name="double_slider",
+...     name="double_slider",
 ... )
 
diff --git a/docs/api/pylinkage.geometry.html b/docs/api/pylinkage.geometry.html index b21b79f..10fc655 100644 --- a/docs/api/pylinkage.geometry.html +++ b/docs/api/pylinkage.geometry.html @@ -6,14 +6,14 @@ - pylinkage.geometry package — pylinkage 1.2.2 documentation + pylinkage.geometry package — pylinkage 1.3.0 documentation - + diff --git a/docs/api/pylinkage.html b/docs/api/pylinkage.html index 240339c..1654579 100644 --- a/docs/api/pylinkage.html +++ b/docs/api/pylinkage.html @@ -6,14 +6,14 @@ - pylinkage package — pylinkage 1.2.2 documentation + pylinkage package — pylinkage 1.3.0 documentation - + @@ -153,6 +153,7 @@

SubpackagesArcCrank.radius
  • ArcCrank.reload()
  • ArcCrank.set_constraints()
  • +
  • ArcCrank.set_coord()
  • @@ -184,6 +185,7 @@

    SubpackagesLinearActuator.output
  • LinearActuator.reload()
  • LinearActuator.set_constraints()
  • +
  • LinearActuator.set_coord()
  • LinearActuator.speed
  • LinearActuator.stroke
  • @@ -967,6 +969,7 @@

    SubpackagesArcDriverLink.motor_joint
  • ArcDriverLink.output_joint
  • ArcDriverLink.radius
  • +
  • ArcDriverLink.read_angle()
  • ArcDriverLink.reset()
  • ArcDriverLink.step()
  • @@ -979,6 +982,7 @@

    SubpackagesDriverLink.motor_joint
  • DriverLink.output_joint
  • DriverLink.radius
  • +
  • DriverLink.read_angle()
  • DriverLink.reset()
  • DriverLink.step()
  • @@ -1796,9 +1800,9 @@

    SubmodulesExample

    >>> dims = Dimensions(
    -...     node_positions={"A": (0.0, 0.0), "B": (1.0, 0.0)},
    -...     driver_angles={"B": DriverAngle(0.1, 0.0)},
    -...     edge_distances={"AB": 1.0},
    +...     node_positions={"A": (0.0, 0.0), "B": (1.0, 0.0)},
    +...     driver_angles={"B": DriverAngle(0.1, 0.0)},
    +...     edge_distances={"AB": 1.0},
     ... )
     
    @@ -1938,9 +1942,9 @@

    SubmodulesExample

    -
    >>> dims = Dimensions(node_positions={"A": (0, 0), "X": (1, 1)})
    ->>> errors = dims.validate_against(["A", "B"], ["AB"])
    ->>> "X" in errors[0]  # "X" is not a valid node
    +
    >>> dims = Dimensions(node_positions={"A": (0, 0), "X": (1, 1)})
    +>>> errors = dims.validate_against(["A", "B"], ["AB"])
    +>>> "X" in errors[0]  # "X" is not a valid node
     True
     
    @@ -2050,7 +2054,7 @@

    Module contentsExample

    -
    >>> O1 = Ground(0.0, 0.0, name="O1")
    +
    >>> O1 = Ground(0.0, 0.0, name="O1")
     >>> arc_crank = ArcCrank(
     ...     anchor=O1,
     ...     radius=1.0,
    @@ -2159,6 +2163,17 @@ 

    Module contents +
    +set_coord(x: float | None, y: float | None) → None
    +

    Place the output, and read the crank angle from where it lands.

    +

    The angle is the direction from the anchor to (x, y), brought +onto the arc; the sweep restarts in the positive direction, as it +does on a new crank. Like a Crank, the arc crank is then +entirely in the state its coordinates describe, so putting a +linkage back in a position puts its actuators back too.

    +
    +
    @@ -2186,7 +2201,7 @@

    Module contentsExample

    -
    >>> O1 = Ground(0.0, 0.0, name="O1")
    +
    >>> O1 = Ground(0.0, 0.0, name="O1")
     >>> crank = Crank(anchor=O1, radius=1.0)
     >>> crank.position
     (1.0, 0.0)
    @@ -2300,8 +2315,8 @@ 

    Module contentsExample

    -

    +
    speed: float
    @@ -2579,11 +2606,11 @@

    Module contents>>> from pylinkage.dyads import RRRDyad >>> from pylinkage.simulation import Linkage >>> ->>> O1 = Ground(0.0, 0.0, name="O1") ->>> O2 = Ground(2.0, 0.0, name="O2") +>>> O1 = Ground(0.0, 0.0, name="O1") +>>> O2 = Ground(2.0, 0.0, name="O2") >>> crank = Crank(anchor=O1, radius=1.0, angular_velocity=0.1) >>> rocker = RRRDyad(crank.output, O2, distance1=2.0, distance2=1.5) ->>> linkage = Linkage([O1, O2, crank, rocker], name="Four-Bar") +>>> linkage = Linkage([O1, O2, crank, rocker], name="Four-Bar") >>> for positions in linkage.step(): ... print(positions)

    @@ -2791,7 +2818,7 @@

    Module contentsExample

    >>> linkage.set_input_velocity(crank, omega=10.0)  # 10 rad/s
     >>> for pos, vel, acc in linkage.step_with_derivatives():
    -...     print(f"Position: {pos}, Velocity: {vel}")
    +...     print(f"Position: {pos}, Velocity: {vel}")
     
    @@ -2890,7 +2917,7 @@

    Module contentsExample

    >>> linkage.set_input_velocity(crank, omega=10.0)
     >>> for pos, vel, acc in linkage.step_with_derivatives():
    -...     print(f"Crank velocity: {vel[2]}")
    +...     print(f"Crank velocity: {vel[2]}")
     
    @@ -2992,16 +3019,16 @@

    Module contentsExample

    -
    >>> A = Ground(0.0, 0.0, name="A")
    ->>> B = Ground(2.0, 0.0, name="B")
    ->>> C = Ground(0.0, 1.0, name="C")
    ->>> D = Ground(2.0, 2.0, name="D")
    +
    >>> A = Ground(0.0, 0.0, name="A")
    +>>> B = Ground(2.0, 0.0, name="B")
    +>>> C = Ground(0.0, 1.0, name="C")
    +>>> D = Ground(2.0, 2.0, name="D")
     >>> joint = PPDyad(
     ...     line1_anchor1=A,
     ...     line1_anchor2=B,
     ...     line2_anchor1=C,
     ...     line2_anchor2=D,
    -...     name="intersection"
    +...     name="intersection"
     ... )
     
    @@ -3099,16 +3126,16 @@

    Module contentsExample

    -
    >>> O1 = Ground(0.0, 0.0, name="O1")
    +
    >>> O1 = Ground(0.0, 0.0, name="O1")
     >>> crank = Crank(anchor=O1, radius=1.0)
    ->>> O2 = Ground(2.0, 0.0, name="O2")
    +>>> O2 = Ground(2.0, 0.0, name="O2")
     >>> # Track a point at 45 degrees from crank->O2 line
     >>> tracker = PointTracker(
     ...     anchor1=crank.output,
     ...     anchor2=O2,
     ...     distance=0.5,
     ...     angle=math.pi/4,
    -...     name="tracer_point"
    +...     name="tracer_point"
     ... )
     
    @@ -3205,16 +3232,16 @@

    Module contentsExample

    -
    >>> O1 = Ground(0.0, 0.0, name="O1")
    ->>> L1 = Ground(0.0, 1.0, name="L1")
    ->>> L2 = Ground(2.0, 1.0, name="L2")
    +
    >>> O1 = Ground(0.0, 0.0, name="O1")
    +>>> L1 = Ground(0.0, 1.0, name="L1")
    +>>> L2 = Ground(2.0, 1.0, name="L2")
     >>> crank = Crank(anchor=O1, radius=1.0)
     >>> slider = RRPDyad(
     ...     revolute_anchor=crank.output,
     ...     line_anchor1=L1,
     ...     line_anchor2=L2,
     ...     distance=1.5,
    -...     name="slider"
    +...     name="slider"
     ... )
     
    @@ -3305,15 +3332,15 @@

    Module contentsExample

    -
    >>> O1 = Ground(0.0, 0.0, name="O1")
    ->>> O2 = Ground(2.0, 0.0, name="O2")
    +
    >>> O1 = Ground(0.0, 0.0, name="O1")
    +>>> O2 = Ground(2.0, 0.0, name="O2")
     >>> crank = Crank(anchor=O1, radius=1.0)
     >>> rocker = RRRDyad(
     ...     anchor1=crank.output,
     ...     anchor2=O2,
     ...     distance1=2.0,
     ...     distance2=1.5,
    -...     name="rocker"
    +...     name="rocker"
     ... )
     
    @@ -3553,7 +3580,10 @@

    Module contentspylinkage.kinematic_default_test(func: Callable[[...], float], error_penalty: float) → Callable[[Linkage, Iterable[float], JointPositions | None], float]

    Standard run for any linkage before a complete fitness evaluation.

    This decorator makes a kinematic simulation, before passing the loci to the -decorated function.

    +decorated function: one complete cycle of the linkage from its initial +position, at the stride step() uses (dt=1), with at least 96 +frames. An evaluation therefore costs linkage.get_rotation_period() +steps, the least common multiple of the actuators’ periods.

    Parameters:

    Anything else raises NotImplementedError so callers know to extend the bridge when pylinkage grows new component types.

    @@ -1292,20 +1312,20 @@

    Module contentsfrom pylinkage.dimensions import Dimensions, DriverAngle # Create topology -hg = HypergraphLinkage(name="Four-bar") -hg.add_node(Node("A", role=NodeRole.GROUND)) -hg.add_node(Node("B", role=NodeRole.DRIVER)) -hg.add_node(Node("C", role=NodeRole.DRIVEN)) -hg.add_node(Node("D", role=NodeRole.GROUND)) -hg.add_edge(Edge("AB", "A", "B")) -hg.add_edge(Edge("BC", "B", "C")) -hg.add_edge(Edge("CD", "C", "D")) +hg = HypergraphLinkage(name="Four-bar") +hg.add_node(Node("A", role=NodeRole.GROUND)) +hg.add_node(Node("B", role=NodeRole.DRIVER)) +hg.add_node(Node("C", role=NodeRole.DRIVEN)) +hg.add_node(Node("D", role=NodeRole.GROUND)) +hg.add_edge(Edge("AB", "A", "B")) +hg.add_edge(Edge("BC", "B", "C")) +hg.add_edge(Edge("CD", "C", "D")) # Create dimensions dims = Dimensions( - node_positions={"A": (0, 0), "B": (1, 0), "C": (2, 1), "D": (3, 0)}, - driver_angles={"B": DriverAngle(0.1)}, - edge_distances={"AB": 1.0, "BC": 2.0, "CD": 2.0}, + node_positions={"A": (0, 0), "B": (1, 0), "C": (2, 1), "D": (3, 0)}, + driver_angles={"B": DriverAngle(0.1)}, + edge_distances={"AB": 1.0, "BC": 2.0, "CD": 2.0}, ) # Convert to mechanism for simulation @@ -1330,13 +1350,13 @@

    Module contentsExample

    -
    >>> topology = HypergraphLinkage(name="leg")
    +
    >>> topology = HypergraphLinkage(name="leg")
     >>> # ... add nodes and edges ...
     >>> instance = ComponentInstance(
    -...     id="left_leg",
    +...     id="left_leg",
     ...     topology=topology,
    -...     ports={"input": "A", "output": "B"},
    -...     name="Left Leg"
    +...     ports={"input": "A", "output": "B"},
    +...     name="Left Leg"
     ... )
     
    @@ -1412,10 +1432,10 @@

    Module contentsExample

    >>> conn = Connection(
    -...     from_instance="leg1",
    -...     from_port="output",
    -...     to_instance="leg2",
    -...     to_port="input"
    +...     from_instance="leg1",
    +...     from_port="output",
    +...     to_instance="leg2",
    +...     to_port="input"
     ... )
     
    @@ -1459,7 +1479,7 @@

    Module contentsExample

    -
    >>> edge = Edge("AB", source="A", target="B")
    +
    >>> edge = Edge("AB", source="A", target="B")
     
    @@ -1527,16 +1547,16 @@

    Module contentsExample

    >>> # Create instances
    ->>> leg1 = ComponentInstance("leg1", leg_topology, {"input": "A", "output": "B"})
    ->>> leg2 = ComponentInstance("leg2", leg_topology, {"input": "A", "output": "B"})
    +>>> leg1 = ComponentInstance("leg1", leg_topology, {"input": "A", "output": "B"})
    +>>> leg2 = ComponentInstance("leg2", leg_topology, {"input": "A", "output": "B"})
     >>>
     >>> # Create hierarchical linkage
     >>> linkage = HierarchicalLinkage(
    -...     instances={"leg1": leg1, "leg2": leg2},
    +...     instances={"leg1": leg1, "leg2": leg2},
     ...     connections=[
    -...         Connection("leg1", "output", "leg2", "input"),
    +...         Connection("leg1", "output", "leg2", "input"),
     ...     ],
    -...     name="Two-Leg Walker"
    +...     name="Two-Leg Walker"
     ... )
     >>>
     >>> # Flatten for simulation
    @@ -1640,9 +1660,9 @@ 

    Module contentsExample

    >>> # Triangle rigid body connecting A, B, C
     >>> he = Hyperedge(
    -...     id="triangle",
    -...     nodes=("A", "B", "C"),
    -...     name="Triangle Link"
    +...     id="triangle",
    +...     nodes=("A", "B", "C"),
    +...     name="Triangle Link"
     ... )
     
    @@ -1668,11 +1688,11 @@

    Module contentsExample

    >>> edges = [
    -...     Edge("e1", "A", "B"),
    -...     Edge("e2", "B", "C"),
    +...     Edge("e1", "A", "B"),
    +...     Edge("e2", "B", "C"),
     ... ]
    ->>> he = Hyperedge.from_edges(edges, "combined")
    ->>> "A" in he.nodes
    +>>> he = Hyperedge.from_edges(edges, "combined")
    +>>> "A" in he.nodes
     True
     
    @@ -1708,7 +1728,7 @@

    Module contentsExample

    -
    >>> he = Hyperedge("tri", ("A", "B", "C"))
    +
    >>> he = Hyperedge("tri", ("A", "B", "C"))
     >>> edges = he.to_edges()
     >>> len(edges)
     2
    @@ -1751,10 +1771,10 @@ 

    Module contentsExample

    -
    >>> graph = HypergraphLinkage(name="Four-bar")
    ->>> graph.add_node(Node("A", role=NodeRole.GROUND))
    ->>> graph.add_node(Node("B", role=NodeRole.DRIVER))
    ->>> graph.add_edge(Edge("AB", source="A", target="B"))
    +
    >>> graph = HypergraphLinkage(name="Four-bar")
    +>>> graph.add_node(Node("A", role=NodeRole.GROUND))
    +>>> graph.add_node(Node("B", role=NodeRole.DRIVER))
    +>>> graph.add_edge(Edge("AB", source="A", target="B"))
     
    @@ -2091,7 +2111,7 @@

    Module contentsExample

    -
    >>> node = Node("A", role=NodeRole.GROUND)
    +
    >>> node = Node("A", role=NodeRole.GROUND)
     >>> node.joint_type
     <JointType.REVOLUTE: 1>
     
    @@ -2168,6 +2188,11 @@

    Module contentsPrismaticJoint keeps its slide line +as a hyperedge over itself and two ground nodes on the line, the +encoding to_mechanism() reads. Ground joints that already lie +on the line are used; otherwise <id>_rail0 / <id>_rail1 +ground nodes are added at line_point and one axis length along.

    Parameters:

    mechanism – The Mechanism to convert.

    @@ -2327,6 +2352,12 @@

    Module contentsJointType.PRISMATIC node is a slider: it needs one +edge, to the revolute anchor it is linked to, and one hyperedge of +three nodes whose two other nodes lie on the slide line, which is +how from_sim_linkage() encodes an RRPDyad. The mechanism +keeps the line as the PrismaticJoint’s +axis and line_point, so the two line nodes must be ground.

    Parameters:
    Raises:
    -

    ValueError – If the hypergraph is underconstrained or has - disconnected components that cannot be solved.

    +
      +
    • ValueError – If the hypergraph is underconstrained or has + disconnected components that cannot be solved.

    • +
    • NotImplementedError – If a prismatic node is not a slider on a + fixed line (its guide is a moving link, it has no revolute + leg or several, or it is a PPDyad-style double slider), + or if a driver node is prismatic (a linear actuator), which + Mechanism cannot represent yet.

    • +

    Example

    -
    >>> hg = HypergraphLinkage(name="Four-bar")
    ->>> hg.add_node(Node("A", role=NodeRole.GROUND))
    ->>> hg.add_edge(Edge("AB", "A", "B"))
    +
    >>> hg = HypergraphLinkage(name="Four-bar")
    +>>> hg.add_node(Node("A", role=NodeRole.GROUND))
    +>>> hg.add_edge(Edge("AB", "A", "B"))
     >>> dims = Dimensions(
    -...     node_positions={"A": (0, 0), "B": (1, 0)},
    -...     edge_distances={"AB": 1.0},
    +...     node_positions={"A": (0, 0), "B": (1, 0)},
    +...     edge_distances={"AB": 1.0},
     ... )
     >>> mechanism = to_mechanism(hg, dims)
     
    diff --git a/docs/api/pylinkage.linkage.html b/docs/api/pylinkage.linkage.html index 875fe9b..fb0e890 100644 --- a/docs/api/pylinkage.linkage.html +++ b/docs/api/pylinkage.linkage.html @@ -6,14 +6,14 @@ - pylinkage.linkage package — pylinkage 1.2.2 documentation + pylinkage.linkage package — pylinkage 1.3.0 documentation - + @@ -202,7 +202,10 @@

    Submodulespylinkage.linkage.analysis.kinematic_default_test(func: Callable[[...], float], error_penalty: float) → Callable[[Linkage, Iterable[float], JointPositions | None], float]

    Standard run for any linkage before a complete fitness evaluation.

    This decorator makes a kinematic simulation, before passing the loci to the -decorated function.

    +decorated function: one complete cycle of the linkage from its initial +position, at the stride step() uses (dt=1), with at least 96 +frames. An evaluation therefore costs linkage.get_rotation_period() +steps, the least common multiple of the actuators’ periods.

    Parameters:

    @@ -476,11 +479,11 @@

    SubmodulesExample

    >>> tolerances = {
    -...     "Crank_radius": 0.1,    # +/- 0.1 mm
    -...     "Revolute_dist1": 0.2,  # +/- 0.2 mm
    +...     "Crank_radius": 0.1,    # +/- 0.1 mm
    +...     "Revolute_dist1": 0.2,  # +/- 0.2 mm
     ... }
     >>> analysis = linkage.tolerance_analysis(tolerances, n_samples=500)
    ->>> print(f"Max deviation: {analysis.max_deviation:.4f}")
    +>>> print(f"Max deviation: {analysis.max_deviation:.4f}")
     >>> analysis.plot_cloud()
     
    @@ -1192,7 +1195,7 @@

    Module contents
    >>> analysis = linkage.sensitivity_analysis(delta=0.01)
     >>> print(analysis.most_sensitive)
     >>> for name, sens in analysis.sensitivity_ranking:
    -...     print(f"{name}: {sens:.4f}")
    +...     print(f"{name}: {sens:.4f}")
     

    @@ -1246,11 +1249,11 @@

    Module contentsExample

    >>> tolerances = {
    -...     "Crank_radius": 0.1,    # +/- 0.1 mm
    -...     "Revolute_dist1": 0.2,  # +/- 0.2 mm
    +...     "Crank_radius": 0.1,    # +/- 0.1 mm
    +...     "Revolute_dist1": 0.2,  # +/- 0.2 mm
     ... }
     >>> analysis = linkage.tolerance_analysis(tolerances, n_samples=500)
    ->>> print(f"Max deviation: {analysis.max_deviation:.4f}")
    +>>> print(f"Max deviation: {analysis.max_deviation:.4f}")
     >>> analysis.plot_cloud()
     
    @@ -1394,7 +1397,10 @@

    Module contentspylinkage.linkage.kinematic_default_test(func: Callable[[...], float], error_penalty: float) → Callable[[Linkage, Iterable[float], JointPositions | None], float]

    Standard run for any linkage before a complete fitness evaluation.

    This decorator makes a kinematic simulation, before passing the loci to the -decorated function.

    +decorated function: one complete cycle of the linkage from its initial +position, at the stride step() uses (dt=1), with at least 96 +frames. An evaluation therefore costs linkage.get_rotation_period() +steps, the least common multiple of the actuators’ periods.

    Parameters:
    @@ -277,7 +277,7 @@

    SubmodulesExample

    -
    >>> builder.add_ground_link("ground", ports={"O1": (0, 0), "O2": (3, 0)})
    +
    >>> builder.add_ground_link("ground", ports={"O1": (0, 0), "O2": (3, 0)})
     

    @@ -300,7 +300,7 @@

    SubmodulesExample

    -
    >>> builder.add_link("coupler", length=2.5)
    +
    >>> builder.add_link("coupler", length=2.5)
     

    @@ -330,7 +330,7 @@

    SubmodulesExample

    >>> # Track the midpoint of the coupler link
    ->>> builder.add_point_tracker("coupler_mid", "coupler.0", "coupler.1")
    +>>> builder.add_point_tracker("coupler_mid", "coupler.0", "coupler.1")
     
    @@ -376,7 +376,7 @@

    SubmodulesExample

    -
    >>> builder.add_slide_axis("rail", through=(0, 0), direction=(1, 0))
    +
    >>> builder.add_slide_axis("rail", through=(0, 0), direction=(1, 0))
     
    @@ -405,8 +405,8 @@

    SubmodulesExample

    >>> builder.add_ternary_link(
    -...     "coupler",
    -...     port_geometry={"A": (0, 0), "B": (3, 0), "P": (1.5, 1)}
    +...     "coupler",
    +...     port_geometry={"A": (0, 0), "B": (3, 0), "P": (1.5, 1)}
     ... )
     
    @@ -450,7 +450,7 @@

    SubmodulesExample

    -
    >>> builder.connect("crank.tip", "coupler.0")
    +
    >>> builder.connect("crank.tip", "coupler.0")
     
    @@ -473,7 +473,7 @@

    SubmodulesExample

    -
    >>> builder.connect_prismatic("rod.1", "rail")
    +
    >>> builder.connect_prismatic("rod.1", "rail")
     
    @@ -502,7 +502,7 @@

    SubmodulesExample

    -
    >>> builder.set_branch("coupler.1", 1)  # Use "lower" configuration
    +
    >>> builder.set_branch("coupler.1", 1)  # Use "lower" configuration
     
    @@ -840,7 +840,7 @@

    SubmodulesExample

    -
    >>> ground = GroundJoint("O", position=(0.0, 0.0))
    +
    >>> ground = GroundJoint("O", position=(0.0, 0.0))
     >>> ground.is_ground
     True
     
    @@ -1007,7 +1007,7 @@

    SubmodulesExample

    -
    >>> joint = PrismaticJoint("S", position=(0.0, 0.0), axis=(1.0, 0.0))
    +
    >>> joint = PrismaticJoint("S", position=(0.0, 0.0), axis=(1.0, 0.0))
     >>> joint.joint_type
     <JointType.PRISMATIC: 2>
     
    @@ -1050,7 +1050,7 @@

    SubmodulesExample

    -
    >>> joint = RevoluteJoint("A", position=(1.0, 2.0))
    +
    >>> joint = RevoluteJoint("A", position=(1.0, 2.0))
     >>> joint.joint_type
     <JointType.REVOLUTE: 1>
     
    @@ -1087,7 +1087,7 @@

    SubmodulesExample

    >>> # Track the midpoint of a link between joints A and B
    ->>> tracker = TrackerJoint("midpoint", ref_joint1_id="A", ref_joint2_id="B",
    +>>> tracker = TrackerJoint("midpoint", ref_joint1_id="A", ref_joint2_id="B",
     ...                        distance=0.5, angle=0.0)
     
    @@ -1167,9 +1167,9 @@

    SubmodulesExample

    >>> from pylinkage.mechanism.joint import GroundJoint, RevoluteJoint
    ->>> O = GroundJoint("O", position=(0.0, 0.0))
    ->>> A = RevoluteJoint("A", position=(1.0, 0.0))
    ->>> arc_crank = ArcDriverLink("crank", joints=[O, A], motor_joint=O,
    +>>> O = GroundJoint("O", position=(0.0, 0.0))
    +>>> A = RevoluteJoint("A", position=(1.0, 0.0))
    +>>> arc_crank = ArcDriverLink("crank", joints=[O, A], motor_joint=O,
     ...                           angular_velocity=0.1,
     ...                           arc_start=0.5, arc_end=2.5)
     
    @@ -1222,6 +1222,14 @@

    Submodules +
    +read_angle() → None
    +

    Set current_angle from where the motor and output joints are.

    +

    The angle is brought onto the arc and the sweep restarts in the +positive direction, as on a new crank.

    +
    +
    reset() → None
    @@ -1263,9 +1271,9 @@

    SubmodulesExample

    >>> from pylinkage.mechanism.joint import GroundJoint, RevoluteJoint
    ->>> O = GroundJoint("O", position=(0.0, 0.0))
    ->>> A = RevoluteJoint("A", position=(1.0, 0.0))
    ->>> crank = DriverLink("crank", joints=[O, A], motor_joint=O,
    +>>> O = GroundJoint("O", position=(0.0, 0.0))
    +>>> A = RevoluteJoint("A", position=(1.0, 0.0))
    +>>> crank = DriverLink("crank", joints=[O, A], motor_joint=O,
     ...                    angular_velocity=0.1)
     
    @@ -1309,6 +1317,14 @@

    Submodules +
    +read_angle() → None
    +

    Set current_angle from where the motor and output joints are.

    +

    The crank is then in the state its joints describe, so putting +a mechanism back in a position puts its drivers back too.

    +

    +
    reset() → None
    @@ -1344,9 +1360,9 @@

    SubmodulesExample

    >>> from pylinkage.mechanism.joint import GroundJoint
    ->>> O1 = GroundJoint("O1", position=(0.0, 0.0))
    ->>> O2 = GroundJoint("O2", position=(2.0, 0.0))
    ->>> ground = GroundLink("ground", joints=[O1, O2])
    +>>> O1 = GroundJoint("O1", position=(0.0, 0.0))
    +>>> O2 = GroundJoint("O2", position=(2.0, 0.0))
    +>>> ground = GroundLink("ground", joints=[O1, O2])
     
    @@ -1381,9 +1397,9 @@

    SubmodulesExample

    >>> from pylinkage.mechanism.joint import RevoluteJoint
    ->>> j1 = RevoluteJoint("A", position=(0.0, 0.0))
    ->>> j2 = RevoluteJoint("B", position=(1.0, 0.0))
    ->>> link = Link("AB", joints=[j1, j2])
    +>>> j1 = RevoluteJoint("A", position=(0.0, 0.0))
    +>>> j2 = RevoluteJoint("B", position=(1.0, 0.0))
    +>>> link = Link("AB", joints=[j1, j2])
     >>> link.length
     1.0
     
    @@ -1568,12 +1584,12 @@

    SubmodulesExample

    >>> from pylinkage.mechanism import Mechanism, GroundJoint, create_crank, create_rrr_dyad
     >>> # Create a four-bar linkage
    ->>> O1 = GroundJoint("O1", position=(0.0, 0.0))
    ->>> O2 = GroundJoint("O2", position=(2.0, 0.0))
    ->>> ground = GroundLink("ground", joints=[O1, O2])
    +>>> O1 = GroundJoint("O1", position=(0.0, 0.0))
    +>>> O2 = GroundJoint("O2", position=(2.0, 0.0))
    +>>> ground = GroundLink("ground", joints=[O1, O2])
     >>> crank, A = create_crank(O1, radius=1.0, angular_velocity=0.1)
     >>> link1, link2, B = create_rrr_dyad(A, O2, distance1=2.0, distance2=1.5)
    ->>> mechanism = Mechanism("Four-Bar", joints=[O1, O2, A, B],
    +>>> mechanism = Mechanism("Four-Bar", joints=[O1, O2, A, B],
     ...                       links=[ground, crank, link1, link2])
     
    @@ -1678,8 +1694,12 @@

    Submodules3·(n − 1) − 2·R − P where n is the total number of links (including the ground frame), R counts revolute -pairs (RevoluteJoint and GroundJoint) and P counts -prismatic pairs.

    +pairs and P prismatic pairs. A joint on k links joins +them with k − 1 pairs: a ground joint that only marks a +point of the frame, or a coupler point, is no pair at all. A +PrismaticJoint adds the prismatic pair with the frame its +slide line stands for, on top of the revolute pairs of its +links.

    Positive ⇒ unconstrained DOF (a 1-DOF four-bar returns 1); zero ⇒ statically determinate; negative ⇒ over-constrained.

    @@ -1776,7 +1796,7 @@

    Submodules
    set_joint_positions(positions: list[Coord]) → None
    -

    Set positions of all joints.

    +

    Set positions of all joints, and read the drivers’ angles from them.

    @@ -2051,9 +2071,9 @@

    Module contents... ) >>> >>> # Create ground joints ->>> O1 = GroundJoint("O1", position=(0.0, 0.0)) ->>> O2 = GroundJoint("O2", position=(2.0, 0.0)) ->>> ground = GroundLink("ground", joints=[O1, O2]) +>>> O1 = GroundJoint("O1", position=(0.0, 0.0)) +>>> O2 = GroundJoint("O2", position=(2.0, 0.0)) +>>> ground = GroundLink("ground", joints=[O1, O2])

    @@ -2101,9 +2121,9 @@

    Module contentsExample

    >>> from pylinkage.mechanism.joint import GroundJoint, RevoluteJoint
    ->>> O = GroundJoint("O", position=(0.0, 0.0))
    ->>> A = RevoluteJoint("A", position=(1.0, 0.0))
    ->>> arc_crank = ArcDriverLink("crank", joints=[O, A], motor_joint=O,
    +>>> O = GroundJoint("O", position=(0.0, 0.0))
    +>>> A = RevoluteJoint("A", position=(1.0, 0.0))
    +>>> arc_crank = ArcDriverLink("crank", joints=[O, A], motor_joint=O,
     ...                           angular_velocity=0.1,
     ...                           arc_start=0.5, arc_end=2.5)
     
    @@ -2156,6 +2176,14 @@

    Module contents +
    +read_angle() → None
    +

    Set current_angle from where the motor and output joints are.

    +

    The angle is brought onto the arc and the sweep restarts in the +positive direction, as on a new crank.

    +
    +
    reset() → None
    @@ -2197,9 +2225,9 @@

    Module contentsExample

    >>> from pylinkage.mechanism.joint import GroundJoint, RevoluteJoint
    ->>> O = GroundJoint("O", position=(0.0, 0.0))
    ->>> A = RevoluteJoint("A", position=(1.0, 0.0))
    ->>> crank = DriverLink("crank", joints=[O, A], motor_joint=O,
    +>>> O = GroundJoint("O", position=(0.0, 0.0))
    +>>> A = RevoluteJoint("A", position=(1.0, 0.0))
    +>>> crank = DriverLink("crank", joints=[O, A], motor_joint=O,
     ...                    angular_velocity=0.1)
     
    @@ -2243,6 +2271,14 @@

    Module contents +
    +read_angle() → None
    +

    Set current_angle from where the motor and output joints are.

    +

    The crank is then in the state its joints describe, so putting +a mechanism back in a position puts its drivers back too.

    +

    +
    reset() → None
    @@ -2277,7 +2313,7 @@

    Module contentsExample

    -
    >>> ground = GroundJoint("O", position=(0.0, 0.0))
    +
    >>> ground = GroundJoint("O", position=(0.0, 0.0))
     >>> ground.is_ground
     True
     
    @@ -2309,9 +2345,9 @@

    Module contentsExample

    >>> from pylinkage.mechanism.joint import GroundJoint
    ->>> O1 = GroundJoint("O1", position=(0.0, 0.0))
    ->>> O2 = GroundJoint("O2", position=(2.0, 0.0))
    ->>> ground = GroundLink("ground", joints=[O1, O2])
    +>>> O1 = GroundJoint("O1", position=(0.0, 0.0))
    +>>> O2 = GroundJoint("O2", position=(2.0, 0.0))
    +>>> ground = GroundLink("ground", joints=[O1, O2])
     
    @@ -2475,9 +2511,9 @@

    Module contentsExample

    >>> from pylinkage.mechanism.joint import RevoluteJoint
    ->>> j1 = RevoluteJoint("A", position=(0.0, 0.0))
    ->>> j2 = RevoluteJoint("B", position=(1.0, 0.0))
    ->>> link = Link("AB", joints=[j1, j2])
    +>>> j1 = RevoluteJoint("A", position=(0.0, 0.0))
    +>>> j2 = RevoluteJoint("B", position=(1.0, 0.0))
    +>>> link = Link("AB", joints=[j1, j2])
     >>> link.length
     1.0
     
    @@ -2648,12 +2684,12 @@

    Module contentsExample

    >>> from pylinkage.mechanism import Mechanism, GroundJoint, create_crank, create_rrr_dyad
     >>> # Create a four-bar linkage
    ->>> O1 = GroundJoint("O1", position=(0.0, 0.0))
    ->>> O2 = GroundJoint("O2", position=(2.0, 0.0))
    ->>> ground = GroundLink("ground", joints=[O1, O2])
    +>>> O1 = GroundJoint("O1", position=(0.0, 0.0))
    +>>> O2 = GroundJoint("O2", position=(2.0, 0.0))
    +>>> ground = GroundLink("ground", joints=[O1, O2])
     >>> crank, A = create_crank(O1, radius=1.0, angular_velocity=0.1)
     >>> link1, link2, B = create_rrr_dyad(A, O2, distance1=2.0, distance2=1.5)
    ->>> mechanism = Mechanism("Four-Bar", joints=[O1, O2, A, B],
    +>>> mechanism = Mechanism("Four-Bar", joints=[O1, O2, A, B],
     ...                       links=[ground, crank, link1, link2])
     
    @@ -2758,8 +2794,12 @@

    Module contents3·(n − 1) − 2·R − P where n is the total number of links (including the ground frame), R counts revolute -pairs (RevoluteJoint and GroundJoint) and P counts -prismatic pairs.

    +pairs and P prismatic pairs. A joint on k links joins +them with k − 1 pairs: a ground joint that only marks a +point of the frame, or a coupler point, is no pair at all. A +PrismaticJoint adds the prismatic pair with the frame its +slide line stands for, on top of the revolute pairs of its +links.

    Positive ⇒ unconstrained DOF (a 1-DOF four-bar returns 1); zero ⇒ statically determinate; negative ⇒ over-constrained.

    @@ -2856,7 +2896,7 @@

    Module contents
    set_joint_positions(positions: list[Coord]) → None
    -

    Set positions of all joints.

    +

    Set positions of all joints, and read the drivers’ angles from them.

    @@ -2972,14 +3012,14 @@

    Module contentsExample

    -

    @@ -3060,7 +3100,7 @@

    Module contentsExample

    -
    >>> builder.add_ground_link("ground", ports={"O1": (0, 0), "O2": (3, 0)})
    +
    >>> builder.add_ground_link("ground", ports={"O1": (0, 0), "O2": (3, 0)})
     
    @@ -3083,7 +3123,7 @@

    Module contentsExample

    -
    >>> builder.add_link("coupler", length=2.5)
    +
    >>> builder.add_link("coupler", length=2.5)
     
    @@ -3113,7 +3153,7 @@

    Module contentsExample

    >>> # Track the midpoint of the coupler link
    ->>> builder.add_point_tracker("coupler_mid", "coupler.0", "coupler.1")
    +>>> builder.add_point_tracker("coupler_mid", "coupler.0", "coupler.1")
     
    @@ -3159,7 +3199,7 @@

    Module contentsExample

    -
    >>> builder.add_slide_axis("rail", through=(0, 0), direction=(1, 0))
    +
    >>> builder.add_slide_axis("rail", through=(0, 0), direction=(1, 0))
     
    @@ -3188,8 +3228,8 @@

    Module contentsExample

    >>> builder.add_ternary_link(
    -...     "coupler",
    -...     port_geometry={"A": (0, 0), "B": (3, 0), "P": (1.5, 1)}
    +...     "coupler",
    +...     port_geometry={"A": (0, 0), "B": (3, 0), "P": (1.5, 1)}
     ... )
     
    @@ -3233,7 +3273,7 @@

    Module contentsExample

    -
    >>> builder.connect("crank.tip", "coupler.0")
    +
    >>> builder.connect("crank.tip", "coupler.0")
     
    @@ -3256,7 +3296,7 @@

    Module contentsExample

    -
    >>> builder.connect_prismatic("rod.1", "rail")
    +
    >>> builder.connect_prismatic("rod.1", "rail")
     
    @@ -3285,7 +3325,7 @@

    Module contentsExample

    -
    >>> builder.set_branch("coupler.1", 1)  # Use "lower" configuration
    +
    >>> builder.set_branch("coupler.1", 1)  # Use "lower" configuration
     
    @@ -3312,7 +3352,7 @@

    Module contentsExample

    -
    >>> joint = PrismaticJoint("S", position=(0.0, 0.0), axis=(1.0, 0.0))
    +
    >>> joint = PrismaticJoint("S", position=(0.0, 0.0), axis=(1.0, 0.0))
     >>> joint.joint_type
     <JointType.PRISMATIC: 2>
     
    @@ -3355,7 +3395,7 @@

    Module contentsExample

    -
    >>> joint = RevoluteJoint("A", position=(1.0, 2.0))
    +
    >>> joint = RevoluteJoint("A", position=(1.0, 2.0))
     >>> joint.joint_type
     <JointType.REVOLUTE: 1>
     
    @@ -3392,7 +3432,7 @@

    Module contentsExample

    >>> # Track the midpoint of a link between joints A and B
    ->>> tracker = TrackerJoint("midpoint", ref_joint1_id="A", ref_joint2_id="B",
    +>>> tracker = TrackerJoint("midpoint", ref_joint1_id="A", ref_joint2_id="B",
     ...                        distance=0.5, angle=0.0)
     
    diff --git a/docs/api/pylinkage.optimization.collections.html b/docs/api/pylinkage.optimization.collections.html index 052b2ce..6335b0f 100644 --- a/docs/api/pylinkage.optimization.collections.html +++ b/docs/api/pylinkage.optimization.collections.html @@ -6,14 +6,14 @@ - pylinkage.optimization.collections package — pylinkage 1.2.2 documentation + pylinkage.optimization.collections package — pylinkage 1.3.0 documentation - + diff --git a/docs/api/pylinkage.optimization.html b/docs/api/pylinkage.optimization.html index c7c61dc..1b3cb16 100644 --- a/docs/api/pylinkage.optimization.html +++ b/docs/api/pylinkage.optimization.html @@ -6,14 +6,14 @@ - pylinkage.optimization package — pylinkage 1.2.2 documentation + pylinkage.optimization package — pylinkage 1.3.0 documentation - + @@ -364,7 +364,7 @@

    Submodules
    @@ -876,7 +876,7 @@

    Submodulespareto = multi_objective_optimization( objectives=[path_error, transmission_penalty], linkage=my_linkage, - objective_names=["Path Error", "Transmission Penalty"], + objective_names=["Path Error", "Transmission Penalty"], n_generations=100, ) @@ -1047,8 +1047,8 @@

    Submoduleseval_func=fitness, linkage=my_linkage, stages=[ - (differential_evolution_optimization, {"maxiter": 300}), - (minimize_linkage, {"method": "Nelder-Mead", "maxiter": 500}), + (differential_evolution_optimization, {"maxiter": 300}), + (minimize_linkage, {"method": "Nelder-Mead", "maxiter": 500}), ], order_relation=min, ) @@ -1232,7 +1232,7 @@

    Submoduleseval_func=fitness, linkage=my_linkage, x0=initial_guess, - method="Nelder-Mead", + method="Nelder-Mead", order_relation=min, ) best = result[0] # Member with .score, .dimensions, .initial_positions @@ -1419,7 +1419,7 @@

    Submodulesresult = warm_start_co_optimization( precision_points=points, objectives=[accuracy], - objective_names=["Path Error"], + objective_names=["Path Error"], )

    diff --git a/docs/api/pylinkage.population.html b/docs/api/pylinkage.population.html index 27e2858..b32ea38 100644 --- a/docs/api/pylinkage.population.html +++ b/docs/api/pylinkage.population.html @@ -6,14 +6,14 @@ - pylinkage.population package — pylinkage 1.2.2 documentation + pylinkage.population package — pylinkage 1.3.0 documentation - + diff --git a/docs/api/pylinkage.simulation.html b/docs/api/pylinkage.simulation.html index 0036a82..ff98675 100644 --- a/docs/api/pylinkage.simulation.html +++ b/docs/api/pylinkage.simulation.html @@ -6,14 +6,14 @@ - pylinkage.simulation package — pylinkage 1.2.2 documentation + pylinkage.simulation package — pylinkage 1.3.0 documentation - + @@ -146,11 +146,11 @@

    Submodules>>> from pylinkage.dyads import RRRDyad >>> from pylinkage.simulation import Linkage >>> ->>> O1 = Ground(0.0, 0.0, name="O1") ->>> O2 = Ground(2.0, 0.0, name="O2") +>>> O1 = Ground(0.0, 0.0, name="O1") +>>> O2 = Ground(2.0, 0.0, name="O2") >>> crank = Crank(anchor=O1, radius=1.0, angular_velocity=0.1) >>> rocker = RRRDyad(crank.output, O2, distance1=2.0, distance2=1.5) ->>> linkage = Linkage([O1, O2, crank, rocker], name="Four-Bar") +>>> linkage = Linkage([O1, O2, crank, rocker], name="Four-Bar") >>> for positions in linkage.step(): ... print(positions)

    @@ -358,7 +358,7 @@

    SubmodulesExample

    >>> linkage.set_input_velocity(crank, omega=10.0)  # 10 rad/s
     >>> for pos, vel, acc in linkage.step_with_derivatives():
    -...     print(f"Position: {pos}, Velocity: {vel}")
    +...     print(f"Position: {pos}, Velocity: {vel}")
     
    @@ -457,7 +457,7 @@

    SubmodulesExample

    >>> linkage.set_input_velocity(crank, omega=10.0)
     >>> for pos, vel, acc in linkage.step_with_derivatives():
    -...     print(f"Crank velocity: {vel[2]}")
    +...     print(f"Crank velocity: {vel[2]}")
     
    @@ -503,8 +503,8 @@

    Module contentsfrom pylinkage.simulation import Linkage # Ground points -O1 = Ground(0.0, 0.0, name="O1") -O2 = Ground(2.0, 0.0, name="O2") +O1 = Ground(0.0, 0.0, name="O1") +O2 = Ground(2.0, 0.0, name="O2") # Crank (driver) crank = Crank(anchor=O1, radius=1.0, angular_velocity=0.1) @@ -518,7 +518,7 @@

    Module contents) # Build and simulate -linkage = Linkage([O1, O2, crank, rocker], name="Four-Bar") +linkage = Linkage([O1, O2, crank, rocker], name="Four-Bar") for positions in linkage.step(): print(positions)

    @@ -537,11 +537,11 @@

    Module contents>>> from pylinkage.dyads import RRRDyad >>> from pylinkage.simulation import Linkage >>> ->>> O1 = Ground(0.0, 0.0, name="O1") ->>> O2 = Ground(2.0, 0.0, name="O2") +>>> O1 = Ground(0.0, 0.0, name="O1") +>>> O2 = Ground(2.0, 0.0, name="O2") >>> crank = Crank(anchor=O1, radius=1.0, angular_velocity=0.1) >>> rocker = RRRDyad(crank.output, O2, distance1=2.0, distance2=1.5) ->>> linkage = Linkage([O1, O2, crank, rocker], name="Four-Bar") +>>> linkage = Linkage([O1, O2, crank, rocker], name="Four-Bar") >>> for positions in linkage.step(): ... print(positions)

    @@ -749,7 +749,7 @@

    Module contentsExample

    >>> linkage.set_input_velocity(crank, omega=10.0)  # 10 rad/s
     >>> for pos, vel, acc in linkage.step_with_derivatives():
    -...     print(f"Position: {pos}, Velocity: {vel}")
    +...     print(f"Position: {pos}, Velocity: {vel}")
     
    @@ -848,7 +848,7 @@

    Module contentsExample

    >>> linkage.set_input_velocity(crank, omega=10.0)
     >>> for pos, vel, acc in linkage.step_with_derivatives():
    -...     print(f"Crank velocity: {vel[2]}")
    +...     print(f"Crank velocity: {vel[2]}")
     
    diff --git a/docs/api/pylinkage.solver.html b/docs/api/pylinkage.solver.html index 2ac4ff2..ca2bf4a 100644 --- a/docs/api/pylinkage.solver.html +++ b/docs/api/pylinkage.solver.html @@ -6,14 +6,14 @@ - pylinkage.solver package — pylinkage 1.2.2 documentation + pylinkage.solver package — pylinkage 1.3.0 documentation - + diff --git a/docs/api/pylinkage.symbolic.html b/docs/api/pylinkage.symbolic.html index 1409d36..ecd9262 100644 --- a/docs/api/pylinkage.symbolic.html +++ b/docs/api/pylinkage.symbolic.html @@ -6,14 +6,14 @@ - pylinkage.symbolic package — pylinkage 1.2.2 documentation + pylinkage.symbolic package — pylinkage 1.3.0 documentation - + @@ -708,13 +708,13 @@

    SubmodulesExample

    >>> def objective(trajectories):
    -...     x, y = trajectories["C"]
    +...     x, y = trajectories["C"]
     ...     return (y - 2)**2  # Minimize deviation from y=2
     ...
     >>> optimizer = SymbolicOptimizer(linkage, objective)
     >>> result = optimizer.optimize(
    -...     initial_params={"r_AB": 1.0, "r_BC": 3.0, "r_CD": 3.0},
    -...     bounds={"r_AB": (0.5, 2), "r_BC": (1, 5), "r_CD": (1, 5)},
    +...     initial_params={"r_AB": 1.0, "r_BC": 3.0, "r_CD": 3.0},
    +...     bounds={"r_AB": (0.5, 2), "r_BC": (1, 5), "r_CD": (1, 5)},
     ... )
     
    @@ -863,9 +863,9 @@

    SubmodulesExample

    -
    >>> buildable, msg = check_buildability(linkage, {"r0": 1, "r1": 10})
    +
    >>> buildable, msg = check_buildability(linkage, {"r0": 1, "r1": 10})
     >>> if not buildable:
    -...     print(f"Linkage is unbuildable: {msg}")
    +...     print(f"Linkage is unbuildable: {msg}")
     
    @@ -910,7 +910,7 @@

    SubmodulesExample

    >>> funcs = create_trajectory_functions(linkage)
    ->>> x_func, y_func, params = funcs["C"]
    +>>> x_func, y_func, params = funcs["C"]
     >>> x_vals = x_func(theta_array, *[param_values[str(p)] for p in params])
     
    @@ -924,8 +924,12 @@

    Submodulessqrt(R) of the +parametrization becomes a symbol r with the constraint +r^2 = R, so the system is polynomial; a Groebner basis then +eliminates c, s and every r. The curve found is the full algebraic +curve: both signs of every root, hence both assembly branches of the +joint, lie on it.

    Parameters:
    +
    +

    Note

    +

    The joint at the end of the first dyad has a single square root +in its parametrization and its curve comes out in a fraction of a +second. A joint built on that one has a root inside a root, and +the Groebner basis computation may then run for minutes.

    +

    Example

    -
    >>> theta = sp.Symbol('theta')
    +
     

    For optimization:

    @@ -1018,19 +1031,19 @@

    Module contents# Define objective function symbolically def objective(trajectories): - x, y = trajectories["C"] + x, y = trajectories["C"] # Minimize deviation from target y=2 return (y - 2)**2 optimizer = SymbolicOptimizer(linkage, objective) result = optimizer.optimize( - initial_params={"L1": 1.0, "L2": 3.0, "L3": 3.0}, - bounds={"L1": (0.5, 2), "L2": (1, 5), "L3": (1, 5)}, + initial_params={"L1": 1.0, "L2": 3.0, "L3": 3.0}, + bounds={"L1": (0.5, 2), "L2": (1, 5), "L3": (1, 5)}, ) if result.success: - print(f"Optimal parameters: {result.params}") - print(f"Objective value: {result.objective_value}") + print(f"Optimal parameters: {result.params}") + print(f"Objective value: {result.objective_value}")

    @@ -1410,13 +1423,13 @@

    Module contentsExample

    >>> def objective(trajectories):
    -...     x, y = trajectories["C"]
    +...     x, y = trajectories["C"]
     ...     return (y - 2)**2  # Minimize deviation from y=2
     ...
     >>> optimizer = SymbolicOptimizer(linkage, objective)
     >>> result = optimizer.optimize(
    -...     initial_params={"r_AB": 1.0, "r_BC": 3.0, "r_CD": 3.0},
    -...     bounds={"r_AB": (0.5, 2), "r_BC": (1, 5), "r_CD": (1, 5)},
    +...     initial_params={"r_AB": 1.0, "r_BC": 3.0, "r_CD": 3.0},
    +...     bounds={"r_AB": (0.5, 2), "r_BC": (1, 5), "r_CD": (1, 5)},
     ... )
     
    @@ -1504,9 +1517,9 @@

    Module contentsExample

    -
    >>> buildable, msg = check_buildability(linkage, {"r0": 1, "r1": 10})
    +
    >>> buildable, msg = check_buildability(linkage, {"r0": 1, "r1": 10})
     >>> if not buildable:
    -...     print(f"Linkage is unbuildable: {msg}")
    +...     print(f"Linkage is unbuildable: {msg}")
     

    @@ -1551,7 +1564,7 @@

    Module contentsExample

    >>> funcs = create_trajectory_functions(linkage)
    ->>> x_func, y_func, params = funcs["C"]
    +>>> x_func, y_func, params = funcs["C"]
     >>> x_vals = x_func(theta_array, *[param_values[str(p)] for p in params])
     
    @@ -1565,8 +1578,12 @@

    Module contentssqrt(R) of the +parametrization becomes a symbol r with the constraint +r^2 = R, so the system is polynomial; a Groebner basis then +eliminates c, s and every r. The curve found is the full algebraic +curve: both signs of every root, hence both assembly branches of the +joint, lie on it.

    Parameters:
    +
    +

    Note

    +

    The joint at the end of the first dyad has a single square root +in its parametrization and its curve comes out in a fraction of a +second. A joint built on that one has a root inside a root, and +the Groebner basis computation may then run for minutes.

    +

    Example

    -
    @@ -1154,7 +1154,7 @@

    Submodulessolutions = synthesize(points, max_links=6) for sol in solutions[:3]: - print(f"{sol.topology_entry.name}: score={sol.metrics.overall_score:.3f}") + print(f"{sol.topology_entry.name}: score={sol.metrics.overall_score:.3f}") sol.linkage.show()

    @@ -1217,7 +1217,7 @@

    SubmodulesExample

    >>> solutions = synthesize([(0,1), (1,2), (2,1.5), (3,0), (4,1)])
    ->>> print(f"Best: {solutions[0].topology_entry.name}")
    +>>> print(f"Best: {solutions[0].topology_entry.name}")
     
    @@ -1311,7 +1311,7 @@

    SubmodulesExample

    @@ -2139,7 +2139,7 @@

    Quick Startif result.solutions: linkage = result.solutions[0] - print(f"Crank length: {linkage.joints[2].r:.3f}") + print(f"Crank length: {linkage.joints[2].r:.3f}")

    Motion Generation:

    @@ -2162,7 +2162,7 @@

    Working with Results# Check if solutions were found if result.solutions: - print(f"Found {len(result.solutions)} solutions") + print(f"Found {len(result.solutions)} solutions") # Iterate over solutions for linkage in result.solutions: @@ -2170,11 +2170,11 @@

    Working with Results# Access warnings for warning in result.warnings: - print(f"Warning: {warning}") + print(f"Warning: {warning}") # Access raw mathematical solutions for sol in result.raw_solutions: - print(f"Crank: {sol.crank_length:.3f}") + print(f"Crank: {sol.crank_length:.3f}")

    @@ -3178,7 +3178,7 @@

    Synthesis Theory Overview
    >>> pairs = [(0, 0), (math.pi/6, math.pi/4), (math.pi/3, math.pi/2)]
     >>> result = function_generation(pairs)
     >>> for linkage in result.solutions:
    -...     print(f"Crank: {linkage.joints[2].r:.3f}")
    +...     print(f"Crank: {linkage.joints[2].r:.3f}")
     

    @@ -3326,7 +3326,7 @@

    Synthesis Theory Overview... Pose(2, 0.5, 1.0), ... ] >>> result = motion_generation(poses) ->>> print(f"Found {len(result.solutions)} solutions") +>>> print(f"Found {len(result.solutions)} solutions")

    @@ -3382,7 +3382,7 @@

    Synthesis Theory OverviewExample

    >>> solutions = synthesize([(0,1), (1,2), (2,1.5), (3,0), (4,1)])
    ->>> print(f"Best: {solutions[0].topology_entry.name}")
    +>>> print(f"Best: {solutions[0].topology_entry.name}")
     
    @@ -3459,7 +3459,7 @@

    Synthesis Theory OverviewExample

    >>> points = [(0, 1), (1, 2), (2, 1.5), (3, 0)]
     >>> result = path_generation(points)
    ->>> print(f"Found {len(result.solutions)} solutions")
    +>>> print(f"Found {len(result.solutions)} solutions")
     >>> for linkage in result.solutions:
     ...     linkage.show()
     
    @@ -3555,8 +3555,8 @@

    Synthesis Theory OverviewExample

    >>> points = [(0, 0), (1, 2), (2, 3), (3, 2), (4, 0)]
    ->>> result = six_bar_path_generation(points, topology="watt")
    ->>> print(f"Found {len(result.solutions)} solutions")
    +>>> result = six_bar_path_generation(points, topology="watt")
    +>>> print(f"Found {len(result.solutions)} solutions")
     
    diff --git a/docs/api/pylinkage.topology.data.html b/docs/api/pylinkage.topology.data.html index 2223870..8cb4d03 100644 --- a/docs/api/pylinkage.topology.data.html +++ b/docs/api/pylinkage.topology.data.html @@ -6,14 +6,14 @@ - pylinkage.topology.data package — pylinkage 1.2.2 documentation + pylinkage.topology.data package — pylinkage 1.3.0 documentation - + diff --git a/docs/api/pylinkage.topology.html b/docs/api/pylinkage.topology.html index 7ee6bd2..61e95c9 100644 --- a/docs/api/pylinkage.topology.html +++ b/docs/api/pylinkage.topology.html @@ -6,14 +6,14 @@ - pylinkage.topology package — pylinkage 1.2.2 documentation + pylinkage.topology package — pylinkage 1.3.0 documentation - + @@ -222,13 +222,13 @@

    Submodules
    >>> from pylinkage.hypergraph import HypergraphLinkage, Node, Edge, NodeRole
     >>> # Four-bar linkage: 4 nodes, 3 driven edges + ground = 4 links, 4 joints
     >>> hg = HypergraphLinkage()
    ->>> hg.add_node(Node("A", role=NodeRole.GROUND))
    ->>> hg.add_node(Node("B", role=NodeRole.DRIVER))
    ->>> hg.add_node(Node("C", role=NodeRole.DRIVEN))
    ->>> hg.add_node(Node("D", role=NodeRole.GROUND))
    ->>> hg.add_edge(Edge("AB", "A", "B"))
    ->>> hg.add_edge(Edge("BC", "B", "C"))
    ->>> hg.add_edge(Edge("CD", "C", "D"))
    +>>> hg.add_node(Node("A", role=NodeRole.GROUND))
    +>>> hg.add_node(Node("B", role=NodeRole.DRIVER))
    +>>> hg.add_node(Node("C", role=NodeRole.DRIVEN))
    +>>> hg.add_node(Node("D", role=NodeRole.GROUND))
    +>>> hg.add_edge(Edge("AB", "A", "B"))
    +>>> hg.add_edge(Edge("BC", "B", "C"))
    +>>> hg.add_edge(Edge("CD", "C", "D"))
     >>> compute_dof(hg)
     1
     
    @@ -884,13 +884,13 @@

    Module contents
    >>> from pylinkage.hypergraph import HypergraphLinkage, Node, Edge, NodeRole
     >>> # Four-bar linkage: 4 nodes, 3 driven edges + ground = 4 links, 4 joints
     >>> hg = HypergraphLinkage()
    ->>> hg.add_node(Node("A", role=NodeRole.GROUND))
    ->>> hg.add_node(Node("B", role=NodeRole.DRIVER))
    ->>> hg.add_node(Node("C", role=NodeRole.DRIVEN))
    ->>> hg.add_node(Node("D", role=NodeRole.GROUND))
    ->>> hg.add_edge(Edge("AB", "A", "B"))
    ->>> hg.add_edge(Edge("BC", "B", "C"))
    ->>> hg.add_edge(Edge("CD", "C", "D"))
    +>>> hg.add_node(Node("A", role=NodeRole.GROUND))
    +>>> hg.add_node(Node("B", role=NodeRole.DRIVER))
    +>>> hg.add_node(Node("C", role=NodeRole.DRIVEN))
    +>>> hg.add_node(Node("D", role=NodeRole.GROUND))
    +>>> hg.add_edge(Edge("AB", "A", "B"))
    +>>> hg.add_edge(Edge("BC", "B", "C"))
    +>>> hg.add_edge(Edge("CD", "C", "D"))
     >>> compute_dof(hg)
     1
     
    diff --git a/docs/api/pylinkage.visualizer.html b/docs/api/pylinkage.visualizer.html index d5d834f..32cd91f 100644 --- a/docs/api/pylinkage.visualizer.html +++ b/docs/api/pylinkage.visualizer.html @@ -6,14 +6,14 @@ - pylinkage.visualizer package — pylinkage 1.2.2 documentation + pylinkage.visualizer package — pylinkage 1.3.0 documentation - + @@ -370,7 +370,7 @@

    Submodules>>> drawing = plot_linkage_svg_with_velocity( ... linkage, positions[0], velocities[0] ... ) ->>> drawing.save_svg("linkage_with_velocity.svg") +>>> drawing.save_svg("linkage_with_velocity.svg")

    @@ -435,7 +435,7 @@

    SubmodulesExample

    >>> from pylinkage.visualizer import plot_linkage_dxf, save_linkage_dxf
     >>> doc = plot_linkage_dxf(linkage)
    ->>> doc.saveas("linkage.dxf")
    +>>> doc.saveas("linkage.dxf")
     
    @@ -456,7 +456,7 @@

    SubmodulesExample

    >>> from pylinkage.visualizer import save_linkage_dxf
    ->>> save_linkage_dxf(linkage, "output.dxf")
    +>>> save_linkage_dxf(linkage, "output.dxf")
     
    @@ -491,7 +491,7 @@

    SubmodulesExample

    >>> linkage.set_input_velocity(crank, omega=10.0)
    ->>> fig = animate_kinematics(linkage, show_velocity=True, save_path="vel.gif")
    +>>> fig = animate_kinematics(linkage, show_velocity=True, save_path="vel.gif")
     
    @@ -981,7 +981,7 @@

    SubmodulesExample

    >>> from pylinkage.visualizer import build_linkage_3d, save_linkage_step
     >>> model = build_linkage_3d(linkage)
    ->>> save_linkage_step(linkage, "linkage.step")
    +>>> save_linkage_step(linkage, "linkage.step")
     
    @@ -1002,7 +1002,7 @@

    SubmodulesExample

    >>> from pylinkage.visualizer import save_linkage_step
    ->>> save_linkage_step(linkage, "output.step")
    +>>> save_linkage_step(linkage, "output.step")
     
    diff --git a/docs/benchmarks.html b/docs/benchmarks.html index 5e7fa66..8850276 100644 --- a/docs/benchmarks.html +++ b/docs/benchmarks.html @@ -6,14 +6,14 @@ - Benchmarks — pylinkage 1.2.2 documentation + Benchmarks — pylinkage 1.3.0 documentation - + diff --git a/docs/changeloglink.html b/docs/changeloglink.html index 8d233c2..62f7a5a 100644 --- a/docs/changeloglink.html +++ b/docs/changeloglink.html @@ -6,14 +6,14 @@ - Changelog — pylinkage 1.2.2 documentation + Changelog — pylinkage 1.3.0 documentation - + @@ -47,56 +47,62 @@
  • Readme
  • Changelog
  • @@ -243,14 +243,14 @@

    Alternative: Links-First Builder# Define links by their lengths, then connect with joints mechanism = ( - MechanismBuilder("four-bar") - .add_ground_link("ground", ports={"O1": (0, 0), "O2": (4, 0)}) - .add_driver_link("crank", length=1.0, motor_port="O1", omega=0.1) - .add_link("coupler", length=3.5) - .add_link("rocker", length=3.0) - .connect("crank.tip", "coupler.0") - .connect("coupler.1", "rocker.0") - .connect("rocker.1", "ground.O2") + MechanismBuilder("four-bar") + .add_ground_link("ground", ports={"O1": (0, 0), "O2": (4, 0)}) + .add_driver_link("crank", length=1.0, motor_port="O1", omega=0.1) + .add_link("coupler", length=3.5) + .add_link("rocker", length=3.0) + .connect("crank.tip", "coupler.0") + .connect("coupler.1", "rocker.0") + .connect("rocker.1", "ground.O2") .build() ) @@ -287,7 +287,7 @@

    Symbolic Analysisimport numpy as np linkage = fourbar_symbolic(ground_length=4, crank_length=1, coupler_length=3, rocker_length=3) -params = {"L1": 1.0, "L2": 3.0, "L3": 3.0} +params = {"L1": 1.0, "L2": 3.0, "L3": 3.0} trajectories = compute_trajectory_numeric(linkage, params, np.linspace(0, 2*np.pi, 100))

    @@ -455,7 +455,8 @@

    Stability

    Requirements

      -
    • Python >= 3.10

    • +
    • Python >= 3.11 (tested up to 3.15; STEP export via the cad extra is not yet +available on 3.15)

    • Core: numpy, tqdm

    • Optional (via extras): numba, scipy, sympy, matplotlib, plotly, drawsvg

    diff --git a/docs/search.html b/docs/search.html index 902ca9c..bc2e568 100644 --- a/docs/search.html +++ b/docs/search.html @@ -5,7 +5,7 @@ - Search — pylinkage 1.2.2 documentation + Search — pylinkage 1.3.0 documentation @@ -13,7 +13,7 @@ - + diff --git a/docs/searchindex.js b/docs/searchindex.js index 1d36f93..137a47c 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles":{"1. Correction":[[24,"correction"]],"2. Warning":[[24,"warning"]],"2D Pareto Front":[[37,"d-pareto-front"]],"3. Temporary Ban":[[24,"temporary-ban"]],"4. Permanent Ban":[[24,"permanent-ban"]],"API Reference":[[38,"api-reference"]],"Added":[[23,"added"],[23,"id5"],[23,"id8"],[23,"id13"],[23,"id15"],[23,"id20"],[23,"id26"]],"Added in 0.0.1":[[23,"added-in-0-0-1"]],"Added in 0.2.0":[[23,"added-in-0-2-0"]],"Added in 0.2.1":[[23,"added-in-0-2-1"]],"Added in 0.2.2":[[23,"added-in-0-2-2"]],"Added in 0.3.0":[[23,"added-in-0-3-0"]],"Added in 0.4.0":[[23,"added-in-0-4-0"]],"Added in 0.4.1":[[23,"added-in-0-4-1"]],"Added in 0.5.0":[[23,"added-in-0-5-0"]],"Added in 0.5.1":[[23,"added-in-0-5-1"]],"Added in 0.5.2":[[23,"added-in-0-5-2"]],"Added in 0.5.3":[[23,"added-in-0-5-3"]],"Added in 0.6.0":[[23,"added-in-0-6-0"]],"Added in 0.7.0":[[23,"added-in-0-7-0"]],"Advanced Optimization Techniques":[[30,null]],"Advanced Topics":[[35,"advanced-topics"]],"Advanced Usage":[[37,"advanced-usage"]],"Advanced: Burmester Curve Analysis":[[40,"advanced-burmester-curve-analysis"]],"Algorithm Selection":[[37,"algorithm-selection"]],"Alternative: Links-First Builder":[[29,"alternative-links-first-builder"]],"Analysis Applications":[[34,"analysis-applications"]],"Analyzing Specific Output Joints":[[38,"analyzing-specific-output-joints"]],"Animated GIF Output":[[41,"animated-gif-output"]],"Animating a Solution":[[40,"animating-a-solution"]],"Animation with Slider":[[41,"animation-with-slider"]],"Architecture":[[29,"architecture"]],"Assur Group Theory":[[34,"assur-group-theory"]],"Assur Signatures":[[34,"assur-signatures"]],"AssurMechanism":[[34,"assurmechanism"]],"Async Optimization":[[30,"async-optimization"]],"Attaching Dimensions":[[34,"attaching-dimensions"]],"Attribution":[[24,"attribution"]],"Available Motion Laws":[[31,"available-motion-laws"]],"Basic Example":[[31,"basic-example"],[31,"id1"],[37,"basic-example"]],"Basic Fitness Function":[[30,"basic-fitness-function"]],"Basic Interactive Plot":[[41,"basic-interactive-plot"]],"Basic Path Generation":[[40,"basic-path-generation"]],"Basic SVG Output":[[41,"basic-svg-output"]],"Basic Setup":[[38,"basic-setup"]],"Basic Usage":[[38,"basic-usage"],[38,"id1"]],"Basic Visualization":[[41,"basic-visualization"]],"Benchmarks":[[22,null]],"Best Compromise":[[37,"best-compromise"]],"Best Practices":[[32,"best-practices"]],"Building Hierarchical Linkages":[[34,"building-hierarchical-linkages"]],"CAD Export":[[41,"cad-export"]],"CAD Export Workflow":[[41,"cad-export-workflow"]],"Cam Profiles":[[31,"cam-profiles"]],"Cam-Follower Mechanisms":[[31,null]],"Changed":[[23,"changed"],[23,"id9"],[23,"id16"],[23,"id23"],[23,"id28"]],"Changed in 0.2.0":[[23,"changed-in-0-2-0"]],"Changed in 0.2.1":[[23,"changed-in-0-2-1"]],"Changed in 0.3.0":[[23,"changed-in-0-3-0"]],"Changed in 0.4.0":[[23,"changed-in-0-4-0"]],"Changed in 0.4.1":[[23,"changed-in-0-4-1"]],"Changed in 0.5.0":[[23,"changed-in-0-5-0"]],"Changed in 0.5.1":[[23,"changed-in-0-5-1"]],"Changed in 0.5.2":[[23,"changed-in-0-5-2"]],"Changed in 0.5.3":[[23,"changed-in-0-5-3"]],"Changed in 0.6.0":[[23,"changed-in-0-6-0"]],"Changed in 0.7.0":[[23,"changed-in-0-7-0"]],"Changelog":[[23,null]],"Choosing the Right Backend":[[41,"choosing-the-right-backend"]],"Combined Path and Velocity Optimization":[[36,"combined-path-and-velocity-optimization"]],"Combining with Transmission Analysis":[[37,"combining-with-transmission-analysis"]],"Comparison: Single vs Multi-Objective":[[37,"comparison-single-vs-multi-objective"]],"Complete Example":[[33,"complete-example"]],"Complete Slider Implementation":[[32,"complete-slider-implementation"]],"Complete Workflow Example":[[39,"complete-workflow-example"]],"Component Types":[[33,"component-types"]],"Computing Sensitivity":[[39,"computing-sensitivity"]],"Computing Trajectories":[[39,"computing-trajectories"]],"Connecting to Downstream Linkages":[[31,"connecting-to-downstream-linkages"]],"Constraint Preservation":[[30,"constraint-preservation"]],"Contributing":[[29,"contributing"]],"Contributor Covenant Code of Conduct":[[24,null]],"Converting Back to Numeric":[[39,"converting-back-to-numeric"]],"Converting Graph to Mechanism":[[34,"converting-graph-to-mechanism"]],"Converting to a Mechanism":[[34,"converting-to-a-mechanism"]],"Core Concepts":[[33,"core-concepts"]],"Core Features":[[35,"core-features"]],"Creating Linkages from Dimensions":[[40,"creating-linkages-from-dimensions"]],"Creating Linkages from Link Lengths":[[18,"creating-linkages-from-link-lengths"]],"Creating Symbolic Linkages":[[39,"creating-symbolic-linkages"]],"Creating a Hypergraph Linkage":[[34,"creating-a-hypergraph-linkage"]],"Currently deprecated":[[25,"currently-deprecated"]],"Custom Components":[[32,null]],"Customizing DXF Output":[[41,"customizing-dxf-output"]],"Customizing Plotly Appearance":[[41,"customizing-plotly-appearance"]],"Customizing STEP Dimensions":[[41,"customizing-step-dimensions"]],"Customizing SVG Style":[[41,"customizing-svg-style"]],"DXF Export (2D CAD)":[[41,"dxf-export-2d-cad"]],"Decomposing a Linkage":[[34,"decomposing-a-linkage"]],"Define and Visualize a Four-Bar Linkage":[[29,"define-and-visualize-a-four-bar-linkage"]],"Defining a Fitness Function":[[30,"defining-a-fitness-function"]],"Deprecated":[[23,"deprecated"],[23,"id22"]],"Deprecated in 0.5.3":[[23,"deprecated-in-0-5-3"]],"Deprecated in 0.6.0":[[23,"deprecated-in-0-6-0"]],"Deprecated in 0.7.0":[[23,"deprecated-in-0-7-0"]],"Deprecations":[[25,null]],"Embedding in Web Pages":[[41,"embedding-in-web-pages"]],"Enforcement":[[24,"enforcement"]],"Enforcement Guidelines":[[24,"enforcement-guidelines"]],"Enforcement Responsibilities":[[24,"enforcement-responsibilities"]],"Environment":[[22,"environment"]],"Example Complete Workflow":[[38,"example-complete-workflow"]],"Example Objective Functions":[[39,"example-objective-functions"]],"Example Scripts":[[26,null]],"Example: Cam-Driven Four-Bar":[[31,"example-cam-driven-four-bar"]],"Example: Complete Visualization Workflow":[[41,"example-complete-visualization-workflow"]],"Example: Minimize Peak Velocity":[[36,"example-minimize-peak-velocity"]],"Example: Optimizing for Path Shape":[[30,"example-optimizing-for-path-shape"]],"Example: Oscillating Joint":[[32,"example-oscillating-joint"]],"Example: Slider Joint":[[32,"example-slider-joint"]],"Example: Three Precision Points":[[40,"example-three-precision-points"]],"Example: Uniform Velocity Profile":[[36,"example-uniform-velocity-profile"]],"Example: Velocity Direction Constraint":[[36,"example-velocity-direction-constraint"]],"Exporting Multiple Frames":[[41,"exporting-multiple-frames"]],"Exporting to DataFrame":[[38,"exporting-to-dataframe"]],"Fast Pre-Compiled Functions":[[39,"fast-pre-compiled-functions"]],"Filtering Solutions":[[37,"filtering-solutions"]],"Fixed":[[23,"fixed"],[23,"id3"],[23,"id6"],[23,"id10"],[23,"id12"],[23,"id18"],[23,"id21"],[23,"id27"]],"Fixed in 0.2.1":[[23,"fixed-in-0-2-1"]],"Fixed in 0.2.2":[[23,"fixed-in-0-2-2"]],"Fixed in 0.3.0":[[23,"fixed-in-0-3-0"]],"Fixed in 0.4.0":[[23,"fixed-in-0-4-0"]],"Fixed in 0.5.0":[[23,"fixed-in-0-5-0"]],"Fixed in 0.5.3":[[23,"fixed-in-0-5-3"]],"Fixed in 0.6.0":[[23,"fixed-in-0-6-0"]],"Fixed in 0.7.0":[[23,"fixed-in-0-7-0"]],"Four-Pose and Five-Pose Synthesis":[[40,"four-pose-and-five-pose-synthesis"]],"Four-bar Linkage":[[26,"four-bar-linkage"]],"Function Generation":[[40,"function-generation"]],"FunctionProfile":[[31,"functionprofile"]],"Generating Bounds":[[30,"generating-bounds"]],"Getting Started":[[33,null],[35,"getting-started"]],"Graph-Based Linkage Representation":[[34,null]],"Grashof Analysis":[[40,"grashof-analysis"]],"Grid Search Optimization":[[30,"grid-search-optimization"]],"Handling Errors":[[33,"handling-errors"]],"How deprecation works here":[[25,"how-deprecation-works-here"]],"Hypergraph Representation":[[34,"hypergraph-representation"]],"Hypervolume Indicator":[[37,"hypervolume-indicator"]],"Illustrated Example: Effect of Link Lengths":[[39,"illustrated-example-effect-of-link-lengths"]],"Including Transmission Angle":[[38,"including-transmission-angle"]],"Indices and tables":[[28,"indices-and-tables"]],"Installation":[[29,"installation"],[33,"installation"],[37,"installation"]],"Introduction":[[28,null],[31,"introduction"]],"Inverted Stroke Engine":[[26,"inverted-stroke-engine"]],"Isomorphism Detection":[[34,"isomorphism-detection"]],"Kinematics-Based Optimization":[[36,null]],"Linkage Synthesis":[[40,null]],"Matplotlib Backend":[[41,"matplotlib-backend"]],"Matplotlib Visualization":[[36,"matplotlib-visualization"]],"Method 1: fourbar_symbolic (Recommended)":[[39,"method-1-fourbar-symbolic-recommended"]],"Method 2: Building from SymJoint Classes":[[39,"method-2-building-from-symjoint-classes"]],"Migrating":[[25,"migrating"]],"Mobility Analysis":[[34,"mobility-analysis"]],"Module contents":[[1,"module-contents"],[2,"module-contents"],[3,"module-contents"],[4,"module-contents"],[5,"module-contents"],[6,"module-contents"],[7,"module-contents"],[8,"module-contents"],[9,"module-contents"],[10,"module-contents"],[11,"module-contents"],[12,"module-contents"],[13,"module-contents"],[14,"module-contents"],[15,"module-contents"],[16,"module-contents"],[17,"module-contents"],[18,"module-contents"],[19,"module-contents"],[20,"module-contents"],[21,"module-contents"]],"Motion Generation":[[40,"motion-generation"]],"Motion Laws":[[31,"motion-laws"]],"Multi-Objective Optimization":[[30,"multi-objective-optimization"],[37,null]],"NSGA-II (Default)":[[37,"nsga-ii-default"]],"NSGA-III":[[37,"nsga-iii"]],"Next Steps":[[30,"next-steps"],[31,"next-steps"],[32,"next-steps"],[33,"next-steps"],[34,"next-steps"],[36,"next-steps"],[37,"next-steps"],[38,"next-steps"],[39,"next-steps"],[40,"next-steps"],[41,"next-steps"]],"Numeric Evaluation":[[39,"numeric-evaluation"]],"Optimization":[[31,"optimization"]],"Optimize with PSO":[[29,"optimize-with-pso"]],"Optimizing Initial Positions":[[30,"optimizing-initial-positions"]],"Optimizing for Velocity Characteristics":[[36,"optimizing-for-velocity-characteristics"]],"Oscillating Cam Follower":[[31,"oscillating-cam-follower"]],"Our Pledge":[[24,"our-pledge"]],"Our Standards":[[24,"our-standards"]],"Overview":[[34,"overview"],[34,"id1"],[36,"overview"],[38,"overview"],[39,"overview"],[40,"overview"]],"Overview of Optimization":[[30,"overview-of-optimization"]],"PSO Visualization":[[41,"pso-visualization"]],"PSO throughput":[[22,"pso-throughput"]],"Packages":[[28,null]],"Pareto Dominance":[[37,"pareto-dominance"]],"Particle Swarm Optimization Parameters":[[30,"particle-swarm-optimization-parameters"]],"Path Generation":[[40,"path-generation"]],"Path Generation with Timing":[[40,"path-generation-with-timing"]],"Performance Characteristics":[[39,"id5"]],"Performance Comparison":[[39,"performance-comparison"]],"Performance Considerations":[[36,"performance-considerations"]],"Perturbation Size":[[38,"perturbation-size"]],"Pitch Radius":[[31,"pitch-radius"]],"Plotly Backend":[[41,"plotly-backend"]],"Plotly Interactive Visualization":[[36,"plotly-interactive-visualization"]],"PointArrayProfile":[[31,"pointarrayprofile"]],"Practical Guidelines":[[38,"practical-guidelines"]],"Pressure Angle":[[31,"pressure-angle"]],"Profile Analysis":[[31,"profile-analysis"]],"Pylinkage":[[29,null]],"Querying Joint Velocities":[[36,"querying-joint-velocities"]],"Quick Links":[[28,null]],"Quick Reference":[[35,"quick-reference"],[41,"quick-reference"]],"Quick Start":[[18,"quick-start"],[29,"quick-start"],[39,"quick-start"]],"Quick Start: Path Generation":[[40,"quick-start-path-generation"]],"Reading Back Numeric Values":[[39,"reading-back-numeric-values"]],"Related Projects":[[29,"related-projects"]],"Removed":[[23,"removed"],[23,"id17"],[23,"id24"]],"Removed in 0.4.0":[[23,"removed-in-0-4-0"]],"Removed in 0.6.0":[[23,"removed-in-0-6-0"]],"Removed in 0.7.0":[[23,"removed-in-0-7-0"]],"Reproducibility":[[37,"reproducibility"]],"Reproducing these numbers":[[22,"reproducing-these-numbers"]],"Requirements":[[29,"requirements"]],"Roller Follower":[[31,"roller-follower"]],"Running Kinematics Simulation":[[36,"running-kinematics-simulation"]],"STEP Export (3D CAD)":[[41,"step-export-3d-cad"]],"SVG Publication-Quality Output":[[36,"svg-publication-quality-output"]],"SVG for LaTeX":[[41,"svg-for-latex"]],"Sample Count":[[38,"sample-count"]],"Scope":[[24,"scope"]],"Selecting a Solution":[[37,"selecting-a-solution"]],"Selective Tolerance Analysis":[[38,"selective-tolerance-analysis"]],"Sensitivity & Tolerance Analysis":[[38,null]],"Sensitivity Analysis":[[38,"sensitivity-analysis"],[39,"sensitivity-analysis"]],"Sensitivity as Fitness Penalty":[[38,"sensitivity-as-fitness-penalty"]],"Serializing Linkage Graphs":[[34,"serializing-linkage-graphs"]],"Setting Up Angular Velocity":[[36,"setting-up-angular-velocity"]],"Showing Multiple Linkages":[[41,"showing-multiple-linkages"]],"Solver":[[22,"solver"]],"Stability":[[29,"stability"]],"Static Frame Visualization":[[41,"static-frame-visualization"]],"Step 1: Define the Class":[[32,"step-1-define-the-class"]],"Step 1: Import the building blocks":[[33,"step-1-import-the-building-blocks"]],"Step 2: Define the components":[[33,"step-2-define-the-components"]],"Step 2: Implement get_constraints":[[32,"step-2-implement-get-constraints"]],"Step 3: Create the linkage":[[33,"step-3-create-the-linkage"]],"Step 3: Implement set_constraints":[[32,"step-3-implement-set-constraints"]],"Step 4: Implement reload":[[32,"step-4-implement-reload"]],"Step 4: Simulate the motion":[[33,"step-4-simulate-the-motion"]],"Step 5: Visualize the linkage":[[33,"step-5-visualize-the-linkage"]],"Strider":[[26,"strider"]],"Submodules":[[1,"submodules"],[2,"submodules"],[3,"submodules"],[4,"submodules"],[5,"submodules"],[6,"submodules"],[7,"submodules"],[8,"submodules"],[9,"submodules"],[10,"submodules"],[11,"submodules"],[12,"submodules"],[13,"submodules"],[15,"submodules"],[16,"submodules"],[17,"submodules"],[18,"submodules"],[19,"submodules"],[21,"submodules"]],"Subpackages":[[1,"subpackages"],[12,"subpackages"],[19,"subpackages"]],"Symbolic Analysis":[[29,"symbolic-analysis"]],"Symbolic Components":[[39,"id2"]],"Symbolic Computation":[[39,null]],"Symbolic Optimization":[[39,"symbolic-optimization"]],"Synthesis":[[22,"synthesis"]],"Synthesis Theory Overview":[[18,"synthesis-theory-overview"]],"Synthesis vs Optimization":[[40,"synthesis-vs-optimization"]],"Ternary Links via Hyperedge":[[34,"ternary-links-via-hyperedge"]],"The Topology Catalog":[[34,"the-topology-catalog"]],"Theory":[[40,"theory"]],"Theory: Burmester Curves":[[40,"theory-burmester-curves"]],"Theory: Freudenstein\u2019s Equation":[[40,"theory-freudenstein-s-equation"]],"Three-Objective Example":[[37,"three-objective-example"]],"Three-Pose Synthesis":[[40,"three-pose-synthesis"]],"Tolerance Analysis":[[38,"tolerance-analysis"]],"Tolerance Analysis Example":[[39,"tolerance-analysis-example"]],"Tolerance-Based Constraints":[[38,"tolerance-based-constraints"]],"Translating Cam Follower":[[31,"translating-cam-follower"]],"Troubleshooting":[[30,"troubleshooting"],[37,"troubleshooting"]],"Tutorials":[[28,null],[29,"tutorials"],[35,null]],"Typical Workflow":[[38,"typical-workflow"]],"Understanding Constraint Names":[[38,"understanding-constraint-names"]],"Understanding SymbolicOptimizer":[[39,"understanding-symbolicoptimizer"]],"Understanding the Component Interface":[[32,"understanding-the-component-interface"]],"Understanding the Constraint System":[[33,"understanding-the-constraint-system"]],"Understanding the Pareto Front":[[37,"understanding-the-pareto-front"]],"Understanding the Results":[[38,"understanding-the-results"]],"Use in Optimization":[[38,"use-in-optimization"]],"Using the Custom Component":[[32,"using-the-custom-component"]],"Verifying Function Generation":[[40,"verifying-function-generation"]],"Verifying Results":[[39,"verifying-results"]],"Visualization Backends":[[41,null]],"Visualization with Kinematics":[[41,"visualization-with-kinematics"]],"Visualizing Optimization Progress":[[30,"visualizing-optimization-progress"]],"Visualizing Trade-Offs":[[37,"visualizing-trade-offs"]],"Visualizing Velocity Vectors":[[36,"visualizing-velocity-vectors"]],"Visualizing the Tolerance Cloud":[[38,"visualizing-the-tolerance-cloud"]],"Welcome to pylinkage\u2019s documentation!":[[28,null]],"What Else Can It Do?":[[29,"what-else-can-it-do"]],"What is not benchmarked here":[[22,"what-is-not-benchmarked-here"]],"What is public":[[25,"what-is-public"]],"When to Use Graph Representations":[[34,"when-to-use-graph-representations"]],"When to Use Multi-Objective Optimization":[[37,"when-to-use-multi-objective-optimization"]],"Where path_generation() spends its time":[[22,"where-path-generation-spends-its-time"]],"Which API should I use?":[[29,"which-api-should-i-use"]],"Why MobilityResult and StructuralAnalysis are going away":[[25,"why-mobilityresult-and-structuralanalysis-are-going-away"]],"Why n_orientation_samples is going away":[[25,"why-n-orientation-samples-is-going-away"]],"Why the Dyad names are going away":[[25,"why-the-dyad-names-are-going-away"]],"Why the dyads re-exports are going away":[[25,"why-the-dyads-re-exports-are-going-away"]],"Working with Loci Data":[[30,"working-with-loci-data"]],"Working with Results":[[18,"working-with-results"]],"Working with Synthesis Results":[[40,"working-with-synthesis-results"]],"Your First Linkage: Four-Bar Mechanism":[[33,"your-first-linkage-four-bar-mechanism"]],"[0.0.1] - 2021-06-12":[[23,"id41"]],"[0.2.0] - 2021-06-14":[[23,"id40"]],"[0.2.1] - 2021-06-16":[[23,"id39"]],"[0.2.2] - 2021-06-22":[[23,"id38"]],"[0.3.0] - 2021-07-05":[[23,"id37"]],"[0.4.0] - 2021-07-06":[[23,"id36"]],"[0.4.1] - 2021-07-11":[[23,"id35"]],"[0.5.0] - 2021-07-12":[[23,"id34"]],"[0.5.1] - 2021-07-14":[[23,"id33"]],"[0.5.2] - 2021-07-21":[[23,"id32"]],"[0.5.3] - 2023-06-23":[[23,"id31"]],"[0.6.0] - 2024-10-02":[[23,"id30"]],"[0.7.0] - 2025-12-13":[[23,"id29"]],"[0.8.0] - 2026-03-28":[[23,"id25"]],"[0.9.0] - 2026-04-14":[[23,"id19"]],"[1.0.0] - 2026-07-05":[[23,"id14"]],"[1.1.0] - 2026-08-12":[[23,"id11"]],"[1.1.1] - 2026-09-04":[[23,"id7"]],"[1.2.0] - 2026-09-12":[[23,"id4"]],"[1.2.1] - 2026-09-12":[[23,"id2"]],"[1.2.2] - 2026-09-18":[[23,"id1"]],"[Unreleased]":[[23,"unreleased"]],"drawsvg Backend":[[41,"drawsvg-backend"]],"examples":[[27,null]],"pylinkage":[[0,null]],"pylinkage package":[[1,null]],"pylinkage.actuators package":[[2,null]],"pylinkage.actuators.arc_crank module":[[2,"module-pylinkage.actuators.arc_crank"]],"pylinkage.actuators.crank module":[[2,"module-pylinkage.actuators.crank"]],"pylinkage.actuators.linear module":[[2,"module-pylinkage.actuators.linear"]],"pylinkage.assur package":[[3,null]],"pylinkage.assur.analysis module":[[3,"module-pylinkage.assur.analysis"]],"pylinkage.assur.assur_mechanism module":[[3,"module-pylinkage.assur.assur_mechanism"]],"pylinkage.assur.decomposition module":[[3,"module-pylinkage.assur.decomposition"]],"pylinkage.assur.graph module":[[3,"module-pylinkage.assur.graph"]],"pylinkage.assur.groups module":[[3,"module-pylinkage.assur.groups"]],"pylinkage.assur.hypergraph_conversion module":[[3,"module-pylinkage.assur.hypergraph_conversion"]],"pylinkage.assur.mechanism_conversion module":[[3,"module-pylinkage.assur.mechanism_conversion"]],"pylinkage.assur.serialization module":[[3,"module-pylinkage.assur.serialization"]],"pylinkage.assur.signature module":[[3,"module-pylinkage.assur.signature"]],"pylinkage.bridge package":[[4,null]],"pylinkage.bridge.solver_conversion module":[[4,"module-pylinkage.bridge.solver_conversion"]],"pylinkage.cam package":[[5,null]],"pylinkage.cam.motion_laws module":[[5,"module-pylinkage.cam.motion_laws"]],"pylinkage.cam.profiles module":[[5,"module-pylinkage.cam.profiles"]],"pylinkage.components package":[[6,null]],"pylinkage.components.ground module":[[6,"module-pylinkage.components.ground"]],"pylinkage.components.point_tracker module":[[6,"module-pylinkage.components.point_tracker"]],"pylinkage.dimensions module":[[1,"module-pylinkage.dimensions"]],"pylinkage.dyads package":[[7,null]],"pylinkage.dyads.factory module":[[7,"module-pylinkage.dyads.factory"]],"pylinkage.dyads.fixed module":[[7,"module-pylinkage.dyads.fixed"]],"pylinkage.dyads.oscillating_cam module":[[7,"module-pylinkage.dyads.oscillating_cam"]],"pylinkage.dyads.pp module":[[7,"module-pylinkage.dyads.pp"]],"pylinkage.dyads.rrp module":[[7,"module-pylinkage.dyads.rrp"]],"pylinkage.dyads.rrr module":[[7,"module-pylinkage.dyads.rrr"]],"pylinkage.dyads.translating_cam module":[[7,"module-pylinkage.dyads.translating_cam"]],"pylinkage.exceptions module":[[1,"module-pylinkage.exceptions"]],"pylinkage.geometry package":[[8,null]],"pylinkage.geometry.core module":[[8,"module-pylinkage.geometry.core"]],"pylinkage.geometry.secants module":[[8,"module-pylinkage.geometry.secants"]],"pylinkage.hypergraph package":[[9,null]],"pylinkage.hypergraph.core module":[[9,"module-pylinkage.hypergraph.core"]],"pylinkage.hypergraph.graph module":[[9,"module-pylinkage.hypergraph.graph"]],"pylinkage.hypergraph.hierarchy module":[[9,"module-pylinkage.hypergraph.hierarchy"]],"pylinkage.hypergraph.mechanism_conversion module":[[9,"module-pylinkage.hypergraph.mechanism_conversion"]],"pylinkage.hypergraph.serialization module":[[9,"module-pylinkage.hypergraph.serialization"]],"pylinkage.hypergraph.sim_conversion module":[[9,"module-pylinkage.hypergraph.sim_conversion"]],"pylinkage.linkage package":[[10,null]],"pylinkage.linkage.analysis module":[[10,"module-pylinkage.linkage.analysis"]],"pylinkage.linkage.sensitivity module":[[10,"module-pylinkage.linkage.sensitivity"]],"pylinkage.linkage.transmission module":[[10,"module-pylinkage.linkage.transmission"]],"pylinkage.mechanism package":[[11,null]],"pylinkage.mechanism.builder module":[[11,"module-pylinkage.mechanism.builder"]],"pylinkage.mechanism.factories module":[[11,"module-pylinkage.mechanism.factories"]],"pylinkage.mechanism.joint module":[[11,"module-pylinkage.mechanism.joint"]],"pylinkage.mechanism.link module":[[11,"module-pylinkage.mechanism.link"]],"pylinkage.mechanism.mechanism module":[[11,"module-pylinkage.mechanism.mechanism"]],"pylinkage.mechanism.serialization module":[[11,"module-pylinkage.mechanism.serialization"]],"pylinkage.optimization package":[[12,null]],"pylinkage.optimization.async_optimization module":[[12,"module-pylinkage.optimization.async_optimization"]],"pylinkage.optimization.co_optimization_types module":[[12,"module-pylinkage.optimization.co_optimization_types"]],"pylinkage.optimization.collections package":[[13,null]],"pylinkage.optimization.collections.agent module":[[13,"module-pylinkage.optimization.collections.agent"]],"pylinkage.optimization.collections.mutable_agent module":[[13,"module-pylinkage.optimization.collections.mutable_agent"]],"pylinkage.optimization.collections.pareto module":[[13,"module-pylinkage.optimization.collections.pareto"]],"pylinkage.optimization.grid_search module":[[12,"module-pylinkage.optimization.grid_search"]],"pylinkage.optimization.mixed_variable module":[[12,"module-pylinkage.optimization.mixed_variable"]],"pylinkage.optimization.multi_objective module":[[12,"module-pylinkage.optimization.multi_objective"]],"pylinkage.optimization.operators module":[[12,"module-pylinkage.optimization.operators"]],"pylinkage.optimization.particle_swarm module":[[12,"module-pylinkage.optimization.particle_swarm"]],"pylinkage.optimization.scipy_optimize module":[[12,"module-pylinkage.optimization.scipy_optimize"]],"pylinkage.optimization.topology_neighborhood module":[[12,"module-pylinkage.optimization.topology_neighborhood"]],"pylinkage.optimization.utils module":[[12,"module-pylinkage.optimization.utils"]],"pylinkage.optimization.warm_start module":[[12,"module-pylinkage.optimization.warm_start"]],"pylinkage.population package":[[14,null]],"pylinkage.simulation package":[[15,null]],"pylinkage.simulation.linkage module":[[15,"module-pylinkage.simulation.linkage"]],"pylinkage.solver package":[[16,null]],"pylinkage.solver.acceleration module":[[16,"module-pylinkage.solver.acceleration"]],"pylinkage.solver.groups module":[[16,"module-pylinkage.solver.groups"]],"pylinkage.solver.joints module":[[16,"module-pylinkage.solver.joints"]],"pylinkage.solver.simulation module":[[16,"module-pylinkage.solver.simulation"]],"pylinkage.solver.solve module":[[16,"module-pylinkage.solver.solve"]],"pylinkage.solver.types module":[[16,"module-pylinkage.solver.types"]],"pylinkage.solver.velocity module":[[16,"module-pylinkage.solver.velocity"]],"pylinkage.symbolic package":[[17,null]],"pylinkage.symbolic.conversion module":[[17,"module-pylinkage.symbolic.conversion"]],"pylinkage.symbolic.geometry module":[[17,"module-pylinkage.symbolic.geometry"]],"pylinkage.symbolic.joints module":[[17,"module-pylinkage.symbolic.joints"]],"pylinkage.symbolic.linkage module":[[17,"module-pylinkage.symbolic.linkage"]],"pylinkage.symbolic.optimization module":[[17,"module-pylinkage.symbolic.optimization"]],"pylinkage.symbolic.solver module":[[17,"module-pylinkage.symbolic.solver"]],"pylinkage.synthesis package":[[18,null]],"pylinkage.synthesis.burmester module":[[18,"module-pylinkage.synthesis.burmester"]],"pylinkage.synthesis.conversion module":[[18,"module-pylinkage.synthesis.conversion"]],"pylinkage.synthesis.core module":[[18,"module-pylinkage.synthesis.core"]],"pylinkage.synthesis.function_generation module":[[18,"module-pylinkage.synthesis.function_generation"]],"pylinkage.synthesis.generalized module":[[18,"module-pylinkage.synthesis.generalized"]],"pylinkage.synthesis.motion_generation module":[[18,"module-pylinkage.synthesis.motion_generation"]],"pylinkage.synthesis.multi_topology module":[[18,"module-pylinkage.synthesis.multi_topology"]],"pylinkage.synthesis.path_generation module":[[18,"module-pylinkage.synthesis.path_generation"]],"pylinkage.synthesis.ranking module":[[18,"module-pylinkage.synthesis.ranking"]],"pylinkage.synthesis.six_bar module":[[18,"module-pylinkage.synthesis.six_bar"]],"pylinkage.synthesis.topology_types module":[[18,"module-pylinkage.synthesis.topology_types"]],"pylinkage.synthesis.utils module":[[18,"module-pylinkage.synthesis.utils"]],"pylinkage.topology package":[[19,null]],"pylinkage.topology.analysis module":[[19,"module-pylinkage.topology.analysis"]],"pylinkage.topology.catalog module":[[19,"module-pylinkage.topology.catalog"]],"pylinkage.topology.data package":[[20,null]],"pylinkage.topology.enumeration module":[[19,"module-pylinkage.topology.enumeration"]],"pylinkage.topology.isomorphism module":[[19,"module-pylinkage.topology.isomorphism"]],"pylinkage.visualizer package":[[21,null]],"pylinkage.visualizer.animated module":[[21,"module-pylinkage.visualizer.animated"]],"pylinkage.visualizer.core module":[[21,"module-pylinkage.visualizer.core"]],"pylinkage.visualizer.drawsvg_viz module":[[21,"module-pylinkage.visualizer.drawsvg_viz"]],"pylinkage.visualizer.dxf_export module":[[21,"module-pylinkage.visualizer.dxf_export"]],"pylinkage.visualizer.kinematics module":[[21,"module-pylinkage.visualizer.kinematics"]],"pylinkage.visualizer.plotly_viz module":[[21,"module-pylinkage.visualizer.plotly_viz"]],"pylinkage.visualizer.pso_plots module":[[21,"module-pylinkage.visualizer.pso_plots"]],"pylinkage.visualizer.static module":[[21,"module-pylinkage.visualizer.static"]],"pylinkage.visualizer.step_export module":[[21,"module-pylinkage.visualizer.step_export"]],"pylinkage.visualizer.symbols module":[[21,"module-pylinkage.visualizer.symbols"]]},"docnames":["api/modules","api/pylinkage","api/pylinkage.actuators","api/pylinkage.assur","api/pylinkage.bridge","api/pylinkage.cam","api/pylinkage.components","api/pylinkage.dyads","api/pylinkage.geometry","api/pylinkage.hypergraph","api/pylinkage.linkage","api/pylinkage.mechanism","api/pylinkage.optimization","api/pylinkage.optimization.collections","api/pylinkage.population","api/pylinkage.simulation","api/pylinkage.solver","api/pylinkage.symbolic","api/pylinkage.synthesis","api/pylinkage.topology","api/pylinkage.topology.data","api/pylinkage.visualizer","benchmarks","changeloglink","code_of_conductlink","deprecations","examples/examples","examples/modules","index","readmelink","tutorials/advanced_optimization","tutorials/cam_follower","tutorials/custom_joints","tutorials/getting_started","tutorials/graph_representation","tutorials/index","tutorials/kinematics_optimization","tutorials/multi_objective","tutorials/sensitivity_analysis","tutorials/symbolic","tutorials/synthesis","tutorials/visualization"],"envversion":{"sphinx":66,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2},"filenames":["api/modules.rst","api/pylinkage.rst","api/pylinkage.actuators.rst","api/pylinkage.assur.rst","api/pylinkage.bridge.rst","api/pylinkage.cam.rst","api/pylinkage.components.rst","api/pylinkage.dyads.rst","api/pylinkage.geometry.rst","api/pylinkage.hypergraph.rst","api/pylinkage.linkage.rst","api/pylinkage.mechanism.rst","api/pylinkage.optimization.rst","api/pylinkage.optimization.collections.rst","api/pylinkage.population.rst","api/pylinkage.simulation.rst","api/pylinkage.solver.rst","api/pylinkage.symbolic.rst","api/pylinkage.synthesis.rst","api/pylinkage.topology.rst","api/pylinkage.topology.data.rst","api/pylinkage.visualizer.rst","benchmarks.md","changeloglink.rst","code_of_conductlink.rst","deprecations.md","examples/examples.rst","examples/modules.rst","index.rst","readmelink.rst","tutorials/advanced_optimization.rst","tutorials/cam_follower.rst","tutorials/custom_joints.rst","tutorials/getting_started.rst","tutorials/graph_representation.rst","tutorials/index.rst","tutorials/kinematics_optimization.rst","tutorials/multi_objective.rst","tutorials/sensitivity_analysis.rst","tutorials/symbolic.rst","tutorials/synthesis.rst","tutorials/visualization.rst"],"indexentries":{"acceleration (pylinkage.mechanism.joint.joint attribute)":[[11,"pylinkage.mechanism.joint.Joint.acceleration",false]],"acceleration() (pylinkage.cam.motion_laws.cycloidalmotionlaw method)":[[5,"pylinkage.cam.motion_laws.CycloidalMotionLaw.acceleration",false]],"acceleration() (pylinkage.cam.motion_laws.harmonicmotionlaw method)":[[5,"pylinkage.cam.motion_laws.HarmonicMotionLaw.acceleration",false]],"acceleration() (pylinkage.cam.motion_laws.modifiedtrapezoidalmotionlaw method)":[[5,"pylinkage.cam.motion_laws.ModifiedTrapezoidalMotionLaw.acceleration",false]],"acceleration() (pylinkage.cam.motion_laws.motionlaw method)":[[5,"pylinkage.cam.motion_laws.MotionLaw.acceleration",false]],"acceleration() (pylinkage.cam.motion_laws.polynomialmotionlaw method)":[[5,"pylinkage.cam.motion_laws.PolynomialMotionLaw.acceleration",false]],"accelerations (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.accelerations",false]],"acceptable_range (pylinkage.linkage.transmission.transmissionangleanalysis property)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.acceptable_range",false]],"add_arc_driver_link() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_arc_driver_link",false]],"add_connection() (pylinkage.hypergraph.hierarchy.hierarchicallinkage method)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage.add_connection",false]],"add_driver_link() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_driver_link",false]],"add_edge() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.add_edge",false]],"add_edge() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.add_edge",false]],"add_ground_link() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_ground_link",false]],"add_hyperedge() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.add_hyperedge",false]],"add_instance() (pylinkage.hypergraph.hierarchy.hierarchicallinkage method)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage.add_instance",false]],"add_link() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_link",false]],"add_node() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.add_node",false]],"add_node() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.add_node",false]],"add_point_tracker() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_point_tracker",false]],"add_quaternary_link() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_quaternary_link",false]],"add_slide_axis() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_slide_axis",false]],"add_ternary_link() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_ternary_link",false]],"agent (class in pylinkage.optimization.collections.agent)":[[13,"pylinkage.optimization.collections.agent.Agent",false]],"algorithm (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.algorithm",false]],"all_graphs() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.all_graphs",false]],"all_neighbors() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.all_neighbors",false]],"all_nodes_in_order() (pylinkage.assur.decomposition.decompositionresult method)":[[3,"pylinkage.assur.decomposition.DecompositionResult.all_nodes_in_order",false]],"alpha_values (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.alpha_values",false]],"amplitude (pylinkage.linkage.transmission.strokeanalysis property)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.amplitude",false]],"analyze() (pylinkage.assur.assur_mechanism.assurmechanism method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.analyze",false]],"analyze_sensitivity() (in module pylinkage.linkage.sensitivity)":[[10,"pylinkage.linkage.sensitivity.analyze_sensitivity",false]],"analyze_sensitivity() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.analyze_sensitivity",false]],"analyze_sensitivity() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.analyze_sensitivity",false]],"analyze_stroke() (in module pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.analyze_stroke",false]],"analyze_stroke() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.analyze_stroke",false]],"analyze_stroke() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.analyze_stroke",false]],"analyze_tolerance() (in module pylinkage.linkage.sensitivity)":[[10,"pylinkage.linkage.sensitivity.analyze_tolerance",false]],"analyze_tolerance() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.analyze_tolerance",false]],"analyze_tolerance() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.analyze_tolerance",false]],"analyze_transmission() (in module pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.analyze_transmission",false]],"analyze_transmission() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.analyze_transmission",false]],"analyze_transmission() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.analyze_transmission",false]],"anchor (pylinkage.actuators.arc_crank.arccrank attribute)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.anchor",false]],"anchor (pylinkage.actuators.crank.crank attribute)":[[2,"pylinkage.actuators.crank.Crank.anchor",false]],"anchor (pylinkage.actuators.linear.linearactuator attribute)":[[2,"pylinkage.actuators.linear.LinearActuator.anchor",false]],"anchor1 (pylinkage.components.point_tracker.pointtracker attribute)":[[6,"pylinkage.components.point_tracker.PointTracker.anchor1",false]],"anchor2 (pylinkage.components.point_tracker.pointtracker attribute)":[[6,"pylinkage.components.point_tracker.PointTracker.anchor2",false]],"anchor_nodes (pylinkage.assur.groups.assurgroup attribute)":[[3,"pylinkage.assur.groups.AssurGroup.anchor_nodes",false]],"anchors (pylinkage.actuators.arc_crank.arccrank property)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.anchors",false]],"anchors (pylinkage.actuators.crank.crank property)":[[2,"pylinkage.actuators.crank.Crank.anchors",false]],"anchors (pylinkage.actuators.linear.linearactuator property)":[[2,"pylinkage.actuators.linear.LinearActuator.anchors",false]],"anchors (pylinkage.components.point_tracker.pointtracker property)":[[6,"pylinkage.components.point_tracker.PointTracker.anchors",false]],"anchors (pylinkage.dyads.oscillating_cam.oscillatingcamfollower property)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.anchors",false]],"anchors (pylinkage.dyads.pp.ppdyad property)":[[7,"pylinkage.dyads.pp.PPDyad.anchors",false]],"anchors (pylinkage.dyads.rrp.rrpdyad property)":[[7,"pylinkage.dyads.rrp.RRPDyad.anchors",false]],"anchors (pylinkage.dyads.translating_cam.translatingcamfollower property)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.anchors",false]],"angle (pylinkage.actuators.arc_crank.arccrank property)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.angle",false]],"angle (pylinkage.actuators.linear.linearactuator attribute)":[[2,"pylinkage.actuators.linear.LinearActuator.angle",false]],"angle (pylinkage.components.point_tracker.pointtracker attribute)":[[6,"pylinkage.components.point_tracker.PointTracker.angle",false]],"angle (pylinkage.dyads.fixed.fixeddyad attribute)":[[7,"pylinkage.dyads.fixed.FixedDyad.angle",false]],"angle (pylinkage.mechanism.builder.pendingtracker attribute)":[[11,"pylinkage.mechanism.builder.PendingTracker.angle",false]],"angle (pylinkage.mechanism.joint.trackerjoint attribute)":[[11,"pylinkage.mechanism.joint.TrackerJoint.angle",false]],"angle_between_points() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.angle_between_points",false]],"angle_pairs (pylinkage.synthesis.core.synthesisproblem attribute)":[[18,"pylinkage.synthesis.core.SynthesisProblem.angle_pairs",false]],"angles (pylinkage.cam.profiles.pointarrayprofile property)":[[5,"pylinkage.cam.profiles.PointArrayProfile.angles",false]],"angles (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.angles",false]],"angular_displacement (pylinkage.dyads.oscillating_cam.oscillatingcamfollower property)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.angular_displacement",false]],"angular_velocity (pylinkage.actuators.arc_crank.arccrank attribute)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.angular_velocity",false]],"angular_velocity (pylinkage.actuators.crank.crank attribute)":[[2,"pylinkage.actuators.crank.Crank.angular_velocity",false]],"angular_velocity (pylinkage.dimensions.driverangle attribute)":[[1,"pylinkage.dimensions.DriverAngle.angular_velocity",false]],"angular_velocity (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.angular_velocity",false]],"angular_velocity (pylinkage.mechanism.link.arcdriverlink attribute)":[[11,"pylinkage.mechanism.link.ArcDriverLink.angular_velocity",false]],"angular_velocity (pylinkage.mechanism.link.driverlink attribute)":[[11,"pylinkage.mechanism.link.DriverLink.angular_velocity",false]],"animate_dashboard() (in module pylinkage.visualizer.pso_plots)":[[21,"pylinkage.visualizer.pso_plots.animate_dashboard",false]],"animate_kinematics() (in module pylinkage.visualizer.kinematics)":[[21,"pylinkage.visualizer.kinematics.animate_kinematics",false]],"animate_linkage_plotly() (in module pylinkage.visualizer.plotly_viz)":[[21,"pylinkage.visualizer.plotly_viz.animate_linkage_plotly",false]],"animate_parallel_coordinates() (in module pylinkage.visualizer.pso_plots)":[[21,"pylinkage.visualizer.pso_plots.animate_parallel_coordinates",false]],"arc_end (pylinkage.actuators.arc_crank.arccrank attribute)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.arc_end",false]],"arc_end (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.arc_end",false]],"arc_end (pylinkage.mechanism.link.arcdriverlink attribute)":[[11,"pylinkage.mechanism.link.ArcDriverLink.arc_end",false]],"arc_start (pylinkage.actuators.arc_crank.arccrank attribute)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.arc_start",false]],"arc_start (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.arc_start",false]],"arc_start (pylinkage.mechanism.link.arcdriverlink attribute)":[[11,"pylinkage.mechanism.link.ArcDriverLink.arc_start",false]],"arccrank (class in pylinkage.actuators.arc_crank)":[[2,"pylinkage.actuators.arc_crank.ArcCrank",false]],"arcdriverlink (class in pylinkage.mechanism.link)":[[11,"pylinkage.mechanism.link.ArcDriverLink",false]],"are_isomorphic() (in module pylinkage.topology.isomorphism)":[[19,"pylinkage.topology.isomorphism.are_isomorphic",false]],"arm_angle (pylinkage.dyads.oscillating_cam.oscillatingcamfollower property)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.arm_angle",false]],"arm_length (pylinkage.dyads.oscillating_cam.oscillatingcamfollower attribute)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.arm_length",false]],"assur_groups (pylinkage.assur.assur_mechanism.assurmechanism property)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.assur_groups",false]],"assur_groups (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.assur_groups",false]],"assurgroup (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.AssurGroup",false]],"assurgroupclass (class in pylinkage.assur.signature)":[[3,"pylinkage.assur.signature.AssurGroupClass",false]],"assurmechanism (class in pylinkage.assur.assur_mechanism)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism",false]],"assursignature (class in pylinkage.assur.signature)":[[3,"pylinkage.assur.signature.AssurSignature",false]],"axis (pylinkage.mechanism.joint.prismaticjoint attribute)":[[11,"pylinkage.mechanism.joint.PrismaticJoint.axis",false]],"axis_id (pylinkage.mechanism.builder.prismaticconnection attribute)":[[11,"pylinkage.mechanism.builder.PrismaticConnection.axis_id",false]],"bar (pylinkage.visualizer.symbols.linkstyle attribute)":[[21,"pylinkage.visualizer.symbols.LinkStyle.BAR",false]],"base_radius (pylinkage.cam.profiles.camprofile attribute)":[[5,"pylinkage.cam.profiles.CamProfile.base_radius",false]],"base_radius (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.base_radius",false]],"base_radius (pylinkage.cam.profiles.pointarrayprofile attribute)":[[5,"pylinkage.cam.profiles.PointArrayProfile.base_radius",false]],"baseline_path_metric (pylinkage.linkage.sensitivity.sensitivityanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.baseline_path_metric",false]],"baseline_transmission (pylinkage.linkage.sensitivity.sensitivityanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.baseline_transmission",false]],"best_compromise() (pylinkage.optimization.collections.pareto.paretofront method)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.best_compromise",false]],"best_score (pylinkage.optimization.async_optimization.optimizationprogress attribute)":[[12,"pylinkage.optimization.async_optimization.OptimizationProgress.best_score",false]],"binary (pylinkage.mechanism.link.linktype attribute)":[[11,"pylinkage.mechanism.link.LinkType.BINARY",false]],"body_id (pylinkage.assur.graph.edge attribute)":[[3,"pylinkage.assur.graph.Edge.body_id",false]],"bone (pylinkage.visualizer.symbols.linkstyle attribute)":[[21,"pylinkage.visualizer.symbols.LinkStyle.BONE",false]],"bounding_box() (in module pylinkage.geometry.secants)":[[8,"pylinkage.geometry.secants.bounding_box",false]],"bounding_box() (in module pylinkage.linkage.analysis)":[[10,"pylinkage.linkage.analysis.bounding_box",false]],"branch (pylinkage.symbolic.joints.symrevolute attribute)":[[17,"pylinkage.symbolic.joints.SymRevolute.branch",false]],"branch_info (pylinkage.synthesis.core.synthesisresult attribute)":[[18,"pylinkage.synthesis.core.SynthesisResult.branch_info",false]],"build() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.build",false]],"build_connections() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.build_connections",false]],"build_linkage_3d() (in module pylinkage.visualizer.step_export)":[[21,"pylinkage.visualizer.step_export.build_linkage_3d",false]],"build_neighborhood_graph() (in module pylinkage.optimization.topology_neighborhood)":[[12,"pylinkage.optimization.topology_neighborhood.build_neighborhood_graph",false]],"build_rails() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.build_rails",false]],"burmestercurves (class in pylinkage.synthesis.core)":[[18,"pylinkage.synthesis.core.BurmesterCurves",false]],"burmesterdyad (class in pylinkage.synthesis.core)":[[18,"pylinkage.synthesis.core.BurmesterDyad",false]],"by_family() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.by_family",false]],"by_num_links() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.by_num_links",false]],"cache_distances() (pylinkage.mechanism.link.link method)":[[11,"pylinkage.mechanism.link.Link.cache_distances",false]],"cam_angle (pylinkage.dyads.oscillating_cam.oscillatingcamfollower property)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.cam_angle",false]],"cam_angle (pylinkage.dyads.translating_cam.translatingcamfollower property)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.cam_angle",false]],"cam_driver (pylinkage.dyads.oscillating_cam.oscillatingcamfollower attribute)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.cam_driver",false]],"cam_driver (pylinkage.dyads.translating_cam.translatingcamfollower attribute)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.cam_driver",false]],"camprofile (class in pylinkage.cam.profiles)":[[5,"pylinkage.cam.profiles.CamProfile",false]],"can_form() (pylinkage.assur.groups.assurgroup class method)":[[3,"pylinkage.assur.groups.AssurGroup.can_form",false]],"can_form() (pylinkage.assur.groups.dyad class method)":[[3,"pylinkage.assur.groups.Dyad.can_form",false]],"can_form() (pylinkage.assur.groups.triad class method)":[[3,"pylinkage.assur.groups.Triad.can_form",false]],"canonical_form (pylinkage.assur.signature.assursignature property)":[[3,"pylinkage.assur.signature.AssurSignature.canonical_form",false]],"canonical_form() (in module pylinkage.topology.isomorphism)":[[19,"pylinkage.topology.isomorphism.canonical_form",false]],"canonical_hash() (in module pylinkage.topology.isomorphism)":[[19,"pylinkage.topology.isomorphism.canonical_hash",false]],"catalogentry (class in pylinkage.topology.catalog)":[[19,"pylinkage.topology.catalog.CatalogEntry",false]],"center_curve (pylinkage.synthesis.core.burmestercurves attribute)":[[18,"pylinkage.synthesis.core.BurmesterCurves.center_curve",false]],"center_point (pylinkage.synthesis.core.burmesterdyad attribute)":[[18,"pylinkage.synthesis.core.BurmesterDyad.center_point",false]],"center_position (pylinkage.linkage.transmission.strokeanalysis property)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.center_position",false]],"chain_optimizers() (in module pylinkage.optimization.scipy_optimize)":[[12,"pylinkage.optimization.scipy_optimize.chain_optimizers",false]],"change_point (pylinkage.synthesis.utils.grashoftype attribute)":[[18,"pylinkage.synthesis.utils.GrashofType.CHANGE_POINT",false]],"check_buildability() (in module pylinkage.symbolic.solver)":[[17,"pylinkage.symbolic.solver.check_buildability",false]],"check_condition_number() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.check_condition_number",false]],"chromosome (pylinkage.optimization.co_optimization_types.cooptsolution attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptSolution.chromosome",false]],"circle_curve (pylinkage.synthesis.core.burmestercurves attribute)":[[18,"pylinkage.synthesis.core.BurmesterCurves.circle_curve",false]],"circle_intersect() (in module pylinkage.geometry.secants)":[[8,"pylinkage.geometry.secants.circle_intersect",false]],"circle_line_from_points_intersection() (in module pylinkage.geometry.secants)":[[8,"pylinkage.geometry.secants.circle_line_from_points_intersection",false]],"circle_line_intersection() (in module pylinkage.geometry.secants)":[[8,"pylinkage.geometry.secants.circle_line_intersection",false]],"circle_point (pylinkage.synthesis.core.burmesterdyad attribute)":[[18,"pylinkage.synthesis.core.BurmesterDyad.circle_point",false]],"close() (pylinkage.optimization.multi_objective.linkageproblem method)":[[12,"pylinkage.optimization.multi_objective.LinkageProblem.close",false]],"co_optimize() (in module pylinkage.optimization.mixed_variable)":[[12,"pylinkage.optimization.mixed_variable.co_optimize",false]],"coefficients (pylinkage.cam.motion_laws.polynomialmotionlaw property)":[[5,"pylinkage.cam.motion_laws.PolynomialMotionLaw.coefficients",false]],"coefficients_to_link_lengths() (in module pylinkage.synthesis.function_generation)":[[18,"pylinkage.synthesis.function_generation.coefficients_to_link_lengths",false]],"color (pylinkage.visualizer.symbols.symbolspec attribute)":[[21,"pylinkage.visualizer.symbols.SymbolSpec.color",false]],"compactness (pylinkage.synthesis.topology_types.qualitymetrics attribute)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics.compactness",false]],"compatible_topologies() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.compatible_topologies",false]],"compile() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.compile",false]],"compile() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.compile",false]],"complex_to_point() (in module pylinkage.synthesis.burmester)":[[18,"pylinkage.synthesis.burmester.complex_to_point",false]],"complex_to_point() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.complex_to_point",false]],"component_instance_from_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.component_instance_from_dict",false]],"component_instance_to_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.component_instance_to_dict",false]],"componentinstance (class in pylinkage.hypergraph.hierarchy)":[[9,"pylinkage.hypergraph.hierarchy.ComponentInstance",false]],"components (pylinkage.simulation.linkage.linkage attribute)":[[15,"pylinkage.simulation.linkage.Linkage.components",false]],"compute_all_poles() (in module pylinkage.synthesis.burmester)":[[18,"pylinkage.synthesis.burmester.compute_all_poles",false]],"compute_circle_point_curve() (in module pylinkage.synthesis.burmester)":[[18,"pylinkage.synthesis.burmester.compute_circle_point_curve",false]],"compute_compactness() (in module pylinkage.synthesis.ranking)":[[18,"pylinkage.synthesis.ranking.compute_compactness",false]],"compute_dof() (in module pylinkage.topology.analysis)":[[19,"pylinkage.topology.analysis.compute_dof",false]],"compute_link_ratio() (in module pylinkage.synthesis.ranking)":[[18,"pylinkage.synthesis.ranking.compute_link_ratio",false]],"compute_metrics() (in module pylinkage.synthesis.ranking)":[[18,"pylinkage.synthesis.ranking.compute_metrics",false]],"compute_mobility() (in module pylinkage.topology.analysis)":[[19,"pylinkage.topology.analysis.compute_mobility",false]],"compute_path_accuracy() (in module pylinkage.synthesis.ranking)":[[18,"pylinkage.synthesis.ranking.compute_path_accuracy",false]],"compute_pole() (in module pylinkage.synthesis.burmester)":[[18,"pylinkage.synthesis.burmester.compute_pole",false]],"compute_relative_pole() (in module pylinkage.synthesis.burmester)":[[18,"pylinkage.synthesis.burmester.compute_relative_pole",false]],"compute_slide_position() (in module pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.compute_slide_position",false]],"compute_trajectory_numeric() (in module pylinkage.symbolic.solver)":[[17,"pylinkage.symbolic.solver.compute_trajectory_numeric",false]],"compute_transmission_angle() (in module pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.compute_transmission_angle",false]],"compute_transmission_angle() (in module pylinkage.synthesis.ranking)":[[18,"pylinkage.synthesis.ranking.compute_transmission_angle",false]],"config (pylinkage.optimization.co_optimization_types.cooptimizationresult attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationResult.config",false]],"connect() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.connect",false]],"connect_prismatic() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.connect_prismatic",false]],"connection (class in pylinkage.hypergraph.hierarchy)":[[9,"pylinkage.hypergraph.hierarchy.Connection",false]],"connection (class in pylinkage.mechanism.builder)":[[11,"pylinkage.mechanism.builder.Connection",false]],"connection_from_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.connection_from_dict",false]],"connection_to_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.connection_to_dict",false]],"connections (pylinkage.hypergraph.hierarchy.hierarchicallinkage attribute)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage.connections",false]],"connects() (pylinkage.assur.graph.edge method)":[[3,"pylinkage.assur.graph.Edge.connects",false]],"connects() (pylinkage.hypergraph.core.edge method)":[[9,"pylinkage.hypergraph.core.Edge.connects",false]],"constraint_counts (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.constraint_counts",false]],"constraint_equations() (pylinkage.symbolic.joints.symcrank method)":[[17,"pylinkage.symbolic.joints.SymCrank.constraint_equations",false]],"constraint_equations() (pylinkage.symbolic.joints.symjoint method)":[[17,"pylinkage.symbolic.joints.SymJoint.constraint_equations",false]],"constraint_equations() (pylinkage.symbolic.joints.symrevolute method)":[[17,"pylinkage.symbolic.joints.SymRevolute.constraint_equations",false]],"constraint_equations() (pylinkage.symbolic.joints.symstatic method)":[[17,"pylinkage.symbolic.joints.SymStatic.constraint_equations",false]],"constraint_names (pylinkage.linkage.sensitivity.sensitivityanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.constraint_names",false]],"constraint_offsets (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.constraint_offsets",false]],"constraints (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.constraints",false]],"convergence_history (pylinkage.optimization.co_optimization_types.cooptimizationresult attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationResult.convergence_history",false]],"cooptimizationconfig (class in pylinkage.optimization.co_optimization_types)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig",false]],"cooptimizationresult (class in pylinkage.optimization.co_optimization_types)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationResult",false]],"cooptsolution (class in pylinkage.optimization.co_optimization_types)":[[12,"pylinkage.optimization.co_optimization_types.CoOptSolution",false]],"coord() (pylinkage.mechanism.joint.joint method)":[[11,"pylinkage.mechanism.joint.Joint.coord",false]],"copy() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.copy",false]],"copy() (pylinkage.dimensions.dimensions method)":[[1,"pylinkage.dimensions.Dimensions.copy",false]],"copy() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.copy",false]],"copy() (pylinkage.optimization.co_optimization_types.mixedchromosome method)":[[12,"pylinkage.optimization.co_optimization_types.MixedChromosome.copy",false]],"copy() (pylinkage.solver.types.solverdata method)":[[16,"pylinkage.solver.types.SolverData.copy",false]],"coupler_curve() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.coupler_curve",false]],"coupler_node (pylinkage.synthesis.topology_types.nbarsolution attribute)":[[18,"pylinkage.synthesis.topology_types.NBarSolution.coupler_node",false]],"coupler_point (pylinkage.synthesis.topology_types.nbarsolution attribute)":[[18,"pylinkage.synthesis.topology_types.NBarSolution.coupler_point",false]],"crank (class in pylinkage.actuators.crank)":[[2,"pylinkage.actuators.crank.Crank",false]],"crank (pylinkage.visualizer.symbols.symboltype attribute)":[[21,"pylinkage.visualizer.symbols.SymbolType.CRANK",false]],"crank_angle_limits() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.crank_angle_limits",false]],"crank_indices (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.crank_indices",false]],"create_dyad() (in module pylinkage.dyads.factory)":[[7,"pylinkage.dyads.factory.create_dyad",false]],"create_trajectory_functions() (in module pylinkage.symbolic.solver)":[[17,"pylinkage.symbolic.solver.create_trajectory_functions",false]],"crossover_prob (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.crossover_prob",false]],"current_angle (pylinkage.mechanism.link.arcdriverlink attribute)":[[11,"pylinkage.mechanism.link.ArcDriverLink.current_angle",false]],"current_angle (pylinkage.mechanism.link.driverlink attribute)":[[11,"pylinkage.mechanism.link.DriverLink.current_angle",false]],"current_iteration (pylinkage.optimization.async_optimization.optimizationprogress attribute)":[[12,"pylinkage.optimization.async_optimization.OptimizationProgress.current_iteration",false]],"cycloidalmotionlaw (class in pylinkage.cam.motion_laws)":[[5,"pylinkage.cam.motion_laws.CycloidalMotionLaw",false]],"cyl_to_cart() (in module pylinkage.geometry.core)":[[8,"pylinkage.geometry.core.cyl_to_cart",false]],"dashboard_layout() (in module pylinkage.visualizer.pso_plots)":[[21,"pylinkage.visualizer.pso_plots.dashboard_layout",false]],"decompose_assur_groups() (in module pylinkage.assur.decomposition)":[[3,"pylinkage.assur.decomposition.decompose_assur_groups",false]],"decomposition (pylinkage.assur.assur_mechanism.assurmechanism property)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.decomposition",false]],"decompositionresult (class in pylinkage.assur.decomposition)":[[3,"pylinkage.assur.decomposition.DecompositionResult",false]],"default_angular_velocity (in module pylinkage.actuators.crank)":[[2,"pylinkage.actuators.crank.DEFAULT_ANGULAR_VELOCITY",false]],"default_orientation_resolution (in module pylinkage.synthesis.path_generation)":[[18,"pylinkage.synthesis.path_generation.DEFAULT_ORIENTATION_RESOLUTION",false]],"degree() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.degree",false]],"degree() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.degree",false]],"degree_of_freedom (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.degree_of_freedom",false]],"degree_of_freedom (pylinkage.assur.assur_mechanism.assurmechanism property)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.degree_of_freedom",false]],"description (pylinkage.optimization.topology_neighborhood.topologyneighbor attribute)":[[12,"pylinkage.optimization.topology_neighborhood.TopologyNeighbor.description",false]],"differential_evolution_optimization() (in module pylinkage.optimization.scipy_optimize)":[[12,"pylinkage.optimization.scipy_optimize.differential_evolution_optimization",false]],"differential_evolution_optimization_async() (in module pylinkage.optimization.async_optimization)":[[12,"pylinkage.optimization.async_optimization.differential_evolution_optimization_async",false]],"dimension_bounds_factor (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.dimension_bounds_factor",false]],"dimension_mutation_sigma (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.dimension_mutation_sigma",false]],"dimensions (class in pylinkage.dimensions)":[[1,"pylinkage.dimensions.Dimensions",false]],"dimensions (pylinkage.optimization.co_optimization_types.mixedchromosome attribute)":[[12,"pylinkage.optimization.co_optimization_types.MixedChromosome.dimensions",false]],"dimensions (pylinkage.optimization.collections.mutable_agent.mutableagent attribute)":[[13,"pylinkage.optimization.collections.mutable_agent.MutableAgent.dimensions",false]],"dimensions (pylinkage.optimization.collections.pareto.paretosolution attribute)":[[13,"pylinkage.optimization.collections.pareto.ParetoSolution.dimensions",false]],"direction (pylinkage.mechanism.builder.slideaxis attribute)":[[11,"pylinkage.mechanism.builder.SlideAxis.direction",false]],"displacement (pylinkage.dyads.translating_cam.translatingcamfollower property)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.displacement",false]],"displacement() (pylinkage.cam.motion_laws.cycloidalmotionlaw method)":[[5,"pylinkage.cam.motion_laws.CycloidalMotionLaw.displacement",false]],"displacement() (pylinkage.cam.motion_laws.harmonicmotionlaw method)":[[5,"pylinkage.cam.motion_laws.HarmonicMotionLaw.displacement",false]],"displacement() (pylinkage.cam.motion_laws.modifiedtrapezoidalmotionlaw method)":[[5,"pylinkage.cam.motion_laws.ModifiedTrapezoidalMotionLaw.displacement",false]],"displacement() (pylinkage.cam.motion_laws.motionlaw method)":[[5,"pylinkage.cam.motion_laws.MotionLaw.displacement",false]],"displacement() (pylinkage.cam.motion_laws.polynomialmotionlaw method)":[[5,"pylinkage.cam.motion_laws.PolynomialMotionLaw.displacement",false]],"dist() (in module pylinkage.geometry.core)":[[8,"pylinkage.geometry.core.dist",false]],"distance (pylinkage.components.point_tracker.pointtracker attribute)":[[6,"pylinkage.components.point_tracker.PointTracker.distance",false]],"distance (pylinkage.dyads.fixed.fixeddyad attribute)":[[7,"pylinkage.dyads.fixed.FixedDyad.distance",false]],"distance (pylinkage.dyads.rrp.rrpdyad attribute)":[[7,"pylinkage.dyads.rrp.RRPDyad.distance",false]],"distance (pylinkage.mechanism.builder.pendingtracker attribute)":[[11,"pylinkage.mechanism.builder.PendingTracker.distance",false]],"distance (pylinkage.mechanism.joint.trackerjoint attribute)":[[11,"pylinkage.mechanism.joint.TrackerJoint.distance",false]],"distance() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.distance",false]],"distance1 (pylinkage.dyads.rrr.rrrdyad attribute)":[[7,"pylinkage.dyads.rrr.RRRDyad.distance1",false]],"distance2 (pylinkage.dyads.rrr.rrrdyad attribute)":[[7,"pylinkage.dyads.rrr.RRRDyad.distance2",false]],"dof (pylinkage.topology.analysis.mobilityinfo attribute)":[[19,"pylinkage.topology.analysis.MobilityInfo.dof",false]],"dof (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.dof",false]],"dominates() (pylinkage.optimization.collections.pareto.paretosolution method)":[[13,"pylinkage.optimization.collections.pareto.ParetoSolution.dominates",false]],"driven_nodes() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.driven_nodes",false]],"driven_nodes() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.driven_nodes",false]],"driver (pylinkage.mechanism.link.linktype attribute)":[[11,"pylinkage.mechanism.link.LinkType.DRIVER",false]],"driver_angles (pylinkage.dimensions.dimensions attribute)":[[1,"pylinkage.dimensions.Dimensions.driver_angles",false]],"driver_nodes() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.driver_nodes",false]],"driver_nodes() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.driver_nodes",false]],"driverangle (class in pylinkage.dimensions)":[[1,"pylinkage.dimensions.DriverAngle",false]],"driverlink (class in pylinkage.mechanism.link)":[[11,"pylinkage.mechanism.link.DriverLink",false]],"drivers (pylinkage.assur.decomposition.decompositionresult attribute)":[[3,"pylinkage.assur.decomposition.DecompositionResult.drivers",false]],"dual_annealing_optimization() (in module pylinkage.optimization.scipy_optimize)":[[12,"pylinkage.optimization.scipy_optimize.dual_annealing_optimization",false]],"dwell_high_end (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.dwell_high_end",false]],"dyad (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.Dyad",false]],"dyad (pylinkage.assur.signature.assurgroupclass attribute)":[[3,"pylinkage.assur.signature.AssurGroupClass.DYAD",false]],"dyadpp (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.DyadPP",false]],"dyadprr (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.DyadPRR",false]],"dyadrpr (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.DyadRPR",false]],"dyadrrp (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.DyadRRP",false]],"dyadrrr (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.DyadRRR",false]],"dyads (pylinkage.simulation.linkage.linkage property)":[[15,"pylinkage.simulation.linkage.Linkage.dyads",false]],"dyads (pylinkage.synthesis.topology_types.groupsynthesisresult attribute)":[[18,"pylinkage.synthesis.topology_types.GroupSynthesisResult.dyads",false]],"edge (class in pylinkage.assur.graph)":[[3,"pylinkage.assur.graph.Edge",false]],"edge (class in pylinkage.hypergraph.core)":[[9,"pylinkage.hypergraph.core.Edge",false]],"edge_distances (pylinkage.dimensions.dimensions attribute)":[[1,"pylinkage.dimensions.Dimensions.edge_distances",false]],"edge_from_dict() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.edge_from_dict",false]],"edge_from_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.edge_from_dict",false]],"edge_map (pylinkage.assur.groups.triad attribute)":[[3,"pylinkage.assur.groups.Triad.edge_map",false]],"edge_to_dict() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.edge_to_dict",false]],"edge_to_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.edge_to_dict",false]],"edges (pylinkage.assur.graph.linkagegraph attribute)":[[3,"pylinkage.assur.graph.LinkageGraph.edges",false]],"edges (pylinkage.hypergraph.graph.hypergraphlinkage attribute)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.edges",false]],"eliminate_theta() (in module pylinkage.symbolic.solver)":[[17,"pylinkage.symbolic.solver.eliminate_theta",false]],"ensemble (pylinkage.synthesis.core.synthesisresult property)":[[18,"pylinkage.synthesis.core.SynthesisResult.ensemble",false]],"entries (pylinkage.topology.catalog.topologycatalog attribute)":[[19,"pylinkage.topology.catalog.TopologyCatalog.entries",false]],"enumerate_all() (in module pylinkage.topology.enumeration)":[[19,"pylinkage.topology.enumeration.enumerate_all",false]],"enumerate_topologies() (in module pylinkage.topology.enumeration)":[[19,"pylinkage.topology.enumeration.enumerate_topologies",false]],"evaluate() (pylinkage.cam.profiles.camprofile method)":[[5,"pylinkage.cam.profiles.CamProfile.evaluate",false]],"evaluate() (pylinkage.cam.profiles.functionprofile method)":[[5,"pylinkage.cam.profiles.FunctionProfile.evaluate",false]],"evaluate() (pylinkage.cam.profiles.pointarrayprofile method)":[[5,"pylinkage.cam.profiles.PointArrayProfile.evaluate",false]],"evaluate() (pylinkage.symbolic.optimization.symbolicoptimizer method)":[[17,"pylinkage.symbolic.optimization.SymbolicOptimizer.evaluate",false]],"evaluate_derivative() (pylinkage.cam.profiles.camprofile method)":[[5,"pylinkage.cam.profiles.CamProfile.evaluate_derivative",false]],"evaluate_derivative() (pylinkage.cam.profiles.functionprofile method)":[[5,"pylinkage.cam.profiles.FunctionProfile.evaluate_derivative",false]],"evaluate_derivative() (pylinkage.cam.profiles.pointarrayprofile method)":[[5,"pylinkage.cam.profiles.PointArrayProfile.evaluate_derivative",false]],"extension (pylinkage.actuators.linear.linearactuator property)":[[2,"pylinkage.actuators.linear.LinearActuator.extension",false]],"extract_trajectories() (in module pylinkage.linkage.analysis)":[[10,"pylinkage.linkage.analysis.extract_trajectories",false]],"extract_trajectory() (in module pylinkage.linkage.analysis)":[[10,"pylinkage.linkage.analysis.extract_trajectory",false]],"fall_end (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.fall_end",false]],"family (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.family",false]],"fast_variator() (in module pylinkage.optimization.grid_search)":[[12,"pylinkage.optimization.grid_search.fast_variator",false]],"fillet_radius (pylinkage.visualizer.step_export.linkprofile attribute)":[[21,"pylinkage.visualizer.step_export.LinkProfile.fillet_radius",false]],"filter() (pylinkage.optimization.collections.pareto.paretofront method)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.filter",false]],"filter_finite() (pylinkage.synthesis.core.burmestercurves method)":[[18,"pylinkage.synthesis.core.BurmesterCurves.filter_finite",false]],"first_nan_step() (in module pylinkage.solver.simulation)":[[16,"pylinkage.solver.simulation.first_nan_step",false]],"fixed (pylinkage.visualizer.symbols.symboltype attribute)":[[21,"pylinkage.visualizer.symbols.SymbolType.FIXED",false]],"fixeddyad (class in pylinkage.dyads.fixed)":[[7,"pylinkage.dyads.fixed.FixedDyad",false]],"flatten() (pylinkage.hypergraph.hierarchy.hierarchicallinkage method)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage.flatten",false]],"fourbar() (in module pylinkage.mechanism.factories)":[[11,"pylinkage.mechanism.factories.fourbar",false]],"fourbar_from_lengths() (in module pylinkage.synthesis.conversion)":[[18,"pylinkage.synthesis.conversion.fourbar_from_lengths",false]],"fourbar_symbolic() (in module pylinkage.symbolic.conversion)":[[17,"pylinkage.symbolic.conversion.fourbar_symbolic",false]],"freudenstein_equation() (in module pylinkage.synthesis.function_generation)":[[18,"pylinkage.synthesis.function_generation.freudenstein_equation",false]],"from_dict() (pylinkage.dimensions.dimensions class method)":[[1,"pylinkage.dimensions.Dimensions.from_dict",false]],"from_dict() (pylinkage.dimensions.driverangle class method)":[[1,"pylinkage.dimensions.DriverAngle.from_dict",false]],"from_edges() (pylinkage.hypergraph.core.hyperedge class method)":[[9,"pylinkage.hypergraph.core.Hyperedge.from_edges",false]],"from_graph() (pylinkage.assur.assur_mechanism.assurmechanism class method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.from_graph",false]],"from_hypergraph() (in module pylinkage.assur.hypergraph_conversion)":[[3,"pylinkage.assur.hypergraph_conversion.from_hypergraph",false]],"from_instance (pylinkage.hypergraph.hierarchy.connection attribute)":[[9,"pylinkage.hypergraph.hierarchy.Connection.from_instance",false]],"from_json() (pylinkage.topology.catalog.topologycatalog class method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.from_json",false]],"from_mechanism() (in module pylinkage.hypergraph.mechanism_conversion)":[[9,"pylinkage.hypergraph.mechanism_conversion.from_mechanism",false]],"from_mechanism() (pylinkage.assur.assur_mechanism.assurmechanism class method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.from_mechanism",false]],"from_port (pylinkage.hypergraph.hierarchy.connection attribute)":[[9,"pylinkage.hypergraph.hierarchy.Connection.from_port",false]],"from_sim_linkage() (in module pylinkage.hypergraph.sim_conversion)":[[9,"pylinkage.hypergraph.sim_conversion.from_sim_linkage",false]],"function_generation() (in module pylinkage.synthesis.function_generation)":[[18,"pylinkage.synthesis.function_generation.function_generation",false]],"functionprofile (class in pylinkage.cam.profiles)":[[5,"pylinkage.cam.profiles.FunctionProfile",false]],"generalized_synthesis() (in module pylinkage.synthesis.generalized)":[[18,"pylinkage.synthesis.generalized.generalized_synthesis",false]],"generate_bounds() (in module pylinkage.optimization.utils)":[[12,"pylinkage.optimization.utils.generate_bounds",false]],"generate_catalog() (in module pylinkage.topology.catalog)":[[19,"pylinkage.topology.catalog.generate_catalog",false]],"generate_symbolic_bounds() (in module pylinkage.symbolic.optimization)":[[17,"pylinkage.symbolic.optimization.generate_symbolic_bounds",false]],"get() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.get",false]],"get_accelerations() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_accelerations",false]],"get_accelerations() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.get_accelerations",false]],"get_all_dyads() (pylinkage.synthesis.core.burmestercurves method)":[[18,"pylinkage.synthesis.core.BurmesterCurves.get_all_dyads",false]],"get_all_port_nodes() (pylinkage.hypergraph.hierarchy.hierarchicallinkage method)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage.get_all_port_nodes",false]],"get_axis_normalized() (pylinkage.mechanism.joint.prismaticjoint method)":[[11,"pylinkage.mechanism.joint.PrismaticJoint.get_axis_normalized",false]],"get_components() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.get_components",false]],"get_constraint_equations() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.get_constraint_equations",false]],"get_constraints() (pylinkage.actuators.arc_crank.arccrank method)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.get_constraints",false]],"get_constraints() (pylinkage.actuators.crank.crank method)":[[2,"pylinkage.actuators.crank.Crank.get_constraints",false]],"get_constraints() (pylinkage.actuators.linear.linearactuator method)":[[2,"pylinkage.actuators.linear.LinearActuator.get_constraints",false]],"get_constraints() (pylinkage.cam.profiles.camprofile method)":[[5,"pylinkage.cam.profiles.CamProfile.get_constraints",false]],"get_constraints() (pylinkage.cam.profiles.functionprofile method)":[[5,"pylinkage.cam.profiles.FunctionProfile.get_constraints",false]],"get_constraints() (pylinkage.cam.profiles.pointarrayprofile method)":[[5,"pylinkage.cam.profiles.PointArrayProfile.get_constraints",false]],"get_constraints() (pylinkage.components.ground.ground method)":[[6,"pylinkage.components.ground.Ground.get_constraints",false]],"get_constraints() (pylinkage.components.point_tracker.pointtracker method)":[[6,"pylinkage.components.point_tracker.PointTracker.get_constraints",false]],"get_constraints() (pylinkage.dyads.fixed.fixeddyad method)":[[7,"pylinkage.dyads.fixed.FixedDyad.get_constraints",false]],"get_constraints() (pylinkage.dyads.oscillating_cam.oscillatingcamfollower method)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.get_constraints",false]],"get_constraints() (pylinkage.dyads.pp.ppdyad method)":[[7,"pylinkage.dyads.pp.PPDyad.get_constraints",false]],"get_constraints() (pylinkage.dyads.rrp.rrpdyad method)":[[7,"pylinkage.dyads.rrp.RRPDyad.get_constraints",false]],"get_constraints() (pylinkage.dyads.rrr.rrrdyad method)":[[7,"pylinkage.dyads.rrr.RRRDyad.get_constraints",false]],"get_constraints() (pylinkage.dyads.translating_cam.translatingcamfollower method)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.get_constraints",false]],"get_constraints() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_constraints",false]],"get_constraints() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.get_constraints",false]],"get_coords() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_coords",false]],"get_coords() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.get_coords",false]],"get_distance() (pylinkage.mechanism.link.link method)":[[11,"pylinkage.mechanism.link.Link.get_distance",false]],"get_driver_angle() (pylinkage.dimensions.dimensions method)":[[1,"pylinkage.dimensions.Dimensions.get_driver_angle",false]],"get_dyad() (pylinkage.synthesis.core.burmestercurves method)":[[18,"pylinkage.synthesis.core.BurmesterCurves.get_dyad",false]],"get_edge_between() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.get_edge_between",false]],"get_edge_between() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.get_edge_between",false]],"get_edge_distance() (pylinkage.dimensions.dimensions method)":[[1,"pylinkage.dimensions.Dimensions.get_edge_distance",false]],"get_edges_for_node() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.get_edges_for_node",false]],"get_edges_for_node() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.get_edges_for_node",false]],"get_hyperedge_distance() (pylinkage.dimensions.dimensions method)":[[1,"pylinkage.dimensions.Dimensions.get_hyperedge_distance",false]],"get_hyperedges_for_node() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.get_hyperedges_for_node",false]],"get_isomer_geometry() (in module pylinkage.dyads.factory)":[[7,"pylinkage.dyads.factory.get_isomer_geometry",false]],"get_joint() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_joint",false]],"get_joint() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.get_joint",false]],"get_joint_positions() (pylinkage.assur.assur_mechanism.assurmechanism method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.get_joint_positions",false]],"get_joint_positions() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_joint_positions",false]],"get_line_points() (pylinkage.mechanism.builder.slideaxis method)":[[11,"pylinkage.mechanism.builder.SlideAxis.get_line_points",false]],"get_link() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_link",false]],"get_link_color() (in module pylinkage.visualizer.symbols)":[[21,"pylinkage.visualizer.symbols.get_link_color",false]],"get_nearest_point() (in module pylinkage.geometry.core)":[[8,"pylinkage.geometry.core.get_nearest_point",false]],"get_node_position() (pylinkage.dimensions.dimensions method)":[[1,"pylinkage.dimensions.Dimensions.get_node_position",false]],"get_normalized_direction() (pylinkage.mechanism.builder.slideaxis method)":[[11,"pylinkage.mechanism.builder.SlideAxis.get_normalized_direction",false]],"get_numeric_parameters() (in module pylinkage.symbolic.conversion)":[[17,"pylinkage.symbolic.conversion.get_numeric_parameters",false]],"get_parent_pairs() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.get_parent_pairs",false]],"get_port_distance() (pylinkage.mechanism.builder.pendinglink method)":[[11,"pylinkage.mechanism.builder.PendingLink.get_port_distance",false]],"get_port_qualified_node() (pylinkage.hypergraph.hierarchy.componentinstance method)":[[9,"pylinkage.hypergraph.hierarchy.ComponentInstance.get_port_qualified_node",false]],"get_qualified_node_id() (pylinkage.hypergraph.hierarchy.componentinstance method)":[[9,"pylinkage.hypergraph.hierarchy.ComponentInstance.get_qualified_node_id",false]],"get_rail_pairs() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.get_rail_pairs",false]],"get_required_anchors() (in module pylinkage.dyads.factory)":[[7,"pylinkage.dyads.factory.get_required_anchors",false]],"get_required_constraints() (in module pylinkage.dyads.factory)":[[7,"pylinkage.dyads.factory.get_required_constraints",false]],"get_rotation_period() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_rotation_period",false]],"get_rotation_period() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.get_rotation_period",false]],"get_symbol_spec() (in module pylinkage.visualizer.symbols)":[[21,"pylinkage.visualizer.symbols.get_symbol_spec",false]],"get_trajectory_expressions() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.get_trajectory_expressions",false]],"get_velocities() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_velocities",false]],"get_velocities() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.get_velocities",false]],"gradient() (pylinkage.symbolic.optimization.symbolicoptimizer method)":[[17,"pylinkage.symbolic.optimization.SymbolicOptimizer.gradient",false]],"graph (pylinkage.assur.assur_mechanism.assurmechanism property)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.graph",false]],"graph (pylinkage.assur.decomposition.decompositionresult attribute)":[[3,"pylinkage.assur.decomposition.DecompositionResult.graph",false]],"graph_from_dict() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.graph_from_dict",false]],"graph_from_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.graph_from_dict",false]],"graph_from_json() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.graph_from_json",false]],"graph_from_json() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.graph_from_json",false]],"graph_to_dict() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.graph_to_dict",false]],"graph_to_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.graph_to_dict",false]],"graph_to_json() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.graph_to_json",false]],"graph_to_json() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.graph_to_json",false]],"graph_to_mechanism() (in module pylinkage.assur.mechanism_conversion)":[[3,"pylinkage.assur.mechanism_conversion.graph_to_mechanism",false]],"grashof_check() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.grashof_check",false]],"grashof_crank_rocker (pylinkage.synthesis.utils.grashoftype attribute)":[[18,"pylinkage.synthesis.utils.GrashofType.GRASHOF_CRANK_ROCKER",false]],"grashof_double_crank (pylinkage.synthesis.utils.grashoftype attribute)":[[18,"pylinkage.synthesis.utils.GrashofType.GRASHOF_DOUBLE_CRANK",false]],"grashof_double_rocker (pylinkage.synthesis.utils.grashoftype attribute)":[[18,"pylinkage.synthesis.utils.GrashofType.GRASHOF_DOUBLE_ROCKER",false]],"grashof_rocker_crank (pylinkage.synthesis.utils.grashoftype attribute)":[[18,"pylinkage.synthesis.utils.GrashofType.GRASHOF_ROCKER_CRANK",false]],"grashoftype (class in pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.GrashofType",false]],"ground (class in pylinkage.components.ground)":[[6,"pylinkage.components.ground.Ground",false]],"ground (pylinkage.assur.decomposition.decompositionresult attribute)":[[3,"pylinkage.assur.decomposition.DecompositionResult.ground",false]],"ground (pylinkage.mechanism.joint.jointtype attribute)":[[11,"pylinkage.mechanism.joint.JointType.GROUND",false]],"ground (pylinkage.mechanism.link.linktype attribute)":[[11,"pylinkage.mechanism.link.LinkType.GROUND",false]],"ground (pylinkage.mechanism.mechanism.mechanism attribute)":[[11,"pylinkage.mechanism.mechanism.Mechanism.ground",false]],"ground (pylinkage.visualizer.symbols.symboltype attribute)":[[21,"pylinkage.visualizer.symbols.SymbolType.GROUND",false]],"ground_length (pylinkage.synthesis.core.synthesisproblem attribute)":[[18,"pylinkage.synthesis.core.SynthesisProblem.ground_length",false]],"ground_nodes() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.ground_nodes",false]],"ground_nodes() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.ground_nodes",false]],"ground_pivot_a (pylinkage.synthesis.core.synthesisproblem attribute)":[[18,"pylinkage.synthesis.core.SynthesisProblem.ground_pivot_a",false]],"ground_pivot_d (pylinkage.synthesis.core.synthesisproblem attribute)":[[18,"pylinkage.synthesis.core.SynthesisProblem.ground_pivot_d",false]],"groundjoint (class in pylinkage.mechanism.joint)":[[11,"pylinkage.mechanism.joint.GroundJoint",false]],"groundlink (class in pylinkage.mechanism.link)":[[11,"pylinkage.mechanism.link.GroundLink",false]],"group_class (pylinkage.assur.groups.assurgroup property)":[[3,"pylinkage.assur.groups.AssurGroup.group_class",false]],"group_class (pylinkage.assur.groups.dyad property)":[[3,"pylinkage.assur.groups.Dyad.group_class",false]],"group_class (pylinkage.assur.groups.triad property)":[[3,"pylinkage.assur.groups.Triad.group_class",false]],"group_class (pylinkage.assur.signature.assursignature attribute)":[[3,"pylinkage.assur.signature.AssurSignature.group_class",false]],"group_index (pylinkage.synthesis.topology_types.groupsynthesisresult attribute)":[[18,"pylinkage.synthesis.topology_types.GroupSynthesisResult.group_index",false]],"group_results (pylinkage.synthesis.topology_types.nbarsolution attribute)":[[18,"pylinkage.synthesis.topology_types.NBarSolution.group_results",false]],"group_signature (pylinkage.synthesis.topology_types.groupsynthesisresult attribute)":[[18,"pylinkage.synthesis.topology_types.GroupSynthesisResult.group_signature",false]],"group_signatures (pylinkage.assur.analysis.structuralanalysis attribute)":[[3,"pylinkage.assur.analysis.StructuralAnalysis.group_signatures",false]],"groups (pylinkage.assur.decomposition.decompositionresult attribute)":[[3,"pylinkage.assur.decomposition.DecompositionResult.groups",false]],"groupsynthesisresult (class in pylinkage.synthesis.topology_types)":[[18,"pylinkage.synthesis.topology_types.GroupSynthesisResult",false]],"guide (pylinkage.dyads.translating_cam.translatingcamfollower attribute)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.guide",false]],"guide_angle (pylinkage.dyads.translating_cam.translatingcamfollower attribute)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.guide_angle",false]],"harmonicmotionlaw (class in pylinkage.cam.motion_laws)":[[5,"pylinkage.cam.motion_laws.HarmonicMotionLaw",false]],"has_nan_positions() (in module pylinkage.solver.simulation)":[[16,"pylinkage.solver.simulation.has_nan_positions",false]],"hierarchical_from_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.hierarchical_from_dict",false]],"hierarchical_from_json() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.hierarchical_from_json",false]],"hierarchical_to_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.hierarchical_to_dict",false]],"hierarchical_to_json() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.hierarchical_to_json",false]],"hierarchicallinkage (class in pylinkage.hypergraph.hierarchy)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage",false]],"hyperdegree() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.hyperdegree",false]],"hyperedge (class in pylinkage.hypergraph.core)":[[9,"pylinkage.hypergraph.core.Hyperedge",false]],"hyperedge_constraints (pylinkage.dimensions.dimensions attribute)":[[1,"pylinkage.dimensions.Dimensions.hyperedge_constraints",false]],"hyperedge_from_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.hyperedge_from_dict",false]],"hyperedge_neighbors() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.hyperedge_neighbors",false]],"hyperedge_to_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.hyperedge_to_dict",false]],"hyperedges (pylinkage.hypergraph.graph.hypergraphlinkage attribute)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.hyperedges",false]],"hypergraphlinkage (class in pylinkage.hypergraph.graph)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage",false]],"hypervolume() (pylinkage.optimization.collections.pareto.paretofront method)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.hypervolume",false]],"id (pylinkage.assur.graph.edge attribute)":[[3,"pylinkage.assur.graph.Edge.id",false]],"id (pylinkage.assur.graph.node attribute)":[[3,"pylinkage.assur.graph.Node.id",false]],"id (pylinkage.hypergraph.core.edge attribute)":[[9,"pylinkage.hypergraph.core.Edge.id",false]],"id (pylinkage.hypergraph.core.hyperedge attribute)":[[9,"pylinkage.hypergraph.core.Hyperedge.id",false]],"id (pylinkage.hypergraph.core.node attribute)":[[9,"pylinkage.hypergraph.core.Node.id",false]],"id (pylinkage.hypergraph.hierarchy.componentinstance attribute)":[[9,"pylinkage.hypergraph.hierarchy.ComponentInstance.id",false]],"id (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.id",false]],"id (pylinkage.mechanism.builder.pendingtracker attribute)":[[11,"pylinkage.mechanism.builder.PendingTracker.id",false]],"id (pylinkage.mechanism.builder.port attribute)":[[11,"pylinkage.mechanism.builder.Port.id",false]],"id (pylinkage.mechanism.builder.slideaxis attribute)":[[11,"pylinkage.mechanism.builder.SlideAxis.id",false]],"id (pylinkage.mechanism.joint.joint attribute)":[[11,"pylinkage.mechanism.joint.Joint.id",false]],"id (pylinkage.mechanism.link.link attribute)":[[11,"pylinkage.mechanism.link.Link.id",false]],"id (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.id",false]],"identify_dyad_type() (in module pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.identify_dyad_type",false]],"identify_group_type() (in module pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.identify_group_type",false]],"indeterminacy() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.indeterminacy",false]],"indeterminacy() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.indeterminacy",false]],"init_positions (pylinkage.optimization.collections.agent.agent property)":[[13,"pylinkage.optimization.collections.agent.Agent.init_positions",false]],"init_positions (pylinkage.optimization.collections.mutable_agent.mutableagent property)":[[13,"pylinkage.optimization.collections.mutable_agent.MutableAgent.init_positions",false]],"init_positions (pylinkage.optimization.collections.pareto.paretosolution property)":[[13,"pylinkage.optimization.collections.pareto.ParetoSolution.init_positions",false]],"initial_angle (pylinkage.actuators.arc_crank.arccrank attribute)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.initial_angle",false]],"initial_angle (pylinkage.actuators.crank.crank attribute)":[[2,"pylinkage.actuators.crank.Crank.initial_angle",false]],"initial_angle (pylinkage.dimensions.driverangle attribute)":[[1,"pylinkage.dimensions.DriverAngle.initial_angle",false]],"initial_angle (pylinkage.dyads.oscillating_cam.oscillatingcamfollower attribute)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.initial_angle",false]],"initial_angle (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.initial_angle",false]],"initial_angle (pylinkage.mechanism.link.arcdriverlink attribute)":[[11,"pylinkage.mechanism.link.ArcDriverLink.initial_angle",false]],"initial_angle (pylinkage.mechanism.link.driverlink attribute)":[[11,"pylinkage.mechanism.link.DriverLink.initial_angle",false]],"initial_extension (pylinkage.actuators.linear.linearactuator attribute)":[[2,"pylinkage.actuators.linear.LinearActuator.initial_extension",false]],"initial_positions (pylinkage.optimization.collections.mutable_agent.mutableagent attribute)":[[13,"pylinkage.optimization.collections.mutable_agent.MutableAgent.initial_positions",false]],"initial_positions (pylinkage.optimization.collections.pareto.paretosolution attribute)":[[13,"pylinkage.optimization.collections.pareto.ParetoSolution.initial_positions",false]],"instances (pylinkage.hypergraph.hierarchy.hierarchicallinkage attribute)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage.instances",false]],"interactive_linkage_plotly() (in module pylinkage.visualizer.plotly_viz)":[[21,"pylinkage.visualizer.plotly_viz.interactive_linkage_plotly",false]],"internal_edges (pylinkage.assur.groups.assurgroup attribute)":[[3,"pylinkage.assur.groups.AssurGroup.internal_edges",false]],"internal_nodes (pylinkage.assur.groups.assurgroup attribute)":[[3,"pylinkage.assur.groups.AssurGroup.internal_nodes",false]],"intersection() (in module pylinkage.geometry.secants)":[[8,"pylinkage.geometry.secants.intersection",false]],"is_acceptable (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.is_acceptable",false]],"is_arc_driver (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.is_arc_driver",false]],"is_complete (pylinkage.optimization.async_optimization.optimizationprogress attribute)":[[12,"pylinkage.optimization.async_optimization.OptimizationProgress.is_complete",false]],"is_crank_rocker() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.is_crank_rocker",false]],"is_defined() (pylinkage.mechanism.joint.joint method)":[[11,"pylinkage.mechanism.joint.Joint.is_defined",false]],"is_determinate (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.is_determinate",false]],"is_discrete (pylinkage.synthesis.core.burmestercurves attribute)":[[18,"pylinkage.synthesis.core.BurmesterCurves.is_discrete",false]],"is_driver (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.is_driver",false]],"is_grashof (pylinkage.synthesis.topology_types.qualitymetrics attribute)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics.is_grashof",false]],"is_grashof() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.is_grashof",false]],"is_ground (pylinkage.mechanism.joint.groundjoint attribute)":[[11,"pylinkage.mechanism.joint.GroundJoint.is_ground",false]],"is_ground (pylinkage.mechanism.link.groundlink attribute)":[[11,"pylinkage.mechanism.link.GroundLink.is_ground",false]],"is_ground_joint() (in module pylinkage.visualizer.symbols)":[[21,"pylinkage.visualizer.symbols.is_ground_joint",false]],"is_legacy_format() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.is_legacy_format",false]],"is_overconstrained (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.is_overconstrained",false]],"is_prismatic_like() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.is_prismatic_like",false]],"is_revolute_like() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.is_revolute_like",false]],"is_static_like() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.is_static_like",false]],"is_underconstrained (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.is_underconstrained",false]],"is_valid (pylinkage.assur.analysis.structuralanalysis property)":[[3,"pylinkage.assur.analysis.StructuralAnalysis.is_valid",false]],"is_valid() (pylinkage.assur.assur_mechanism.assurmechanism method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.is_valid",false]],"is_valid_mechanism (pylinkage.assur.analysis.mobilityresult property)":[[3,"pylinkage.assur.analysis.MobilityResult.is_valid_mechanism",false]],"isomer_to_canonical() (in module pylinkage.assur.signature)":[[3,"pylinkage.assur.signature.isomer_to_canonical",false]],"iterations (pylinkage.symbolic.optimization.optimizationresult attribute)":[[17,"pylinkage.symbolic.optimization.OptimizationResult.iterations",false]],"jacobian() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.jacobian",false]],"jacobian_theta() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.jacobian_theta",false]],"joint (class in pylinkage.mechanism.joint)":[[11,"pylinkage.mechanism.joint.Joint",false]],"joint_from_dict() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.joint_from_dict",false]],"joint_positions (pylinkage.synthesis.topology_types.groupsynthesisresult attribute)":[[18,"pylinkage.synthesis.topology_types.GroupSynthesisResult.joint_positions",false]],"joint_positions (pylinkage.synthesis.topology_types.nbarsolution attribute)":[[18,"pylinkage.synthesis.topology_types.NBarSolution.joint_positions",false]],"joint_signature (pylinkage.assur.groups.assurgroup property)":[[3,"pylinkage.assur.groups.AssurGroup.joint_signature",false]],"joint_signature (pylinkage.assur.groups.dyad property)":[[3,"pylinkage.assur.groups.Dyad.joint_signature",false]],"joint_signature (pylinkage.assur.groups.triad property)":[[3,"pylinkage.assur.groups.Triad.joint_signature",false]],"joint_to_dict() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.joint_to_dict",false]],"joint_type (pylinkage.assur.graph.node attribute)":[[3,"pylinkage.assur.graph.Node.joint_type",false]],"joint_type (pylinkage.hypergraph.core.node attribute)":[[9,"pylinkage.hypergraph.core.Node.joint_type",false]],"joint_type (pylinkage.mechanism.builder.connection attribute)":[[11,"pylinkage.mechanism.builder.Connection.joint_type",false]],"joint_type (pylinkage.mechanism.joint.groundjoint property)":[[11,"pylinkage.mechanism.joint.GroundJoint.joint_type",false]],"joint_type (pylinkage.mechanism.joint.joint property)":[[11,"pylinkage.mechanism.joint.Joint.joint_type",false]],"joint_type (pylinkage.mechanism.joint.prismaticjoint property)":[[11,"pylinkage.mechanism.joint.PrismaticJoint.joint_type",false]],"joint_type (pylinkage.mechanism.joint.revolutejoint property)":[[11,"pylinkage.mechanism.joint.RevoluteJoint.joint_type",false]],"joint_type (pylinkage.mechanism.joint.trackerjoint property)":[[11,"pylinkage.mechanism.joint.TrackerJoint.joint_type",false]],"joint_types (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.joint_types",false]],"jointprofile (class in pylinkage.visualizer.step_export)":[[21,"pylinkage.visualizer.step_export.JointProfile",false]],"joints (pylinkage.assur.signature.assursignature attribute)":[[3,"pylinkage.assur.signature.AssurSignature.joints",false]],"joints (pylinkage.mechanism.link.link attribute)":[[11,"pylinkage.mechanism.link.Link.joints",false]],"joints (pylinkage.mechanism.mechanism.mechanism attribute)":[[11,"pylinkage.mechanism.mechanism.Mechanism.joints",false]],"joints (pylinkage.symbolic.linkage.symboliclinkage attribute)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.joints",false]],"jointtype (class in pylinkage.mechanism.joint)":[[11,"pylinkage.mechanism.joint.JointType",false]],"kinematic_default_test() (in module pylinkage.linkage.analysis)":[[10,"pylinkage.linkage.analysis.kinematic_default_test",false]],"kinematic_maximization() (in module pylinkage.optimization.utils)":[[12,"pylinkage.optimization.utils.kinematic_maximization",false]],"kinematic_minimization() (in module pylinkage.optimization.utils)":[[12,"pylinkage.optimization.utils.kinematic_minimization",false]],"label_offset (pylinkage.visualizer.symbols.symbolspec attribute)":[[21,"pylinkage.visualizer.symbols.SymbolSpec.label_offset",false]],"length (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.length",false]],"length (pylinkage.mechanism.link.link property)":[[11,"pylinkage.mechanism.link.Link.length",false]],"length (pylinkage.visualizer.step_export.jointprofile attribute)":[[21,"pylinkage.visualizer.step_export.JointProfile.length",false]],"line (pylinkage.visualizer.symbols.linkstyle attribute)":[[21,"pylinkage.visualizer.symbols.LinkStyle.LINE",false]],"line1_anchor1 (pylinkage.dyads.pp.ppdyad attribute)":[[7,"pylinkage.dyads.pp.PPDyad.line1_anchor1",false]],"line1_anchor2 (pylinkage.dyads.pp.ppdyad attribute)":[[7,"pylinkage.dyads.pp.PPDyad.line1_anchor2",false]],"line2_anchor1 (pylinkage.dyads.pp.ppdyad attribute)":[[7,"pylinkage.dyads.pp.PPDyad.line2_anchor1",false]],"line2_anchor2 (pylinkage.dyads.pp.ppdyad attribute)":[[7,"pylinkage.dyads.pp.PPDyad.line2_anchor2",false]],"line2_node1 (pylinkage.assur.groups.dyad attribute)":[[3,"pylinkage.assur.groups.Dyad.line2_node1",false]],"line2_node2 (pylinkage.assur.groups.dyad attribute)":[[3,"pylinkage.assur.groups.Dyad.line2_node2",false]],"line_anchor1 (pylinkage.dyads.rrp.rrpdyad attribute)":[[7,"pylinkage.dyads.rrp.RRPDyad.line_anchor1",false]],"line_anchor2 (pylinkage.dyads.rrp.rrpdyad attribute)":[[7,"pylinkage.dyads.rrp.RRPDyad.line_anchor2",false]],"line_from_points() (in module pylinkage.geometry.core)":[[8,"pylinkage.geometry.core.line_from_points",false]],"line_line_intersection() (in module pylinkage.geometry.secants)":[[8,"pylinkage.geometry.secants.line_line_intersection",false]],"line_node1 (pylinkage.assur.groups.dyad attribute)":[[3,"pylinkage.assur.groups.Dyad.line_node1",false]],"line_node2 (pylinkage.assur.groups.dyad attribute)":[[3,"pylinkage.assur.groups.Dyad.line_node2",false]],"line_point (pylinkage.mechanism.joint.prismaticjoint attribute)":[[11,"pylinkage.mechanism.joint.PrismaticJoint.line_point",false]],"linear (pylinkage.visualizer.symbols.symboltype attribute)":[[21,"pylinkage.visualizer.symbols.SymbolType.LINEAR",false]],"linearactuator (class in pylinkage.actuators.linear)":[[2,"pylinkage.actuators.linear.LinearActuator",false]],"link (class in pylinkage.mechanism.link)":[[11,"pylinkage.mechanism.link.Link",false]],"link_assortment (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.link_assortment",false]],"link_from_dict() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.link_from_dict",false]],"link_length (pylinkage.synthesis.core.burmesterdyad property)":[[18,"pylinkage.synthesis.core.BurmesterDyad.link_length",false]],"link_lengths (pylinkage.synthesis.topology_types.nbarsolution attribute)":[[18,"pylinkage.synthesis.topology_types.NBarSolution.link_lengths",false]],"link_ratio (pylinkage.synthesis.topology_types.qualitymetrics attribute)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics.link_ratio",false]],"link_to_dict() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.link_to_dict",false]],"link_type (pylinkage.mechanism.link.arcdriverlink property)":[[11,"pylinkage.mechanism.link.ArcDriverLink.link_type",false]],"link_type (pylinkage.mechanism.link.driverlink property)":[[11,"pylinkage.mechanism.link.DriverLink.link_type",false]],"link_type (pylinkage.mechanism.link.groundlink property)":[[11,"pylinkage.mechanism.link.GroundLink.link_type",false]],"link_type (pylinkage.mechanism.link.link property)":[[11,"pylinkage.mechanism.link.Link.link_type",false]],"linkage (class in pylinkage.simulation.linkage)":[[15,"pylinkage.simulation.linkage.Linkage",false]],"linkage (pylinkage.optimization.co_optimization_types.cooptsolution attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptSolution.linkage",false]],"linkage (pylinkage.synthesis.topology_types.topologysolution attribute)":[[18,"pylinkage.synthesis.topology_types.TopologySolution.linkage",false]],"linkage_to_solver_data() (in module pylinkage.bridge.solver_conversion)":[[4,"pylinkage.bridge.solver_conversion.linkage_to_solver_data",false]],"linkage_to_synthesis_params() (in module pylinkage.synthesis.conversion)":[[18,"pylinkage.synthesis.conversion.linkage_to_synthesis_params",false]],"linkagegraph (class in pylinkage.assur.graph)":[[3,"pylinkage.assur.graph.LinkageGraph",false]],"linkageproblem (class in pylinkage.optimization.multi_objective)":[[12,"pylinkage.optimization.multi_objective.LinkageProblem",false]],"linkprofile (class in pylinkage.visualizer.step_export)":[[21,"pylinkage.visualizer.step_export.LinkProfile",false]],"links (pylinkage.mechanism.joint.joint property)":[[11,"pylinkage.mechanism.joint.Joint.links",false]],"links (pylinkage.mechanism.mechanism.mechanism attribute)":[[11,"pylinkage.mechanism.mechanism.Mechanism.links",false]],"linkstyle (class in pylinkage.visualizer.symbols)":[[21,"pylinkage.visualizer.symbols.LinkStyle",false]],"linktype (class in pylinkage.mechanism.link)":[[11,"pylinkage.mechanism.link.LinkType",false]],"load_builtin() (pylinkage.topology.catalog.topologycatalog class method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.load_builtin",false]],"load_catalog() (in module pylinkage.topology.catalog)":[[19,"pylinkage.topology.catalog.load_catalog",false]],"local_position (pylinkage.mechanism.builder.port attribute)":[[11,"pylinkage.mechanism.builder.Port.local_position",false]],"max_angle (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.max_angle",false]],"max_angle_step (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.max_angle_step",false]],"max_deviation (pylinkage.linkage.sensitivity.toleranceanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.max_deviation",false]],"max_deviation (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.max_deviation",false]],"max_links (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.max_links",false]],"max_orientation_candidates (in module pylinkage.synthesis.path_generation)":[[18,"pylinkage.synthesis.path_generation.MAX_ORIENTATION_CANDIDATES",false]],"max_position (pylinkage.linkage.transmission.strokeanalysis attribute)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.max_position",false]],"max_position_step (pylinkage.linkage.transmission.strokeanalysis attribute)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.max_position_step",false]],"mean_angle (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.mean_angle",false]],"mean_deviation (pylinkage.linkage.sensitivity.toleranceanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.mean_deviation",false]],"mean_position (pylinkage.linkage.transmission.strokeanalysis attribute)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.mean_position",false]],"mechanism (class in pylinkage.mechanism.mechanism)":[[11,"pylinkage.mechanism.mechanism.Mechanism",false]],"mechanism (pylinkage.assur.assur_mechanism.assurmechanism attribute)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.mechanism",false]],"mechanism_from_dict() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.mechanism_from_dict",false]],"mechanism_from_json() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.mechanism_from_json",false]],"mechanism_to_dict() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.mechanism_to_dict",false]],"mechanism_to_graph() (in module pylinkage.assur.mechanism_conversion)":[[3,"pylinkage.assur.mechanism_conversion.mechanism_to_graph",false]],"mechanism_to_json() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.mechanism_to_json",false]],"mechanismbuilder (class in pylinkage.mechanism.builder)":[[11,"pylinkage.mechanism.builder.MechanismBuilder",false]],"message (pylinkage.symbolic.optimization.optimizationresult attribute)":[[17,"pylinkage.symbolic.optimization.OptimizationResult.message",false]],"metrics (pylinkage.synthesis.topology_types.topologysolution attribute)":[[18,"pylinkage.synthesis.topology_types.TopologySolution.metrics",false]],"min_angle (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.min_angle",false]],"min_angle_step (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.min_angle_step",false]],"min_deviation (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.min_deviation",false]],"min_position (pylinkage.linkage.transmission.strokeanalysis attribute)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.min_position",false]],"min_position_step (pylinkage.linkage.transmission.strokeanalysis attribute)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.min_position_step",false]],"min_transmission_angle (pylinkage.synthesis.topology_types.qualitymetrics attribute)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics.min_transmission_angle",false]],"minimize_linkage() (in module pylinkage.optimization.scipy_optimize)":[[12,"pylinkage.optimization.scipy_optimize.minimize_linkage",false]],"minimize_linkage_async() (in module pylinkage.optimization.async_optimization)":[[12,"pylinkage.optimization.async_optimization.minimize_linkage_async",false]],"mixedchromosome (class in pylinkage.optimization.co_optimization_types)":[[12,"pylinkage.optimization.co_optimization_types.MixedChromosome",false]],"mixedcrossover (class in pylinkage.optimization.operators)":[[12,"pylinkage.optimization.operators.MixedCrossover",false]],"mixedmutation (class in pylinkage.optimization.operators)":[[12,"pylinkage.optimization.operators.MixedMutation",false]],"mobility (pylinkage.assur.analysis.structuralanalysis attribute)":[[3,"pylinkage.assur.analysis.StructuralAnalysis.mobility",false]],"mobility_status (pylinkage.assur.analysis.mobilityresult property)":[[3,"pylinkage.assur.analysis.MobilityResult.mobility_status",false]],"mobilityinfo (class in pylinkage.topology.analysis)":[[19,"pylinkage.topology.analysis.MobilityInfo",false]],"mobilityresult (class in pylinkage.assur.analysis)":[[3,"pylinkage.assur.analysis.MobilityResult",false]],"modifiedtrapezoidalmotionlaw (class in pylinkage.cam.motion_laws)":[[5,"pylinkage.cam.motion_laws.ModifiedTrapezoidalMotionLaw",false]],"module":[[1,"module-pylinkage.dimensions",false],[1,"module-pylinkage.exceptions",false],[2,"module-pylinkage.actuators.arc_crank",false],[2,"module-pylinkage.actuators.crank",false],[2,"module-pylinkage.actuators.linear",false],[3,"module-pylinkage.assur.analysis",false],[3,"module-pylinkage.assur.assur_mechanism",false],[3,"module-pylinkage.assur.decomposition",false],[3,"module-pylinkage.assur.graph",false],[3,"module-pylinkage.assur.groups",false],[3,"module-pylinkage.assur.hypergraph_conversion",false],[3,"module-pylinkage.assur.mechanism_conversion",false],[3,"module-pylinkage.assur.serialization",false],[3,"module-pylinkage.assur.signature",false],[4,"module-pylinkage.bridge.solver_conversion",false],[5,"module-pylinkage.cam.motion_laws",false],[5,"module-pylinkage.cam.profiles",false],[6,"module-pylinkage.components.ground",false],[6,"module-pylinkage.components.point_tracker",false],[7,"module-pylinkage.dyads.factory",false],[7,"module-pylinkage.dyads.fixed",false],[7,"module-pylinkage.dyads.oscillating_cam",false],[7,"module-pylinkage.dyads.pp",false],[7,"module-pylinkage.dyads.rrp",false],[7,"module-pylinkage.dyads.rrr",false],[7,"module-pylinkage.dyads.translating_cam",false],[8,"module-pylinkage.geometry.core",false],[8,"module-pylinkage.geometry.secants",false],[9,"module-pylinkage.hypergraph.core",false],[9,"module-pylinkage.hypergraph.graph",false],[9,"module-pylinkage.hypergraph.hierarchy",false],[9,"module-pylinkage.hypergraph.mechanism_conversion",false],[9,"module-pylinkage.hypergraph.serialization",false],[9,"module-pylinkage.hypergraph.sim_conversion",false],[10,"module-pylinkage.linkage.analysis",false],[10,"module-pylinkage.linkage.sensitivity",false],[10,"module-pylinkage.linkage.transmission",false],[11,"module-pylinkage.mechanism.builder",false],[11,"module-pylinkage.mechanism.factories",false],[11,"module-pylinkage.mechanism.joint",false],[11,"module-pylinkage.mechanism.link",false],[11,"module-pylinkage.mechanism.mechanism",false],[11,"module-pylinkage.mechanism.serialization",false],[12,"module-pylinkage.optimization.async_optimization",false],[12,"module-pylinkage.optimization.co_optimization_types",false],[12,"module-pylinkage.optimization.grid_search",false],[12,"module-pylinkage.optimization.mixed_variable",false],[12,"module-pylinkage.optimization.multi_objective",false],[12,"module-pylinkage.optimization.operators",false],[12,"module-pylinkage.optimization.particle_swarm",false],[12,"module-pylinkage.optimization.scipy_optimize",false],[12,"module-pylinkage.optimization.topology_neighborhood",false],[12,"module-pylinkage.optimization.utils",false],[12,"module-pylinkage.optimization.warm_start",false],[13,"module-pylinkage.optimization.collections.agent",false],[13,"module-pylinkage.optimization.collections.mutable_agent",false],[13,"module-pylinkage.optimization.collections.pareto",false],[15,"module-pylinkage.simulation.linkage",false],[16,"module-pylinkage.solver.acceleration",false],[16,"module-pylinkage.solver.groups",false],[16,"module-pylinkage.solver.joints",false],[16,"module-pylinkage.solver.simulation",false],[16,"module-pylinkage.solver.solve",false],[16,"module-pylinkage.solver.types",false],[16,"module-pylinkage.solver.velocity",false],[17,"module-pylinkage.symbolic.conversion",false],[17,"module-pylinkage.symbolic.geometry",false],[17,"module-pylinkage.symbolic.joints",false],[17,"module-pylinkage.symbolic.linkage",false],[17,"module-pylinkage.symbolic.optimization",false],[17,"module-pylinkage.symbolic.solver",false],[18,"module-pylinkage.synthesis.burmester",false],[18,"module-pylinkage.synthesis.conversion",false],[18,"module-pylinkage.synthesis.core",false],[18,"module-pylinkage.synthesis.function_generation",false],[18,"module-pylinkage.synthesis.generalized",false],[18,"module-pylinkage.synthesis.motion_generation",false],[18,"module-pylinkage.synthesis.multi_topology",false],[18,"module-pylinkage.synthesis.path_generation",false],[18,"module-pylinkage.synthesis.ranking",false],[18,"module-pylinkage.synthesis.six_bar",false],[18,"module-pylinkage.synthesis.topology_types",false],[18,"module-pylinkage.synthesis.utils",false],[19,"module-pylinkage.topology.analysis",false],[19,"module-pylinkage.topology.catalog",false],[19,"module-pylinkage.topology.enumeration",false],[19,"module-pylinkage.topology.isomorphism",false],[21,"module-pylinkage.visualizer.animated",false],[21,"module-pylinkage.visualizer.core",false],[21,"module-pylinkage.visualizer.drawsvg_viz",false],[21,"module-pylinkage.visualizer.dxf_export",false],[21,"module-pylinkage.visualizer.kinematics",false],[21,"module-pylinkage.visualizer.plotly_viz",false],[21,"module-pylinkage.visualizer.pso_plots",false],[21,"module-pylinkage.visualizer.static",false],[21,"module-pylinkage.visualizer.step_export",false],[21,"module-pylinkage.visualizer.symbols",false]],"most_sensitive (pylinkage.linkage.sensitivity.sensitivityanalysis property)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.most_sensitive",false]],"motion_generation() (in module pylinkage.synthesis.motion_generation)":[[18,"pylinkage.synthesis.motion_generation.motion_generation",false]],"motion_generation_3_poses() (in module pylinkage.synthesis.motion_generation)":[[18,"pylinkage.synthesis.motion_generation.motion_generation_3_poses",false]],"motion_law (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.motion_law",false]],"motionlaw (class in pylinkage.cam.motion_laws)":[[5,"pylinkage.cam.motion_laws.MotionLaw",false]],"motor_joint (pylinkage.mechanism.link.arcdriverlink attribute)":[[11,"pylinkage.mechanism.link.ArcDriverLink.motor_joint",false]],"motor_joint (pylinkage.mechanism.link.driverlink attribute)":[[11,"pylinkage.mechanism.link.DriverLink.motor_joint",false]],"motor_port (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.motor_port",false]],"movement_bounding_box() (in module pylinkage.linkage.analysis)":[[10,"pylinkage.linkage.analysis.movement_bounding_box",false]],"multi_objective_optimization() (in module pylinkage.optimization.multi_objective)":[[12,"pylinkage.optimization.multi_objective.multi_objective_optimization",false]],"mutableagent (class in pylinkage.optimization.collections.mutable_agent)":[[13,"pylinkage.optimization.collections.mutable_agent.MutableAgent",false]],"n_constraints (pylinkage.solver.types.solverdata property)":[[16,"pylinkage.solver.types.SolverData.n_constraints",false]],"n_evaluations (pylinkage.optimization.co_optimization_types.cooptimizationresult attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationResult.n_evaluations",false]],"n_generations (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.n_generations",false]],"n_joints (pylinkage.solver.types.solverdata property)":[[16,"pylinkage.solver.types.SolverData.n_joints",false]],"n_objectives (pylinkage.optimization.collections.pareto.paretofront property)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.n_objectives",false]],"name (pylinkage.assur.graph.linkagegraph attribute)":[[3,"pylinkage.assur.graph.LinkageGraph.name",false]],"name (pylinkage.assur.graph.node attribute)":[[3,"pylinkage.assur.graph.Node.name",false]],"name (pylinkage.cam.profiles.camprofile attribute)":[[5,"pylinkage.cam.profiles.CamProfile.name",false]],"name (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.name",false]],"name (pylinkage.cam.profiles.pointarrayprofile attribute)":[[5,"pylinkage.cam.profiles.PointArrayProfile.name",false]],"name (pylinkage.dimensions.dimensions attribute)":[[1,"pylinkage.dimensions.Dimensions.name",false]],"name (pylinkage.hypergraph.core.hyperedge attribute)":[[9,"pylinkage.hypergraph.core.Hyperedge.name",false]],"name (pylinkage.hypergraph.core.node attribute)":[[9,"pylinkage.hypergraph.core.Node.name",false]],"name (pylinkage.hypergraph.graph.hypergraphlinkage attribute)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.name",false]],"name (pylinkage.hypergraph.hierarchy.componentinstance attribute)":[[9,"pylinkage.hypergraph.hierarchy.ComponentInstance.name",false]],"name (pylinkage.hypergraph.hierarchy.hierarchicallinkage attribute)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage.name",false]],"name (pylinkage.mechanism.builder.mechanismbuilder attribute)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.name",false]],"name (pylinkage.mechanism.joint.joint attribute)":[[11,"pylinkage.mechanism.joint.Joint.name",false]],"name (pylinkage.mechanism.link.link attribute)":[[11,"pylinkage.mechanism.link.Link.name",false]],"name (pylinkage.mechanism.mechanism.mechanism attribute)":[[11,"pylinkage.mechanism.mechanism.Mechanism.name",false]],"name (pylinkage.simulation.linkage.linkage attribute)":[[15,"pylinkage.simulation.linkage.Linkage.name",false]],"name (pylinkage.symbolic.joints.symjoint attribute)":[[17,"pylinkage.symbolic.joints.SymJoint.name",false]],"name (pylinkage.symbolic.linkage.symboliclinkage attribute)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.name",false]],"name (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.name",false]],"nbar_solution_to_linkage() (in module pylinkage.synthesis.conversion)":[[18,"pylinkage.synthesis.conversion.nbar_solution_to_linkage",false]],"nbarsolution (class in pylinkage.synthesis.topology_types)":[[18,"pylinkage.synthesis.topology_types.NBarSolution",false]],"neighbors() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.neighbors",false]],"neighbors() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.neighbors",false]],"node (class in pylinkage.assur.graph)":[[3,"pylinkage.assur.graph.Node",false]],"node (class in pylinkage.hypergraph.core)":[[9,"pylinkage.hypergraph.core.Node",false]],"node_from_dict() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.node_from_dict",false]],"node_from_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.node_from_dict",false]],"node_positions (pylinkage.dimensions.dimensions attribute)":[[1,"pylinkage.dimensions.Dimensions.node_positions",false]],"node_to_dict() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.node_to_dict",false]],"node_to_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.node_to_dict",false]],"nodes (pylinkage.assur.graph.linkagegraph attribute)":[[3,"pylinkage.assur.graph.LinkageGraph.nodes",false]],"nodes (pylinkage.hypergraph.core.hyperedge attribute)":[[9,"pylinkage.hypergraph.core.Hyperedge.nodes",false]],"nodes (pylinkage.hypergraph.graph.hypergraphlinkage attribute)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.nodes",false]],"nominal_path (pylinkage.linkage.sensitivity.toleranceanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.nominal_path",false]],"non_grashof (pylinkage.synthesis.utils.grashoftype attribute)":[[18,"pylinkage.synthesis.utils.GrashofType.NON_GRASHOF",false]],"norm() (in module pylinkage.geometry.core)":[[8,"pylinkage.geometry.core.norm",false]],"normalize_angle() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.normalize_angle",false]],"normalize_data() (in module pylinkage.visualizer.pso_plots)":[[21,"pylinkage.visualizer.pso_plots.normalize_data",false]],"notcompletelydefinederror":[[1,"pylinkage.exceptions.NotCompletelyDefinedError",false]],"num_1dof_joints (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.num_1dof_joints",false]],"num_2dof_joints (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.num_2dof_joints",false]],"num_anchor_nodes (pylinkage.assur.signature.assursignature property)":[[3,"pylinkage.assur.signature.AssurSignature.num_anchor_nodes",false]],"num_assur_groups (pylinkage.assur.analysis.structuralanalysis attribute)":[[3,"pylinkage.assur.analysis.StructuralAnalysis.num_assur_groups",false]],"num_assur_groups (pylinkage.assur.assur_mechanism.assurmechanism property)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.num_assur_groups",false]],"num_driver_joints (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.num_driver_joints",false]],"num_driver_nodes (pylinkage.assur.assur_mechanism.assurmechanism property)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.num_driver_nodes",false]],"num_full_joints (pylinkage.topology.analysis.mobilityinfo attribute)":[[19,"pylinkage.topology.analysis.MobilityInfo.num_full_joints",false]],"num_ground_joints (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.num_ground_joints",false]],"num_ground_nodes (pylinkage.assur.assur_mechanism.assurmechanism property)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.num_ground_nodes",false]],"num_half_joints (pylinkage.topology.analysis.mobilityinfo attribute)":[[19,"pylinkage.topology.analysis.MobilityInfo.num_half_joints",false]],"num_internal_nodes (pylinkage.assur.signature.assursignature property)":[[3,"pylinkage.assur.signature.AssurSignature.num_internal_nodes",false]],"num_joints (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.num_joints",false]],"num_joints (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.num_joints",false]],"num_links (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.num_links",false]],"num_links (pylinkage.assur.signature.assursignature property)":[[3,"pylinkage.assur.signature.AssurSignature.num_links",false]],"num_links (pylinkage.synthesis.topology_types.qualitymetrics attribute)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics.num_links",false]],"num_links (pylinkage.topology.analysis.mobilityinfo attribute)":[[19,"pylinkage.topology.analysis.MobilityInfo.num_links",false]],"num_links (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.num_links",false]],"num_precision_positions (pylinkage.synthesis.core.synthesisproblem property)":[[18,"pylinkage.synthesis.core.SynthesisProblem.num_precision_positions",false]],"objective_names (pylinkage.optimization.collections.pareto.paretofront attribute)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.objective_names",false]],"objective_value (pylinkage.symbolic.optimization.optimizationresult attribute)":[[17,"pylinkage.symbolic.optimization.OptimizationResult.objective_value",false]],"omega_values (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.omega_values",false]],"operation (pylinkage.optimization.topology_neighborhood.topologyneighbor attribute)":[[12,"pylinkage.optimization.topology_neighborhood.TopologyNeighbor.operation",false]],"optimizationerror":[[1,"pylinkage.exceptions.OptimizationError",false]],"optimizationprogress (class in pylinkage.optimization.async_optimization)":[[12,"pylinkage.optimization.async_optimization.OptimizationProgress",false]],"optimizationresult (class in pylinkage.symbolic.optimization)":[[17,"pylinkage.symbolic.optimization.OptimizationResult",false]],"optimize() (pylinkage.symbolic.optimization.symbolicoptimizer method)":[[17,"pylinkage.symbolic.optimization.SymbolicOptimizer.optimize",false]],"order (pylinkage.mechanism.link.link property)":[[11,"pylinkage.mechanism.link.Link.order",false]],"oscillatingcamfollower (class in pylinkage.dyads.oscillating_cam)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower",false]],"other_joint() (pylinkage.mechanism.link.link method)":[[11,"pylinkage.mechanism.link.Link.other_joint",false]],"other_node() (pylinkage.assur.graph.edge method)":[[3,"pylinkage.assur.graph.Edge.other_node",false]],"other_node() (pylinkage.hypergraph.core.edge method)":[[9,"pylinkage.hypergraph.core.Edge.other_node",false]],"output (pylinkage.actuators.arc_crank.arccrank property)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.output",false]],"output (pylinkage.actuators.crank.crank property)":[[2,"pylinkage.actuators.crank.Crank.output",false]],"output (pylinkage.actuators.linear.linearactuator property)":[[2,"pylinkage.actuators.linear.LinearActuator.output",false]],"output (pylinkage.dyads.oscillating_cam.oscillatingcamfollower property)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.output",false]],"output (pylinkage.dyads.translating_cam.translatingcamfollower property)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.output",false]],"output_cloud (pylinkage.linkage.sensitivity.toleranceanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.output_cloud",false]],"output_joint (pylinkage.mechanism.link.arcdriverlink property)":[[11,"pylinkage.mechanism.link.ArcDriverLink.output_joint",false]],"output_joint (pylinkage.mechanism.link.driverlink property)":[[11,"pylinkage.mechanism.link.DriverLink.output_joint",false]],"overall_score (pylinkage.synthesis.topology_types.qualitymetrics attribute)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics.overall_score",false]],"parallel_coordinates_plot() (in module pylinkage.visualizer.pso_plots)":[[21,"pylinkage.visualizer.pso_plots.parallel_coordinates_plot",false]],"parameter (pylinkage.synthesis.core.burmestercurves attribute)":[[18,"pylinkage.synthesis.core.BurmesterCurves.parameter",false]],"parameters (pylinkage.symbolic.joints.symcrank property)":[[17,"pylinkage.symbolic.joints.SymCrank.parameters",false]],"parameters (pylinkage.symbolic.joints.symjoint property)":[[17,"pylinkage.symbolic.joints.SymJoint.parameters",false]],"parameters (pylinkage.symbolic.joints.symrevolute property)":[[17,"pylinkage.symbolic.joints.SymRevolute.parameters",false]],"parameters (pylinkage.symbolic.linkage.symboliclinkage property)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.parameters",false]],"params (pylinkage.symbolic.optimization.optimizationresult attribute)":[[17,"pylinkage.symbolic.optimization.OptimizationResult.params",false]],"parent0 (pylinkage.symbolic.joints.symjoint attribute)":[[17,"pylinkage.symbolic.joints.SymJoint.parent0",false]],"parent1 (pylinkage.symbolic.joints.symjoint attribute)":[[17,"pylinkage.symbolic.joints.SymJoint.parent1",false]],"parent_indices (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.parent_indices",false]],"pareto_front (pylinkage.optimization.co_optimization_types.cooptimizationresult attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationResult.pareto_front",false]],"paretofront (class in pylinkage.optimization.collections.pareto)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront",false]],"paretosolution (class in pylinkage.optimization.collections.pareto)":[[13,"pylinkage.optimization.collections.pareto.ParetoSolution",false]],"parse_isomer_signature() (in module pylinkage.assur.signature)":[[3,"pylinkage.assur.signature.parse_isomer_signature",false]],"parse_signature() (in module pylinkage.assur.signature)":[[3,"pylinkage.assur.signature.parse_signature",false]],"particle_swarm_optimization() (in module pylinkage.optimization.particle_swarm)":[[12,"pylinkage.optimization.particle_swarm.particle_swarm_optimization",false]],"particle_swarm_optimization_async() (in module pylinkage.optimization.async_optimization)":[[12,"pylinkage.optimization.async_optimization.particle_swarm_optimization_async",false]],"path_accuracy (pylinkage.synthesis.topology_types.qualitymetrics attribute)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics.path_accuracy",false]],"path_generation() (in module pylinkage.synthesis.path_generation)":[[18,"pylinkage.synthesis.path_generation.path_generation",false]],"path_generation_with_timing() (in module pylinkage.synthesis.path_generation)":[[18,"pylinkage.synthesis.path_generation.path_generation_with_timing",false]],"pendinglink (class in pylinkage.mechanism.builder)":[[11,"pylinkage.mechanism.builder.PendingLink",false]],"pendingtracker (class in pylinkage.mechanism.builder)":[[11,"pylinkage.mechanism.builder.PendingTracker",false]],"perturbation_delta (pylinkage.linkage.sensitivity.sensitivityanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.perturbation_delta",false]],"perturbed_path_metrics (pylinkage.linkage.sensitivity.sensitivityanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.perturbed_path_metrics",false]],"perturbed_transmission (pylinkage.linkage.sensitivity.sensitivityanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.perturbed_transmission",false]],"pitch_radius() (pylinkage.cam.profiles.camprofile method)":[[5,"pylinkage.cam.profiles.CamProfile.pitch_radius",false]],"pivot_anchor (pylinkage.dyads.oscillating_cam.oscillatingcamfollower attribute)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.pivot_anchor",false]],"plot() (pylinkage.linkage.transmission.transmissionangleanalysis method)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.plot",false]],"plot() (pylinkage.optimization.collections.pareto.paretofront method)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.plot",false]],"plot_acceleration_vectors() (in module pylinkage.visualizer.kinematics)":[[21,"pylinkage.visualizer.kinematics.plot_acceleration_vectors",false]],"plot_cloud() (pylinkage.linkage.sensitivity.toleranceanalysis method)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.plot_cloud",false]],"plot_kinematic_linkage() (in module pylinkage.visualizer.animated)":[[21,"pylinkage.visualizer.animated.plot_kinematic_linkage",false]],"plot_kinematics_frame() (in module pylinkage.visualizer.kinematics)":[[21,"pylinkage.visualizer.kinematics.plot_kinematics_frame",false]],"plot_linkage_dxf() (in module pylinkage.visualizer.dxf_export)":[[21,"pylinkage.visualizer.dxf_export.plot_linkage_dxf",false]],"plot_linkage_plotly() (in module pylinkage.visualizer.plotly_viz)":[[21,"pylinkage.visualizer.plotly_viz.plot_linkage_plotly",false]],"plot_linkage_plotly_with_velocity() (in module pylinkage.visualizer.plotly_viz)":[[21,"pylinkage.visualizer.plotly_viz.plot_linkage_plotly_with_velocity",false]],"plot_linkage_svg() (in module pylinkage.visualizer.drawsvg_viz)":[[21,"pylinkage.visualizer.drawsvg_viz.plot_linkage_svg",false]],"plot_linkage_svg_with_velocity() (in module pylinkage.visualizer.drawsvg_viz)":[[21,"pylinkage.visualizer.drawsvg_viz.plot_linkage_svg_with_velocity",false]],"plot_static_linkage() (in module pylinkage.visualizer.static)":[[21,"pylinkage.visualizer.static.plot_static_linkage",false]],"plot_velocity_vectors() (in module pylinkage.visualizer.kinematics)":[[21,"pylinkage.visualizer.kinematics.plot_velocity_vectors",false]],"point (pylinkage.mechanism.builder.slideaxis attribute)":[[11,"pylinkage.mechanism.builder.SlideAxis.point",false]],"point_to_complex() (in module pylinkage.synthesis.burmester)":[[18,"pylinkage.synthesis.burmester.point_to_complex",false]],"point_to_complex() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.point_to_complex",false]],"pointarrayprofile (class in pylinkage.cam.profiles)":[[5,"pylinkage.cam.profiles.PointArrayProfile",false]],"pointtracker (class in pylinkage.components.point_tracker)":[[6,"pylinkage.components.point_tracker.PointTracker",false]],"polynomial_345() (in module pylinkage.cam.motion_laws)":[[5,"pylinkage.cam.motion_laws.polynomial_345",false]],"polynomial_4567() (in module pylinkage.cam.motion_laws)":[[5,"pylinkage.cam.motion_laws.polynomial_4567",false]],"polynomialmotionlaw (class in pylinkage.cam.motion_laws)":[[5,"pylinkage.cam.motion_laws.PolynomialMotionLaw",false]],"pop_size (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.pop_size",false]],"port (class in pylinkage.mechanism.builder)":[[11,"pylinkage.mechanism.builder.Port",false]],"port (pylinkage.mechanism.builder.prismaticconnection attribute)":[[11,"pylinkage.mechanism.builder.PrismaticConnection.port",false]],"port1 (pylinkage.mechanism.builder.connection attribute)":[[11,"pylinkage.mechanism.builder.Connection.port1",false]],"port2 (pylinkage.mechanism.builder.connection attribute)":[[11,"pylinkage.mechanism.builder.Connection.port2",false]],"port_geometry (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.port_geometry",false]],"ports (pylinkage.hypergraph.hierarchy.componentinstance attribute)":[[9,"pylinkage.hypergraph.hierarchy.ComponentInstance.ports",false]],"ports (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.ports",false]],"poses (pylinkage.synthesis.core.synthesisproblem attribute)":[[18,"pylinkage.synthesis.core.SynthesisProblem.poses",false]],"position (pylinkage.mechanism.joint.joint attribute)":[[11,"pylinkage.mechanism.joint.Joint.position",false]],"position_expr() (pylinkage.symbolic.joints.symcrank method)":[[17,"pylinkage.symbolic.joints.SymCrank.position_expr",false]],"position_expr() (pylinkage.symbolic.joints.symjoint method)":[[17,"pylinkage.symbolic.joints.SymJoint.position_expr",false]],"position_expr() (pylinkage.symbolic.joints.symrevolute method)":[[17,"pylinkage.symbolic.joints.SymRevolute.position_expr",false]],"position_expr() (pylinkage.symbolic.joints.symstatic method)":[[17,"pylinkage.symbolic.joints.SymStatic.position_expr",false]],"position_std (pylinkage.linkage.sensitivity.toleranceanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.position_std",false]],"positions (pylinkage.linkage.transmission.strokeanalysis attribute)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.positions",false]],"positions (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.positions",false]],"ppdyad (class in pylinkage.dyads.pp)":[[7,"pylinkage.dyads.pp.PPDyad",false]],"precision_indices (pylinkage.synthesis.topology_types.groupsynthesisresult attribute)":[[18,"pylinkage.synthesis.topology_types.GroupSynthesisResult.precision_indices",false]],"precision_points (pylinkage.synthesis.core.synthesisproblem attribute)":[[18,"pylinkage.synthesis.core.SynthesisProblem.precision_points",false]],"pressure_angle() (pylinkage.cam.profiles.camprofile method)":[[5,"pylinkage.cam.profiles.CamProfile.pressure_angle",false]],"prismatic (pylinkage.mechanism.joint.jointtype attribute)":[[11,"pylinkage.mechanism.joint.JointType.PRISMATIC",false]],"prismaticconnection (class in pylinkage.mechanism.builder)":[[11,"pylinkage.mechanism.builder.PrismaticConnection",false]],"prismaticjoint (class in pylinkage.mechanism.joint)":[[11,"pylinkage.mechanism.joint.PrismaticJoint",false]],"problem (pylinkage.optimization.multi_objective.linkageproblem property)":[[12,"pylinkage.optimization.multi_objective.LinkageProblem.problem",false]],"problem (pylinkage.synthesis.core.synthesisresult attribute)":[[18,"pylinkage.synthesis.core.SynthesisResult.problem",false]],"profile (pylinkage.dyads.oscillating_cam.oscillatingcamfollower attribute)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.profile",false]],"profile (pylinkage.dyads.translating_cam.translatingcamfollower attribute)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.profile",false]],"profile_type (pylinkage.cam.motion_laws.cycloidalmotionlaw property)":[[5,"pylinkage.cam.motion_laws.CycloidalMotionLaw.profile_type",false]],"profile_type (pylinkage.cam.motion_laws.harmonicmotionlaw property)":[[5,"pylinkage.cam.motion_laws.HarmonicMotionLaw.profile_type",false]],"profile_type (pylinkage.cam.motion_laws.modifiedtrapezoidalmotionlaw property)":[[5,"pylinkage.cam.motion_laws.ModifiedTrapezoidalMotionLaw.profile_type",false]],"profile_type (pylinkage.cam.motion_laws.motionlaw property)":[[5,"pylinkage.cam.motion_laws.MotionLaw.profile_type",false]],"profile_type (pylinkage.cam.motion_laws.polynomialmotionlaw property)":[[5,"pylinkage.cam.motion_laws.PolynomialMotionLaw.profile_type",false]],"progress_fraction (pylinkage.optimization.async_optimization.optimizationprogress property)":[[12,"pylinkage.optimization.async_optimization.OptimizationProgress.progress_fraction",false]],"progresscallback (in module pylinkage.optimization.async_optimization)":[[12,"pylinkage.optimization.async_optimization.ProgressCallback",false]],"pylinkage.actuators.arc_crank":[[2,"module-pylinkage.actuators.arc_crank",false]],"pylinkage.actuators.crank":[[2,"module-pylinkage.actuators.crank",false]],"pylinkage.actuators.linear":[[2,"module-pylinkage.actuators.linear",false]],"pylinkage.assur.analysis":[[3,"module-pylinkage.assur.analysis",false]],"pylinkage.assur.assur_mechanism":[[3,"module-pylinkage.assur.assur_mechanism",false]],"pylinkage.assur.decomposition":[[3,"module-pylinkage.assur.decomposition",false]],"pylinkage.assur.graph":[[3,"module-pylinkage.assur.graph",false]],"pylinkage.assur.groups":[[3,"module-pylinkage.assur.groups",false]],"pylinkage.assur.hypergraph_conversion":[[3,"module-pylinkage.assur.hypergraph_conversion",false]],"pylinkage.assur.mechanism_conversion":[[3,"module-pylinkage.assur.mechanism_conversion",false]],"pylinkage.assur.serialization":[[3,"module-pylinkage.assur.serialization",false]],"pylinkage.assur.signature":[[3,"module-pylinkage.assur.signature",false]],"pylinkage.bridge.solver_conversion":[[4,"module-pylinkage.bridge.solver_conversion",false]],"pylinkage.cam.motion_laws":[[5,"module-pylinkage.cam.motion_laws",false]],"pylinkage.cam.profiles":[[5,"module-pylinkage.cam.profiles",false]],"pylinkage.components.ground":[[6,"module-pylinkage.components.ground",false]],"pylinkage.components.point_tracker":[[6,"module-pylinkage.components.point_tracker",false]],"pylinkage.dimensions":[[1,"module-pylinkage.dimensions",false]],"pylinkage.dyads.factory":[[7,"module-pylinkage.dyads.factory",false]],"pylinkage.dyads.fixed":[[7,"module-pylinkage.dyads.fixed",false]],"pylinkage.dyads.oscillating_cam":[[7,"module-pylinkage.dyads.oscillating_cam",false]],"pylinkage.dyads.pp":[[7,"module-pylinkage.dyads.pp",false]],"pylinkage.dyads.rrp":[[7,"module-pylinkage.dyads.rrp",false]],"pylinkage.dyads.rrr":[[7,"module-pylinkage.dyads.rrr",false]],"pylinkage.dyads.translating_cam":[[7,"module-pylinkage.dyads.translating_cam",false]],"pylinkage.exceptions":[[1,"module-pylinkage.exceptions",false]],"pylinkage.geometry.core":[[8,"module-pylinkage.geometry.core",false]],"pylinkage.geometry.secants":[[8,"module-pylinkage.geometry.secants",false]],"pylinkage.hypergraph.core":[[9,"module-pylinkage.hypergraph.core",false]],"pylinkage.hypergraph.graph":[[9,"module-pylinkage.hypergraph.graph",false]],"pylinkage.hypergraph.hierarchy":[[9,"module-pylinkage.hypergraph.hierarchy",false]],"pylinkage.hypergraph.mechanism_conversion":[[9,"module-pylinkage.hypergraph.mechanism_conversion",false]],"pylinkage.hypergraph.serialization":[[9,"module-pylinkage.hypergraph.serialization",false]],"pylinkage.hypergraph.sim_conversion":[[9,"module-pylinkage.hypergraph.sim_conversion",false]],"pylinkage.linkage.analysis":[[10,"module-pylinkage.linkage.analysis",false]],"pylinkage.linkage.sensitivity":[[10,"module-pylinkage.linkage.sensitivity",false]],"pylinkage.linkage.transmission":[[10,"module-pylinkage.linkage.transmission",false]],"pylinkage.mechanism.builder":[[11,"module-pylinkage.mechanism.builder",false]],"pylinkage.mechanism.factories":[[11,"module-pylinkage.mechanism.factories",false]],"pylinkage.mechanism.joint":[[11,"module-pylinkage.mechanism.joint",false]],"pylinkage.mechanism.link":[[11,"module-pylinkage.mechanism.link",false]],"pylinkage.mechanism.mechanism":[[11,"module-pylinkage.mechanism.mechanism",false]],"pylinkage.mechanism.serialization":[[11,"module-pylinkage.mechanism.serialization",false]],"pylinkage.optimization.async_optimization":[[12,"module-pylinkage.optimization.async_optimization",false]],"pylinkage.optimization.co_optimization_types":[[12,"module-pylinkage.optimization.co_optimization_types",false]],"pylinkage.optimization.collections.agent":[[13,"module-pylinkage.optimization.collections.agent",false]],"pylinkage.optimization.collections.mutable_agent":[[13,"module-pylinkage.optimization.collections.mutable_agent",false]],"pylinkage.optimization.collections.pareto":[[13,"module-pylinkage.optimization.collections.pareto",false]],"pylinkage.optimization.grid_search":[[12,"module-pylinkage.optimization.grid_search",false]],"pylinkage.optimization.mixed_variable":[[12,"module-pylinkage.optimization.mixed_variable",false]],"pylinkage.optimization.multi_objective":[[12,"module-pylinkage.optimization.multi_objective",false]],"pylinkage.optimization.operators":[[12,"module-pylinkage.optimization.operators",false]],"pylinkage.optimization.particle_swarm":[[12,"module-pylinkage.optimization.particle_swarm",false]],"pylinkage.optimization.scipy_optimize":[[12,"module-pylinkage.optimization.scipy_optimize",false]],"pylinkage.optimization.topology_neighborhood":[[12,"module-pylinkage.optimization.topology_neighborhood",false]],"pylinkage.optimization.utils":[[12,"module-pylinkage.optimization.utils",false]],"pylinkage.optimization.warm_start":[[12,"module-pylinkage.optimization.warm_start",false]],"pylinkage.simulation.linkage":[[15,"module-pylinkage.simulation.linkage",false]],"pylinkage.solver.acceleration":[[16,"module-pylinkage.solver.acceleration",false]],"pylinkage.solver.groups":[[16,"module-pylinkage.solver.groups",false]],"pylinkage.solver.joints":[[16,"module-pylinkage.solver.joints",false]],"pylinkage.solver.simulation":[[16,"module-pylinkage.solver.simulation",false]],"pylinkage.solver.solve":[[16,"module-pylinkage.solver.solve",false]],"pylinkage.solver.types":[[16,"module-pylinkage.solver.types",false]],"pylinkage.solver.velocity":[[16,"module-pylinkage.solver.velocity",false]],"pylinkage.symbolic.conversion":[[17,"module-pylinkage.symbolic.conversion",false]],"pylinkage.symbolic.geometry":[[17,"module-pylinkage.symbolic.geometry",false]],"pylinkage.symbolic.joints":[[17,"module-pylinkage.symbolic.joints",false]],"pylinkage.symbolic.linkage":[[17,"module-pylinkage.symbolic.linkage",false]],"pylinkage.symbolic.optimization":[[17,"module-pylinkage.symbolic.optimization",false]],"pylinkage.symbolic.solver":[[17,"module-pylinkage.symbolic.solver",false]],"pylinkage.synthesis.burmester":[[18,"module-pylinkage.synthesis.burmester",false]],"pylinkage.synthesis.conversion":[[18,"module-pylinkage.synthesis.conversion",false]],"pylinkage.synthesis.core":[[18,"module-pylinkage.synthesis.core",false]],"pylinkage.synthesis.function_generation":[[18,"module-pylinkage.synthesis.function_generation",false]],"pylinkage.synthesis.generalized":[[18,"module-pylinkage.synthesis.generalized",false]],"pylinkage.synthesis.motion_generation":[[18,"module-pylinkage.synthesis.motion_generation",false]],"pylinkage.synthesis.multi_topology":[[18,"module-pylinkage.synthesis.multi_topology",false]],"pylinkage.synthesis.path_generation":[[18,"module-pylinkage.synthesis.path_generation",false]],"pylinkage.synthesis.ranking":[[18,"module-pylinkage.synthesis.ranking",false]],"pylinkage.synthesis.six_bar":[[18,"module-pylinkage.synthesis.six_bar",false]],"pylinkage.synthesis.topology_types":[[18,"module-pylinkage.synthesis.topology_types",false]],"pylinkage.synthesis.utils":[[18,"module-pylinkage.synthesis.utils",false]],"pylinkage.topology.analysis":[[19,"module-pylinkage.topology.analysis",false]],"pylinkage.topology.catalog":[[19,"module-pylinkage.topology.catalog",false]],"pylinkage.topology.enumeration":[[19,"module-pylinkage.topology.enumeration",false]],"pylinkage.topology.isomorphism":[[19,"module-pylinkage.topology.isomorphism",false]],"pylinkage.visualizer.animated":[[21,"module-pylinkage.visualizer.animated",false]],"pylinkage.visualizer.core":[[21,"module-pylinkage.visualizer.core",false]],"pylinkage.visualizer.drawsvg_viz":[[21,"module-pylinkage.visualizer.drawsvg_viz",false]],"pylinkage.visualizer.dxf_export":[[21,"module-pylinkage.visualizer.dxf_export",false]],"pylinkage.visualizer.kinematics":[[21,"module-pylinkage.visualizer.kinematics",false]],"pylinkage.visualizer.plotly_viz":[[21,"module-pylinkage.visualizer.plotly_viz",false]],"pylinkage.visualizer.pso_plots":[[21,"module-pylinkage.visualizer.pso_plots",false]],"pylinkage.visualizer.static":[[21,"module-pylinkage.visualizer.static",false]],"pylinkage.visualizer.step_export":[[21,"module-pylinkage.visualizer.step_export",false]],"pylinkage.visualizer.symbols":[[21,"module-pylinkage.visualizer.symbols",false]],"qualitymetrics (class in pylinkage.synthesis.topology_types)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics",false]],"quaternary (pylinkage.mechanism.link.linktype attribute)":[[11,"pylinkage.mechanism.link.LinkType.QUATERNARY",false]],"r (pylinkage.symbolic.joints.symcrank attribute)":[[17,"pylinkage.symbolic.joints.SymCrank.r",false]],"r0 (pylinkage.symbolic.joints.symrevolute attribute)":[[17,"pylinkage.symbolic.joints.SymRevolute.r0",false]],"r1 (pylinkage.symbolic.joints.symrevolute attribute)":[[17,"pylinkage.symbolic.joints.SymRevolute.r1",false]],"radii (pylinkage.cam.profiles.pointarrayprofile property)":[[5,"pylinkage.cam.profiles.PointArrayProfile.radii",false]],"radius (pylinkage.actuators.arc_crank.arccrank attribute)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.radius",false]],"radius (pylinkage.actuators.crank.crank attribute)":[[2,"pylinkage.actuators.crank.Crank.radius",false]],"radius (pylinkage.mechanism.link.arcdriverlink property)":[[11,"pylinkage.mechanism.link.ArcDriverLink.radius",false]],"radius (pylinkage.mechanism.link.driverlink property)":[[11,"pylinkage.mechanism.link.DriverLink.radius",false]],"radius (pylinkage.visualizer.step_export.jointprofile attribute)":[[21,"pylinkage.visualizer.step_export.JointProfile.radius",false]],"rank_solutions() (in module pylinkage.synthesis.multi_topology)":[[18,"pylinkage.synthesis.multi_topology.rank_solutions",false]],"raw_solutions (pylinkage.synthesis.core.synthesisresult attribute)":[[18,"pylinkage.synthesis.core.SynthesisResult.raw_solutions",false]],"raw_string (pylinkage.assur.signature.assursignature attribute)":[[3,"pylinkage.assur.signature.AssurSignature.raw_string",false]],"rebuild() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.rebuild",false]],"rebuild() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.rebuild",false]],"ref_joint1_id (pylinkage.mechanism.joint.trackerjoint attribute)":[[11,"pylinkage.mechanism.joint.TrackerJoint.ref_joint1_id",false]],"ref_joint2_id (pylinkage.mechanism.joint.trackerjoint attribute)":[[11,"pylinkage.mechanism.joint.TrackerJoint.ref_joint2_id",false]],"ref_port1 (pylinkage.mechanism.builder.pendingtracker attribute)":[[11,"pylinkage.mechanism.builder.PendingTracker.ref_port1",false]],"ref_port2 (pylinkage.mechanism.builder.pendingtracker attribute)":[[11,"pylinkage.mechanism.builder.PendingTracker.ref_port2",false]],"reload() (pylinkage.actuators.arc_crank.arccrank method)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.reload",false]],"reload() (pylinkage.actuators.crank.crank method)":[[2,"pylinkage.actuators.crank.Crank.reload",false]],"reload() (pylinkage.actuators.linear.linearactuator method)":[[2,"pylinkage.actuators.linear.LinearActuator.reload",false]],"reload() (pylinkage.components.ground.ground method)":[[6,"pylinkage.components.ground.Ground.reload",false]],"reload() (pylinkage.components.point_tracker.pointtracker method)":[[6,"pylinkage.components.point_tracker.PointTracker.reload",false]],"reload() (pylinkage.dyads.fixed.fixeddyad method)":[[7,"pylinkage.dyads.fixed.FixedDyad.reload",false]],"reload() (pylinkage.dyads.oscillating_cam.oscillatingcamfollower method)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.reload",false]],"reload() (pylinkage.dyads.pp.ppdyad method)":[[7,"pylinkage.dyads.pp.PPDyad.reload",false]],"reload() (pylinkage.dyads.rrp.rrpdyad method)":[[7,"pylinkage.dyads.rrp.RRPDyad.reload",false]],"reload() (pylinkage.dyads.rrr.rrrdyad method)":[[7,"pylinkage.dyads.rrr.RRRDyad.reload",false]],"reload() (pylinkage.dyads.translating_cam.translatingcamfollower method)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.reload",false]],"remove_edge() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.remove_edge",false]],"remove_edge() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.remove_edge",false]],"remove_hyperedge() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.remove_hyperedge",false]],"remove_node() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.remove_node",false]],"remove_node() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.remove_node",false]],"reset() (pylinkage.assur.assur_mechanism.assurmechanism method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.reset",false]],"reset() (pylinkage.mechanism.link.arcdriverlink method)":[[11,"pylinkage.mechanism.link.ArcDriverLink.reset",false]],"reset() (pylinkage.mechanism.link.driverlink method)":[[11,"pylinkage.mechanism.link.DriverLink.reset",false]],"reset() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.reset",false]],"residual (pylinkage.synthesis.topology_types.groupsynthesisresult attribute)":[[18,"pylinkage.synthesis.topology_types.GroupSynthesisResult.residual",false]],"resolve_component() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.resolve_component",false]],"revolute (pylinkage.mechanism.joint.jointtype attribute)":[[11,"pylinkage.mechanism.joint.JointType.REVOLUTE",false]],"revolute (pylinkage.visualizer.symbols.symboltype attribute)":[[21,"pylinkage.visualizer.symbols.SymbolType.REVOLUTE",false]],"revolute_anchor (pylinkage.dyads.rrp.rrpdyad attribute)":[[7,"pylinkage.dyads.rrp.RRPDyad.revolute_anchor",false]],"revolutejoint (class in pylinkage.mechanism.joint)":[[11,"pylinkage.mechanism.joint.RevoluteJoint",false]],"rise_end (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.rise_end",false]],"rise_start (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.rise_start",false]],"role (pylinkage.assur.graph.node attribute)":[[3,"pylinkage.assur.graph.Node.role",false]],"role (pylinkage.hypergraph.core.node attribute)":[[9,"pylinkage.hypergraph.core.Node.role",false]],"roller_radius (pylinkage.dyads.oscillating_cam.oscillatingcamfollower attribute)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.roller_radius",false]],"roller_radius (pylinkage.dyads.translating_cam.translatingcamfollower attribute)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.roller_radius",false]],"rotate_point() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.rotate_point",false]],"rotation_matrix_2d() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.rotation_matrix_2d",false]],"rrpdyad (class in pylinkage.dyads.rrp)":[[7,"pylinkage.dyads.rrp.RRPDyad",false]],"rrrdyad (class in pylinkage.dyads.rrr)":[[7,"pylinkage.dyads.rrr.RRRDyad",false]],"sample() (pylinkage.synthesis.core.burmestercurves method)":[[18,"pylinkage.synthesis.core.BurmesterCurves.sample",false]],"save_linkage_dxf() (in module pylinkage.visualizer.dxf_export)":[[21,"pylinkage.visualizer.dxf_export.save_linkage_dxf",false]],"save_linkage_step() (in module pylinkage.visualizer.step_export)":[[21,"pylinkage.visualizer.step_export.save_linkage_step",false]],"save_linkage_svg() (in module pylinkage.visualizer.drawsvg_viz)":[[21,"pylinkage.visualizer.drawsvg_viz.save_linkage_svg",false]],"save_linkage_svg_with_velocity() (in module pylinkage.visualizer.drawsvg_viz)":[[21,"pylinkage.visualizer.drawsvg_viz.save_linkage_svg_with_velocity",false]],"score (pylinkage.optimization.collections.mutable_agent.mutableagent attribute)":[[13,"pylinkage.optimization.collections.mutable_agent.MutableAgent.score",false]],"score_solution() (in module pylinkage.synthesis.ranking)":[[18,"pylinkage.synthesis.ranking.score_solution",false]],"scores (pylinkage.optimization.co_optimization_types.cooptsolution attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptSolution.scores",false]],"scores (pylinkage.optimization.collections.pareto.paretosolution attribute)":[[13,"pylinkage.optimization.collections.pareto.ParetoSolution.scores",false]],"scores_array() (pylinkage.optimization.collections.pareto.paretofront method)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.scores_array",false]],"seed (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.seed",false]],"select_compatible_dyads() (in module pylinkage.synthesis.burmester)":[[18,"pylinkage.synthesis.burmester.select_compatible_dyads",false]],"sensitivities (pylinkage.linkage.sensitivity.sensitivityanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.sensitivities",false]],"sensitivity_ranking (pylinkage.linkage.sensitivity.sensitivityanalysis property)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.sensitivity_ranking",false]],"sensitivityanalysis (class in pylinkage.linkage.sensitivity)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis",false]],"sequential_variator() (in module pylinkage.optimization.grid_search)":[[12,"pylinkage.optimization.grid_search.sequential_variator",false]],"set_branch() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.set_branch",false]],"set_completely() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.set_completely",false]],"set_completely() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.set_completely",false]],"set_constraints() (pylinkage.actuators.arc_crank.arccrank method)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.set_constraints",false]],"set_constraints() (pylinkage.actuators.crank.crank method)":[[2,"pylinkage.actuators.crank.Crank.set_constraints",false]],"set_constraints() (pylinkage.actuators.linear.linearactuator method)":[[2,"pylinkage.actuators.linear.LinearActuator.set_constraints",false]],"set_constraints() (pylinkage.cam.profiles.camprofile method)":[[5,"pylinkage.cam.profiles.CamProfile.set_constraints",false]],"set_constraints() (pylinkage.cam.profiles.functionprofile method)":[[5,"pylinkage.cam.profiles.FunctionProfile.set_constraints",false]],"set_constraints() (pylinkage.cam.profiles.pointarrayprofile method)":[[5,"pylinkage.cam.profiles.PointArrayProfile.set_constraints",false]],"set_constraints() (pylinkage.components.ground.ground method)":[[6,"pylinkage.components.ground.Ground.set_constraints",false]],"set_constraints() (pylinkage.components.point_tracker.pointtracker method)":[[6,"pylinkage.components.point_tracker.PointTracker.set_constraints",false]],"set_constraints() (pylinkage.dyads.fixed.fixeddyad method)":[[7,"pylinkage.dyads.fixed.FixedDyad.set_constraints",false]],"set_constraints() (pylinkage.dyads.oscillating_cam.oscillatingcamfollower method)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.set_constraints",false]],"set_constraints() (pylinkage.dyads.pp.ppdyad method)":[[7,"pylinkage.dyads.pp.PPDyad.set_constraints",false]],"set_constraints() (pylinkage.dyads.rrp.rrpdyad method)":[[7,"pylinkage.dyads.rrp.RRPDyad.set_constraints",false]],"set_constraints() (pylinkage.dyads.rrr.rrrdyad method)":[[7,"pylinkage.dyads.rrr.RRRDyad.set_constraints",false]],"set_constraints() (pylinkage.dyads.translating_cam.translatingcamfollower method)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.set_constraints",false]],"set_constraints() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.set_constraints",false]],"set_constraints() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.set_constraints",false]],"set_coord() (pylinkage.mechanism.joint.joint method)":[[11,"pylinkage.mechanism.joint.Joint.set_coord",false]],"set_coords() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.set_coords",false]],"set_coords() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.set_coords",false]],"set_distance() (pylinkage.mechanism.link.link method)":[[11,"pylinkage.mechanism.link.Link.set_distance",false]],"set_input_velocity() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.set_input_velocity",false]],"set_input_velocity() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.set_input_velocity",false]],"set_joint_positions() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.set_joint_positions",false]],"show_kinematics() (in module pylinkage.visualizer.kinematics)":[[21,"pylinkage.visualizer.kinematics.show_kinematics",false]],"show_linkage() (in module pylinkage.visualizer.animated)":[[21,"pylinkage.visualizer.animated.show_linkage",false]],"signature_to_group_class() (in module pylinkage.assur.signature)":[[3,"pylinkage.assur.signature.signature_to_group_class",false]],"signature_to_hypergraph() (in module pylinkage.assur.signature)":[[3,"pylinkage.assur.signature.signature_to_hypergraph",false]],"simplify() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.simplify",false]],"simulate() (in module pylinkage.solver.simulation)":[[16,"pylinkage.solver.simulation.simulate",false]],"simulate_with_kinematics() (in module pylinkage.solver.simulation)":[[16,"pylinkage.solver.simulation.simulate_with_kinematics",false]],"simulation() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.simulation",false]],"simulation() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.simulation",false]],"six_bar_path_generation() (in module pylinkage.synthesis.six_bar)":[[18,"pylinkage.synthesis.six_bar.six_bar_path_generation",false]],"size (pylinkage.visualizer.symbols.symbolspec attribute)":[[21,"pylinkage.visualizer.symbols.SymbolSpec.size",false]],"slide_distance (pylinkage.mechanism.joint.prismaticjoint attribute)":[[11,"pylinkage.mechanism.joint.PrismaticJoint.slide_distance",false]],"slideaxis (class in pylinkage.mechanism.builder)":[[11,"pylinkage.mechanism.builder.SlideAxis",false]],"slider (pylinkage.visualizer.symbols.symboltype attribute)":[[21,"pylinkage.visualizer.symbols.SymbolType.SLIDER",false]],"slider_crank() (in module pylinkage.mechanism.factories)":[[11,"pylinkage.mechanism.factories.slider_crank",false]],"solution (pylinkage.synthesis.topology_types.topologysolution attribute)":[[18,"pylinkage.synthesis.topology_types.TopologySolution.solution",false]],"solution_to_linkage() (in module pylinkage.synthesis.conversion)":[[18,"pylinkage.synthesis.conversion.solution_to_linkage",false]],"solutions (pylinkage.optimization.co_optimization_types.cooptimizationresult attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationResult.solutions",false]],"solutions (pylinkage.optimization.collections.pareto.paretofront attribute)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.solutions",false]],"solutions (pylinkage.synthesis.core.synthesisresult attribute)":[[18,"pylinkage.synthesis.core.SynthesisResult.solutions",false]],"solutions_to_linkages() (in module pylinkage.synthesis.conversion)":[[18,"pylinkage.synthesis.conversion.solutions_to_linkages",false]],"solve_arc_crank() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_arc_crank",false]],"solve_crank() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_crank",false]],"solve_crank_acceleration() (in module pylinkage.solver.acceleration)":[[16,"pylinkage.solver.acceleration.solve_crank_acceleration",false]],"solve_crank_velocity() (in module pylinkage.solver.velocity)":[[16,"pylinkage.solver.velocity.solve_crank_velocity",false]],"solve_decomposition() (in module pylinkage.solver.solve)":[[16,"pylinkage.solver.solve.solve_decomposition",false]],"solve_fixed() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_fixed",false]],"solve_fixed_acceleration() (in module pylinkage.solver.acceleration)":[[16,"pylinkage.solver.acceleration.solve_fixed_acceleration",false]],"solve_fixed_velocity() (in module pylinkage.solver.velocity)":[[16,"pylinkage.solver.velocity.solve_fixed_velocity",false]],"solve_freudenstein_3_positions() (in module pylinkage.synthesis.function_generation)":[[18,"pylinkage.synthesis.function_generation.solve_freudenstein_3_positions",false]],"solve_freudenstein_least_squares() (in module pylinkage.synthesis.function_generation)":[[18,"pylinkage.synthesis.function_generation.solve_freudenstein_least_squares",false]],"solve_group() (in module pylinkage.solver.solve)":[[16,"pylinkage.solver.solve.solve_group",false]],"solve_line_line() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_line_line",false]],"solve_linear() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_linear",false]],"solve_linear_actuator() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_linear_actuator",false]],"solve_linkage_symbolically() (in module pylinkage.symbolic.solver)":[[17,"pylinkage.symbolic.solver.solve_linkage_symbolically",false]],"solve_order (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.solve_order",false]],"solve_order() (pylinkage.assur.decomposition.decompositionresult method)":[[3,"pylinkage.assur.decomposition.DecompositionResult.solve_order",false]],"solve_oscillating_cam_follower() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_oscillating_cam_follower",false]],"solve_pp_dyad() (in module pylinkage.solver.groups)":[[16,"pylinkage.solver.groups.solve_pp_dyad",false]],"solve_prismatic_acceleration() (in module pylinkage.solver.acceleration)":[[16,"pylinkage.solver.acceleration.solve_prismatic_acceleration",false]],"solve_prismatic_velocity() (in module pylinkage.solver.velocity)":[[16,"pylinkage.solver.velocity.solve_prismatic_velocity",false]],"solve_revolute() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_revolute",false]],"solve_revolute_acceleration() (in module pylinkage.solver.acceleration)":[[16,"pylinkage.solver.acceleration.solve_revolute_acceleration",false]],"solve_revolute_velocity() (in module pylinkage.solver.velocity)":[[16,"pylinkage.solver.velocity.solve_revolute_velocity",false]],"solve_rigid_body_acceleration() (in module pylinkage.solver.acceleration)":[[16,"pylinkage.solver.acceleration.solve_rigid_body_acceleration",false]],"solve_rigid_body_velocity() (in module pylinkage.solver.velocity)":[[16,"pylinkage.solver.velocity.solve_rigid_body_velocity",false]],"solve_rrp_dyad() (in module pylinkage.solver.groups)":[[16,"pylinkage.solver.groups.solve_rrp_dyad",false]],"solve_rrr_dyad() (in module pylinkage.solver.groups)":[[16,"pylinkage.solver.groups.solve_rrr_dyad",false]],"solve_translating_cam_follower() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_translating_cam_follower",false]],"solve_triad() (in module pylinkage.solver.groups)":[[16,"pylinkage.solver.groups.solve_triad",false]],"solver_category (pylinkage.assur.groups.assurgroup property)":[[3,"pylinkage.assur.groups.AssurGroup.solver_category",false]],"solver_data_to_linkage() (in module pylinkage.bridge.solver_conversion)":[[4,"pylinkage.bridge.solver_conversion.solver_data_to_linkage",false]],"solverdata (class in pylinkage.solver.types)":[[16,"pylinkage.solver.types.SolverData",false]],"source (pylinkage.assur.graph.edge attribute)":[[3,"pylinkage.assur.graph.Edge.source",false]],"source (pylinkage.hypergraph.core.edge attribute)":[[9,"pylinkage.hypergraph.core.Edge.source",false]],"speed (pylinkage.actuators.linear.linearactuator attribute)":[[2,"pylinkage.actuators.linear.LinearActuator.speed",false]],"sqr_dist() (in module pylinkage.geometry.core)":[[8,"pylinkage.geometry.core.sqr_dist",false]],"std_deviation (pylinkage.linkage.sensitivity.toleranceanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.std_deviation",false]],"step() (pylinkage.assur.assur_mechanism.assurmechanism method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.step",false]],"step() (pylinkage.mechanism.link.arcdriverlink method)":[[11,"pylinkage.mechanism.link.ArcDriverLink.step",false]],"step() (pylinkage.mechanism.link.driverlink method)":[[11,"pylinkage.mechanism.link.DriverLink.step",false]],"step() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.step",false]],"step() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.step",false]],"step_fast() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.step_fast",false]],"step_fast() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.step_fast",false]],"step_fast_with_kinematics() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.step_fast_with_kinematics",false]],"step_fast_with_kinematics() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.step_fast_with_kinematics",false]],"step_single() (in module pylinkage.solver.simulation)":[[16,"pylinkage.solver.simulation.step_single",false]],"step_single_acceleration() (in module pylinkage.solver.simulation)":[[16,"pylinkage.solver.simulation.step_single_acceleration",false]],"step_single_velocity() (in module pylinkage.solver.simulation)":[[16,"pylinkage.solver.simulation.step_single_velocity",false]],"step_with_derivatives() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.step_with_derivatives",false]],"step_with_derivatives() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.step_with_derivatives",false]],"stephenson_from_lengths() (in module pylinkage.synthesis.conversion)":[[18,"pylinkage.synthesis.conversion.stephenson_from_lengths",false]],"stroke (pylinkage.actuators.linear.linearactuator attribute)":[[2,"pylinkage.actuators.linear.LinearActuator.stroke",false]],"stroke_at_position() (in module pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.stroke_at_position",false]],"stroke_position() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.stroke_position",false]],"stroke_position() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.stroke_position",false]],"stroke_range (pylinkage.linkage.transmission.strokeanalysis attribute)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.stroke_range",false]],"strokeanalysis (class in pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis",false]],"structuralanalysis (class in pylinkage.assur.analysis)":[[3,"pylinkage.assur.analysis.StructuralAnalysis",false]],"substitute() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.substitute",false]],"success (pylinkage.symbolic.optimization.optimizationresult attribute)":[[17,"pylinkage.symbolic.optimization.OptimizationResult.success",false]],"swarm_tiled_repr() (in module pylinkage.visualizer.animated)":[[21,"pylinkage.visualizer.animated.swarm_tiled_repr",false]],"symbol_type (pylinkage.visualizer.symbols.symbolspec attribute)":[[21,"pylinkage.visualizer.symbols.SymbolSpec.symbol_type",false]],"symbolic_circle_intersect() (in module pylinkage.symbolic.geometry)":[[17,"pylinkage.symbolic.geometry.symbolic_circle_intersect",false]],"symbolic_circle_line_intersect() (in module pylinkage.symbolic.geometry)":[[17,"pylinkage.symbolic.geometry.symbolic_circle_line_intersect",false]],"symbolic_cyl_to_cart() (in module pylinkage.symbolic.geometry)":[[17,"pylinkage.symbolic.geometry.symbolic_cyl_to_cart",false]],"symbolic_dist() (in module pylinkage.symbolic.geometry)":[[17,"pylinkage.symbolic.geometry.symbolic_dist",false]],"symbolic_gradient() (in module pylinkage.symbolic.optimization)":[[17,"pylinkage.symbolic.optimization.symbolic_gradient",false]],"symbolic_hessian() (in module pylinkage.symbolic.optimization)":[[17,"pylinkage.symbolic.optimization.symbolic_hessian",false]],"symbolic_sqr_dist() (in module pylinkage.symbolic.geometry)":[[17,"pylinkage.symbolic.geometry.symbolic_sqr_dist",false]],"symboliclinkage (class in pylinkage.symbolic.linkage)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage",false]],"symbolicoptimizer (class in pylinkage.symbolic.optimization)":[[17,"pylinkage.symbolic.optimization.SymbolicOptimizer",false]],"symbolspec (class in pylinkage.visualizer.symbols)":[[21,"pylinkage.visualizer.symbols.SymbolSpec",false]],"symboltype (class in pylinkage.visualizer.symbols)":[[21,"pylinkage.visualizer.symbols.SymbolType",false]],"symcrank (class in pylinkage.symbolic.joints)":[[17,"pylinkage.symbolic.joints.SymCrank",false]],"symjoint (class in pylinkage.symbolic.joints)":[[17,"pylinkage.symbolic.joints.SymJoint",false]],"symrevolute (class in pylinkage.symbolic.joints)":[[17,"pylinkage.symbolic.joints.SymRevolute",false]],"symstatic (class in pylinkage.symbolic.joints)":[[17,"pylinkage.symbolic.joints.SymStatic",false]],"synthesis_to_chromosomes() (in module pylinkage.optimization.warm_start)":[[12,"pylinkage.optimization.warm_start.synthesis_to_chromosomes",false]],"synthesis_type (pylinkage.synthesis.core.synthesisproblem attribute)":[[18,"pylinkage.synthesis.core.SynthesisProblem.synthesis_type",false]],"synthesisproblem (class in pylinkage.synthesis.core)":[[18,"pylinkage.synthesis.core.SynthesisProblem",false]],"synthesisresult (class in pylinkage.synthesis.core)":[[18,"pylinkage.synthesis.core.SynthesisResult",false]],"synthesize() (in module pylinkage.synthesis.multi_topology)":[[18,"pylinkage.synthesis.multi_topology.synthesize",false]],"target (pylinkage.assur.graph.edge attribute)":[[3,"pylinkage.assur.graph.Edge.target",false]],"target (pylinkage.hypergraph.core.edge attribute)":[[9,"pylinkage.hypergraph.core.Edge.target",false]],"target_id (pylinkage.optimization.topology_neighborhood.topologyneighbor attribute)":[[12,"pylinkage.optimization.topology_neighborhood.TopologyNeighbor.target_id",false]],"ternary (pylinkage.mechanism.link.linktype attribute)":[[11,"pylinkage.mechanism.link.LinkType.TERNARY",false]],"tetrad (pylinkage.assur.signature.assurgroupclass attribute)":[[3,"pylinkage.assur.signature.AssurGroupClass.TETRAD",false]],"theta (pylinkage.symbolic.joints.symcrank attribute)":[[17,"pylinkage.symbolic.joints.SymCrank.theta",false]],"theta (pylinkage.symbolic.linkage.symboliclinkage attribute)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.theta",false]],"thickness (pylinkage.visualizer.step_export.linkprofile attribute)":[[21,"pylinkage.visualizer.step_export.LinkProfile.thickness",false]],"to_cartesian() (pylinkage.synthesis.core.burmesterdyad method)":[[18,"pylinkage.synthesis.core.BurmesterDyad.to_cartesian",false]],"to_dataframe() (pylinkage.linkage.sensitivity.sensitivityanalysis method)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.to_dataframe",false]],"to_dataframe() (pylinkage.linkage.sensitivity.toleranceanalysis method)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.to_dataframe",false]],"to_dict() (pylinkage.dimensions.dimensions method)":[[1,"pylinkage.dimensions.Dimensions.to_dict",false]],"to_dict() (pylinkage.dimensions.driverangle method)":[[1,"pylinkage.dimensions.DriverAngle.to_dict",false]],"to_dyad_solution() (pylinkage.synthesis.core.burmesterdyad method)":[[18,"pylinkage.synthesis.core.BurmesterDyad.to_dyad_solution",false]],"to_edges() (pylinkage.hypergraph.core.hyperedge method)":[[9,"pylinkage.hypergraph.core.Hyperedge.to_edges",false]],"to_graph() (pylinkage.topology.catalog.catalogentry method)":[[19,"pylinkage.topology.catalog.CatalogEntry.to_graph",false]],"to_hypergraph() (in module pylinkage.assur.hypergraph_conversion)":[[3,"pylinkage.assur.hypergraph_conversion.to_hypergraph",false]],"to_hypergraph() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.to_hypergraph",false]],"to_instance (pylinkage.hypergraph.hierarchy.connection attribute)":[[9,"pylinkage.hypergraph.hierarchy.Connection.to_instance",false]],"to_json() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.to_json",false]],"to_mechanism() (in module pylinkage.hypergraph.mechanism_conversion)":[[9,"pylinkage.hypergraph.mechanism_conversion.to_mechanism",false]],"to_numba_coefficients() (pylinkage.cam.motion_laws.motionlaw method)":[[5,"pylinkage.cam.motion_laws.MotionLaw.to_numba_coefficients",false]],"to_numba_coefficients() (pylinkage.cam.motion_laws.polynomialmotionlaw method)":[[5,"pylinkage.cam.motion_laws.PolynomialMotionLaw.to_numba_coefficients",false]],"to_numba_data() (pylinkage.cam.profiles.camprofile method)":[[5,"pylinkage.cam.profiles.CamProfile.to_numba_data",false]],"to_numba_data() (pylinkage.cam.profiles.functionprofile method)":[[5,"pylinkage.cam.profiles.FunctionProfile.to_numba_data",false]],"to_numba_data() (pylinkage.cam.profiles.pointarrayprofile method)":[[5,"pylinkage.cam.profiles.PointArrayProfile.to_numba_data",false]],"to_port (pylinkage.hypergraph.hierarchy.connection attribute)":[[9,"pylinkage.hypergraph.hierarchy.Connection.to_port",false]],"to_simple_graph() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.to_simple_graph",false]],"toleranceanalysis (class in pylinkage.linkage.sensitivity)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis",false]],"tolerances (pylinkage.linkage.sensitivity.toleranceanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.tolerances",false]],"topology (pylinkage.hypergraph.hierarchy.componentinstance attribute)":[[9,"pylinkage.hypergraph.hierarchy.ComponentInstance.topology",false]],"topology_by_index() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.topology_by_index",false]],"topology_distance() (in module pylinkage.optimization.topology_neighborhood)":[[12,"pylinkage.optimization.topology_neighborhood.topology_distance",false]],"topology_entry (pylinkage.optimization.co_optimization_types.cooptsolution attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptSolution.topology_entry",false]],"topology_entry (pylinkage.synthesis.topology_types.topologysolution attribute)":[[18,"pylinkage.synthesis.topology_types.TopologySolution.topology_entry",false]],"topology_id (pylinkage.synthesis.topology_types.nbarsolution attribute)":[[18,"pylinkage.synthesis.topology_types.NBarSolution.topology_id",false]],"topology_idx (pylinkage.optimization.co_optimization_types.mixedchromosome attribute)":[[12,"pylinkage.optimization.co_optimization_types.MixedChromosome.topology_idx",false]],"topology_index() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.topology_index",false]],"topology_mutation_rate (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.topology_mutation_rate",false]],"topology_neighbors() (in module pylinkage.optimization.topology_neighborhood)":[[12,"pylinkage.optimization.topology_neighborhood.topology_neighbors",false]],"topologycatalog (class in pylinkage.topology.catalog)":[[19,"pylinkage.topology.catalog.TopologyCatalog",false]],"topologyneighbor (class in pylinkage.optimization.topology_neighborhood)":[[12,"pylinkage.optimization.topology_neighborhood.TopologyNeighbor",false]],"topologysolution (class in pylinkage.synthesis.topology_types)":[[18,"pylinkage.synthesis.topology_types.TopologySolution",false]],"total_iterations (pylinkage.optimization.async_optimization.optimizationprogress attribute)":[[12,"pylinkage.optimization.async_optimization.OptimizationProgress.total_iterations",false]],"total_lift (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.total_lift",false]],"tracker (pylinkage.mechanism.joint.jointtype attribute)":[[11,"pylinkage.mechanism.joint.JointType.TRACKER",false]],"trackerjoint (class in pylinkage.mechanism.joint)":[[11,"pylinkage.mechanism.joint.TrackerJoint",false]],"translatingcamfollower (class in pylinkage.dyads.translating_cam)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower",false]],"transmission_angle() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.transmission_angle",false]],"transmission_angle() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.transmission_angle",false]],"transmission_angle_at_position() (in module pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.transmission_angle_at_position",false]],"transmissionangleanalysis (class in pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis",false]],"triad (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.Triad",false]],"triad (pylinkage.assur.signature.assurgroupclass attribute)":[[3,"pylinkage.assur.signature.AssurGroupClass.TRIAD",false]],"trials_and_errors_optimization() (in module pylinkage.optimization.grid_search)":[[12,"pylinkage.optimization.grid_search.trials_and_errors_optimization",false]],"trials_and_errors_optimization_async() (in module pylinkage.optimization.async_optimization)":[[12,"pylinkage.optimization.async_optimization.trials_and_errors_optimization_async",false]],"unbuildableerror":[[1,"pylinkage.exceptions.UnbuildableError",false]],"underconstrainederror":[[1,"pylinkage.exceptions.UnderconstrainedError",false]],"update_animated_plot() (in module pylinkage.visualizer.animated)":[[21,"pylinkage.visualizer.animated.update_animated_plot",false]],"update_position() (pylinkage.mechanism.joint.trackerjoint method)":[[11,"pylinkage.mechanism.joint.TrackerJoint.update_position",false]],"update_solver_constraints() (in module pylinkage.bridge.solver_conversion)":[[4,"pylinkage.bridge.solver_conversion.update_solver_constraints",false]],"update_solver_positions() (in module pylinkage.bridge.solver_conversion)":[[4,"pylinkage.bridge.solver_conversion.update_solver_positions",false]],"validate() (pylinkage.assur.assur_mechanism.assurmechanism method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.validate",false]],"validate_against() (pylinkage.dimensions.dimensions method)":[[1,"pylinkage.dimensions.Dimensions.validate_against",false]],"validate_decomposition() (in module pylinkage.assur.decomposition)":[[3,"pylinkage.assur.decomposition.validate_decomposition",false]],"validate_fourbar() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.validate_fourbar",false]],"validation_messages (pylinkage.assur.analysis.structuralanalysis attribute)":[[3,"pylinkage.assur.analysis.StructuralAnalysis.validation_messages",false]],"velocities (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.velocities",false]],"velocity (pylinkage.mechanism.joint.joint attribute)":[[11,"pylinkage.mechanism.joint.Joint.velocity",false]],"velocity() (pylinkage.cam.motion_laws.cycloidalmotionlaw method)":[[5,"pylinkage.cam.motion_laws.CycloidalMotionLaw.velocity",false]],"velocity() (pylinkage.cam.motion_laws.harmonicmotionlaw method)":[[5,"pylinkage.cam.motion_laws.HarmonicMotionLaw.velocity",false]],"velocity() (pylinkage.cam.motion_laws.modifiedtrapezoidalmotionlaw method)":[[5,"pylinkage.cam.motion_laws.ModifiedTrapezoidalMotionLaw.velocity",false]],"velocity() (pylinkage.cam.motion_laws.motionlaw method)":[[5,"pylinkage.cam.motion_laws.MotionLaw.velocity",false]],"velocity() (pylinkage.cam.motion_laws.polynomialmotionlaw method)":[[5,"pylinkage.cam.motion_laws.PolynomialMotionLaw.velocity",false]],"verbose (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.verbose",false]],"verify_function_generation() (in module pylinkage.synthesis.function_generation)":[[18,"pylinkage.synthesis.function_generation.verify_function_generation",false]],"verify_path_generation() (in module pylinkage.synthesis.path_generation)":[[18,"pylinkage.synthesis.path_generation.verify_path_generation",false]],"warm_start_co_optimization() (in module pylinkage.optimization.warm_start)":[[12,"pylinkage.optimization.warm_start.warm_start_co_optimization",false]],"warm_start_sampling() (in module pylinkage.optimization.operators)":[[12,"pylinkage.optimization.operators.warm_start_sampling",false]],"warnings (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.warnings",false]],"warnings (pylinkage.synthesis.core.synthesisresult attribute)":[[18,"pylinkage.synthesis.core.SynthesisResult.warnings",false]],"watt_from_lengths() (in module pylinkage.synthesis.conversion)":[[18,"pylinkage.synthesis.conversion.watt_from_lengths",false]],"width (pylinkage.visualizer.step_export.linkprofile attribute)":[[21,"pylinkage.visualizer.step_export.LinkProfile.width",false]],"worst_angle() (pylinkage.linkage.transmission.transmissionangleanalysis method)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.worst_angle",false]],"x (pylinkage.mechanism.joint.joint property)":[[11,"pylinkage.mechanism.joint.Joint.x",false]],"y (pylinkage.mechanism.joint.joint property)":[[11,"pylinkage.mechanism.joint.Joint.y",false]]},"objects":{"pylinkage":[[1,0,0,"-","dimensions"],[1,0,0,"-","exceptions"]],"pylinkage.actuators":[[2,0,0,"-","arc_crank"],[2,0,0,"-","crank"],[2,0,0,"-","linear"]],"pylinkage.actuators.arc_crank":[[2,1,1,"","ArcCrank"]],"pylinkage.actuators.arc_crank.ArcCrank":[[2,2,1,"","anchor"],[2,3,1,"","anchors"],[2,3,1,"","angle"],[2,2,1,"","angular_velocity"],[2,2,1,"","arc_end"],[2,2,1,"","arc_start"],[2,4,1,"","get_constraints"],[2,2,1,"","initial_angle"],[2,3,1,"","output"],[2,2,1,"","radius"],[2,4,1,"","reload"],[2,4,1,"","set_constraints"]],"pylinkage.actuators.crank":[[2,1,1,"","Crank"],[2,5,1,"","DEFAULT_ANGULAR_VELOCITY"]],"pylinkage.actuators.crank.Crank":[[2,2,1,"","anchor"],[2,3,1,"","anchors"],[2,2,1,"","angular_velocity"],[2,4,1,"","get_constraints"],[2,2,1,"","initial_angle"],[2,3,1,"","output"],[2,2,1,"","radius"],[2,4,1,"","reload"],[2,4,1,"","set_constraints"]],"pylinkage.actuators.linear":[[2,1,1,"","LinearActuator"]],"pylinkage.actuators.linear.LinearActuator":[[2,2,1,"","anchor"],[2,3,1,"","anchors"],[2,2,1,"","angle"],[2,3,1,"","extension"],[2,4,1,"","get_constraints"],[2,2,1,"","initial_extension"],[2,3,1,"","output"],[2,4,1,"","reload"],[2,4,1,"","set_constraints"],[2,2,1,"","speed"],[2,2,1,"","stroke"]],"pylinkage.assur":[[3,0,0,"-","analysis"],[3,0,0,"-","assur_mechanism"],[3,0,0,"-","decomposition"],[3,0,0,"-","graph"],[3,0,0,"-","groups"],[3,0,0,"-","hypergraph_conversion"],[3,0,0,"-","mechanism_conversion"],[3,0,0,"-","serialization"],[3,0,0,"-","signature"]],"pylinkage.assur.analysis":[[3,1,1,"","MobilityResult"],[3,1,1,"","StructuralAnalysis"]],"pylinkage.assur.analysis.MobilityResult":[[3,2,1,"","degree_of_freedom"],[3,2,1,"","is_determinate"],[3,2,1,"","is_overconstrained"],[3,2,1,"","is_underconstrained"],[3,3,1,"","is_valid_mechanism"],[3,3,1,"","mobility_status"],[3,2,1,"","num_1dof_joints"],[3,2,1,"","num_2dof_joints"],[3,2,1,"","num_driver_joints"],[3,2,1,"","num_ground_joints"],[3,2,1,"","num_joints"],[3,2,1,"","num_links"],[3,2,1,"","warnings"]],"pylinkage.assur.analysis.StructuralAnalysis":[[3,2,1,"","group_signatures"],[3,3,1,"","is_valid"],[3,2,1,"","mobility"],[3,2,1,"","num_assur_groups"],[3,2,1,"","validation_messages"]],"pylinkage.assur.assur_mechanism":[[3,1,1,"","AssurMechanism"]],"pylinkage.assur.assur_mechanism.AssurMechanism":[[3,4,1,"","analyze"],[3,3,1,"","assur_groups"],[3,3,1,"","decomposition"],[3,3,1,"","degree_of_freedom"],[3,4,1,"","from_graph"],[3,4,1,"","from_mechanism"],[3,4,1,"","get_joint_positions"],[3,3,1,"","graph"],[3,4,1,"","is_valid"],[3,2,1,"","mechanism"],[3,3,1,"","num_assur_groups"],[3,3,1,"","num_driver_nodes"],[3,3,1,"","num_ground_nodes"],[3,4,1,"","reset"],[3,4,1,"","step"],[3,4,1,"","validate"]],"pylinkage.assur.decomposition":[[3,1,1,"","DecompositionResult"],[3,6,1,"","decompose_assur_groups"],[3,6,1,"","validate_decomposition"]],"pylinkage.assur.decomposition.DecompositionResult":[[3,4,1,"","all_nodes_in_order"],[3,2,1,"","drivers"],[3,2,1,"","graph"],[3,2,1,"","ground"],[3,2,1,"","groups"],[3,4,1,"","solve_order"]],"pylinkage.assur.graph":[[3,1,1,"","Edge"],[3,1,1,"","LinkageGraph"],[3,1,1,"","Node"]],"pylinkage.assur.graph.Edge":[[3,2,1,"","body_id"],[3,4,1,"","connects"],[3,2,1,"","id"],[3,4,1,"","other_node"],[3,2,1,"","source"],[3,2,1,"","target"]],"pylinkage.assur.graph.LinkageGraph":[[3,4,1,"","add_edge"],[3,4,1,"","add_node"],[3,4,1,"","copy"],[3,4,1,"","degree"],[3,4,1,"","driven_nodes"],[3,4,1,"","driver_nodes"],[3,2,1,"","edges"],[3,4,1,"","get_edge_between"],[3,4,1,"","get_edges_for_node"],[3,4,1,"","ground_nodes"],[3,2,1,"","name"],[3,4,1,"","neighbors"],[3,2,1,"","nodes"],[3,4,1,"","remove_edge"],[3,4,1,"","remove_node"]],"pylinkage.assur.graph.Node":[[3,2,1,"","id"],[3,2,1,"","joint_type"],[3,2,1,"","name"],[3,2,1,"","role"]],"pylinkage.assur.groups":[[3,1,1,"","AssurGroup"],[3,1,1,"","Dyad"],[3,1,1,"","DyadPP"],[3,1,1,"","DyadPRR"],[3,1,1,"","DyadRPR"],[3,1,1,"","DyadRRP"],[3,1,1,"","DyadRRR"],[3,1,1,"","Triad"],[3,6,1,"","identify_dyad_type"],[3,6,1,"","identify_group_type"]],"pylinkage.assur.groups.AssurGroup":[[3,2,1,"","anchor_nodes"],[3,4,1,"","can_form"],[3,3,1,"","group_class"],[3,2,1,"","internal_edges"],[3,2,1,"","internal_nodes"],[3,3,1,"","joint_signature"],[3,3,1,"","solver_category"]],"pylinkage.assur.groups.Dyad":[[3,4,1,"","can_form"],[3,3,1,"","group_class"],[3,3,1,"","joint_signature"],[3,2,1,"","line2_node1"],[3,2,1,"","line2_node2"],[3,2,1,"","line_node1"],[3,2,1,"","line_node2"]],"pylinkage.assur.groups.Triad":[[3,4,1,"","can_form"],[3,2,1,"","edge_map"],[3,3,1,"","group_class"],[3,3,1,"","joint_signature"]],"pylinkage.assur.hypergraph_conversion":[[3,6,1,"","from_hypergraph"],[3,6,1,"","to_hypergraph"]],"pylinkage.assur.mechanism_conversion":[[3,6,1,"","graph_to_mechanism"],[3,6,1,"","mechanism_to_graph"]],"pylinkage.assur.serialization":[[3,6,1,"","edge_from_dict"],[3,6,1,"","edge_to_dict"],[3,6,1,"","graph_from_dict"],[3,6,1,"","graph_from_json"],[3,6,1,"","graph_to_dict"],[3,6,1,"","graph_to_json"],[3,6,1,"","node_from_dict"],[3,6,1,"","node_to_dict"]],"pylinkage.assur.signature":[[3,1,1,"","AssurGroupClass"],[3,1,1,"","AssurSignature"],[3,6,1,"","isomer_to_canonical"],[3,6,1,"","parse_isomer_signature"],[3,6,1,"","parse_signature"],[3,6,1,"","signature_to_group_class"],[3,6,1,"","signature_to_hypergraph"]],"pylinkage.assur.signature.AssurGroupClass":[[3,2,1,"","DYAD"],[3,2,1,"","TETRAD"],[3,2,1,"","TRIAD"]],"pylinkage.assur.signature.AssurSignature":[[3,3,1,"","canonical_form"],[3,2,1,"","group_class"],[3,2,1,"","joints"],[3,3,1,"","num_anchor_nodes"],[3,3,1,"","num_internal_nodes"],[3,3,1,"","num_links"],[3,2,1,"","raw_string"]],"pylinkage.bridge":[[4,0,0,"-","solver_conversion"]],"pylinkage.bridge.solver_conversion":[[4,6,1,"","linkage_to_solver_data"],[4,6,1,"","solver_data_to_linkage"],[4,6,1,"","update_solver_constraints"],[4,6,1,"","update_solver_positions"]],"pylinkage.cam":[[5,0,0,"-","motion_laws"],[5,0,0,"-","profiles"]],"pylinkage.cam.motion_laws":[[5,1,1,"","CycloidalMotionLaw"],[5,1,1,"","HarmonicMotionLaw"],[5,1,1,"","ModifiedTrapezoidalMotionLaw"],[5,1,1,"","MotionLaw"],[5,1,1,"","PolynomialMotionLaw"],[5,6,1,"","polynomial_345"],[5,6,1,"","polynomial_4567"]],"pylinkage.cam.motion_laws.CycloidalMotionLaw":[[5,4,1,"","acceleration"],[5,4,1,"","displacement"],[5,3,1,"","profile_type"],[5,4,1,"","velocity"]],"pylinkage.cam.motion_laws.HarmonicMotionLaw":[[5,4,1,"","acceleration"],[5,4,1,"","displacement"],[5,3,1,"","profile_type"],[5,4,1,"","velocity"]],"pylinkage.cam.motion_laws.ModifiedTrapezoidalMotionLaw":[[5,4,1,"","acceleration"],[5,4,1,"","displacement"],[5,3,1,"","profile_type"],[5,4,1,"","velocity"]],"pylinkage.cam.motion_laws.MotionLaw":[[5,4,1,"","acceleration"],[5,4,1,"","displacement"],[5,3,1,"","profile_type"],[5,4,1,"","to_numba_coefficients"],[5,4,1,"","velocity"]],"pylinkage.cam.motion_laws.PolynomialMotionLaw":[[5,4,1,"","acceleration"],[5,3,1,"","coefficients"],[5,4,1,"","displacement"],[5,3,1,"","profile_type"],[5,4,1,"","to_numba_coefficients"],[5,4,1,"","velocity"]],"pylinkage.cam.profiles":[[5,1,1,"","CamProfile"],[5,1,1,"","FunctionProfile"],[5,1,1,"","PointArrayProfile"]],"pylinkage.cam.profiles.CamProfile":[[5,2,1,"","base_radius"],[5,4,1,"","evaluate"],[5,4,1,"","evaluate_derivative"],[5,4,1,"","get_constraints"],[5,2,1,"","name"],[5,4,1,"","pitch_radius"],[5,4,1,"","pressure_angle"],[5,4,1,"","set_constraints"],[5,4,1,"","to_numba_data"]],"pylinkage.cam.profiles.FunctionProfile":[[5,2,1,"","base_radius"],[5,2,1,"","dwell_high_end"],[5,4,1,"","evaluate"],[5,4,1,"","evaluate_derivative"],[5,2,1,"","fall_end"],[5,4,1,"","get_constraints"],[5,2,1,"","motion_law"],[5,2,1,"","name"],[5,2,1,"","rise_end"],[5,2,1,"","rise_start"],[5,4,1,"","set_constraints"],[5,4,1,"","to_numba_data"],[5,2,1,"","total_lift"]],"pylinkage.cam.profiles.PointArrayProfile":[[5,3,1,"","angles"],[5,2,1,"","base_radius"],[5,4,1,"","evaluate"],[5,4,1,"","evaluate_derivative"],[5,4,1,"","get_constraints"],[5,2,1,"","name"],[5,3,1,"","radii"],[5,4,1,"","set_constraints"],[5,4,1,"","to_numba_data"]],"pylinkage.components":[[6,0,0,"-","ground"],[6,0,0,"-","point_tracker"]],"pylinkage.components.ground":[[6,1,1,"","Ground"]],"pylinkage.components.ground.Ground":[[6,4,1,"","get_constraints"],[6,4,1,"","reload"],[6,4,1,"","set_constraints"]],"pylinkage.components.point_tracker":[[6,1,1,"","PointTracker"]],"pylinkage.components.point_tracker.PointTracker":[[6,2,1,"","anchor1"],[6,2,1,"","anchor2"],[6,3,1,"","anchors"],[6,2,1,"","angle"],[6,2,1,"","distance"],[6,4,1,"","get_constraints"],[6,4,1,"","reload"],[6,4,1,"","set_constraints"]],"pylinkage.dimensions":[[1,1,1,"","Dimensions"],[1,1,1,"","DriverAngle"]],"pylinkage.dimensions.Dimensions":[[1,4,1,"","copy"],[1,2,1,"","driver_angles"],[1,2,1,"","edge_distances"],[1,4,1,"","from_dict"],[1,4,1,"","get_driver_angle"],[1,4,1,"","get_edge_distance"],[1,4,1,"","get_hyperedge_distance"],[1,4,1,"","get_node_position"],[1,2,1,"","hyperedge_constraints"],[1,2,1,"","name"],[1,2,1,"","node_positions"],[1,4,1,"","to_dict"],[1,4,1,"","validate_against"]],"pylinkage.dimensions.DriverAngle":[[1,2,1,"","angular_velocity"],[1,4,1,"","from_dict"],[1,2,1,"","initial_angle"],[1,4,1,"","to_dict"]],"pylinkage.dyads":[[7,0,0,"-","factory"],[7,0,0,"-","fixed"],[7,0,0,"-","oscillating_cam"],[7,0,0,"-","pp"],[7,0,0,"-","rrp"],[7,0,0,"-","rrr"],[7,0,0,"-","translating_cam"]],"pylinkage.dyads.factory":[[7,6,1,"","create_dyad"],[7,6,1,"","get_isomer_geometry"],[7,6,1,"","get_required_anchors"],[7,6,1,"","get_required_constraints"]],"pylinkage.dyads.fixed":[[7,1,1,"","FixedDyad"]],"pylinkage.dyads.fixed.FixedDyad":[[7,2,1,"","angle"],[7,2,1,"","distance"],[7,4,1,"","get_constraints"],[7,4,1,"","reload"],[7,4,1,"","set_constraints"]],"pylinkage.dyads.oscillating_cam":[[7,1,1,"","OscillatingCamFollower"]],"pylinkage.dyads.oscillating_cam.OscillatingCamFollower":[[7,3,1,"","anchors"],[7,3,1,"","angular_displacement"],[7,3,1,"","arm_angle"],[7,2,1,"","arm_length"],[7,3,1,"","cam_angle"],[7,2,1,"","cam_driver"],[7,4,1,"","get_constraints"],[7,2,1,"","initial_angle"],[7,3,1,"","output"],[7,2,1,"","pivot_anchor"],[7,2,1,"","profile"],[7,4,1,"","reload"],[7,2,1,"","roller_radius"],[7,4,1,"","set_constraints"]],"pylinkage.dyads.pp":[[7,1,1,"","PPDyad"]],"pylinkage.dyads.pp.PPDyad":[[7,3,1,"","anchors"],[7,4,1,"","get_constraints"],[7,2,1,"","line1_anchor1"],[7,2,1,"","line1_anchor2"],[7,2,1,"","line2_anchor1"],[7,2,1,"","line2_anchor2"],[7,4,1,"","reload"],[7,4,1,"","set_constraints"]],"pylinkage.dyads.rrp":[[7,1,1,"","RRPDyad"]],"pylinkage.dyads.rrp.RRPDyad":[[7,3,1,"","anchors"],[7,2,1,"","distance"],[7,4,1,"","get_constraints"],[7,2,1,"","line_anchor1"],[7,2,1,"","line_anchor2"],[7,4,1,"","reload"],[7,2,1,"","revolute_anchor"],[7,4,1,"","set_constraints"]],"pylinkage.dyads.rrr":[[7,1,1,"","RRRDyad"]],"pylinkage.dyads.rrr.RRRDyad":[[7,2,1,"","distance1"],[7,2,1,"","distance2"],[7,4,1,"","get_constraints"],[7,4,1,"","reload"],[7,4,1,"","set_constraints"]],"pylinkage.dyads.translating_cam":[[7,1,1,"","TranslatingCamFollower"]],"pylinkage.dyads.translating_cam.TranslatingCamFollower":[[7,3,1,"","anchors"],[7,3,1,"","cam_angle"],[7,2,1,"","cam_driver"],[7,3,1,"","displacement"],[7,4,1,"","get_constraints"],[7,2,1,"","guide"],[7,2,1,"","guide_angle"],[7,3,1,"","output"],[7,2,1,"","profile"],[7,4,1,"","reload"],[7,2,1,"","roller_radius"],[7,4,1,"","set_constraints"]],"pylinkage.exceptions":[[1,7,1,"","NotCompletelyDefinedError"],[1,7,1,"","OptimizationError"],[1,7,1,"","UnbuildableError"],[1,7,1,"","UnderconstrainedError"]],"pylinkage.geometry":[[8,0,0,"-","core"],[8,0,0,"-","secants"]],"pylinkage.geometry.core":[[8,6,1,"","cyl_to_cart"],[8,6,1,"","dist"],[8,6,1,"","get_nearest_point"],[8,6,1,"","line_from_points"],[8,6,1,"","norm"],[8,6,1,"","sqr_dist"]],"pylinkage.geometry.secants":[[8,6,1,"","bounding_box"],[8,6,1,"","circle_intersect"],[8,6,1,"","circle_line_from_points_intersection"],[8,6,1,"","circle_line_intersection"],[8,6,1,"","intersection"],[8,6,1,"","line_line_intersection"]],"pylinkage.hypergraph":[[9,0,0,"-","core"],[9,0,0,"-","graph"],[9,0,0,"-","hierarchy"],[9,0,0,"-","mechanism_conversion"],[9,0,0,"-","serialization"],[9,0,0,"-","sim_conversion"]],"pylinkage.hypergraph.core":[[9,1,1,"","Edge"],[9,1,1,"","Hyperedge"],[9,1,1,"","Node"]],"pylinkage.hypergraph.core.Edge":[[9,4,1,"","connects"],[9,2,1,"","id"],[9,4,1,"","other_node"],[9,2,1,"","source"],[9,2,1,"","target"]],"pylinkage.hypergraph.core.Hyperedge":[[9,4,1,"","from_edges"],[9,2,1,"","id"],[9,2,1,"","name"],[9,2,1,"","nodes"],[9,4,1,"","to_edges"]],"pylinkage.hypergraph.core.Node":[[9,2,1,"","id"],[9,2,1,"","joint_type"],[9,2,1,"","name"],[9,2,1,"","role"]],"pylinkage.hypergraph.graph":[[9,1,1,"","HypergraphLinkage"]],"pylinkage.hypergraph.graph.HypergraphLinkage":[[9,4,1,"","add_edge"],[9,4,1,"","add_hyperedge"],[9,4,1,"","add_node"],[9,4,1,"","all_neighbors"],[9,4,1,"","copy"],[9,4,1,"","degree"],[9,4,1,"","driven_nodes"],[9,4,1,"","driver_nodes"],[9,2,1,"","edges"],[9,4,1,"","get_edge_between"],[9,4,1,"","get_edges_for_node"],[9,4,1,"","get_hyperedges_for_node"],[9,4,1,"","ground_nodes"],[9,4,1,"","hyperdegree"],[9,4,1,"","hyperedge_neighbors"],[9,2,1,"","hyperedges"],[9,2,1,"","name"],[9,4,1,"","neighbors"],[9,2,1,"","nodes"],[9,4,1,"","remove_edge"],[9,4,1,"","remove_hyperedge"],[9,4,1,"","remove_node"],[9,4,1,"","to_simple_graph"]],"pylinkage.hypergraph.hierarchy":[[9,1,1,"","ComponentInstance"],[9,1,1,"","Connection"],[9,1,1,"","HierarchicalLinkage"]],"pylinkage.hypergraph.hierarchy.ComponentInstance":[[9,4,1,"","get_port_qualified_node"],[9,4,1,"","get_qualified_node_id"],[9,2,1,"","id"],[9,2,1,"","name"],[9,2,1,"","ports"],[9,2,1,"","topology"]],"pylinkage.hypergraph.hierarchy.Connection":[[9,2,1,"","from_instance"],[9,2,1,"","from_port"],[9,2,1,"","to_instance"],[9,2,1,"","to_port"]],"pylinkage.hypergraph.hierarchy.HierarchicalLinkage":[[9,4,1,"","add_connection"],[9,4,1,"","add_instance"],[9,2,1,"","connections"],[9,4,1,"","flatten"],[9,4,1,"","get_all_port_nodes"],[9,2,1,"","instances"],[9,2,1,"","name"]],"pylinkage.hypergraph.mechanism_conversion":[[9,6,1,"","from_mechanism"],[9,6,1,"","to_mechanism"]],"pylinkage.hypergraph.serialization":[[9,6,1,"","component_instance_from_dict"],[9,6,1,"","component_instance_to_dict"],[9,6,1,"","connection_from_dict"],[9,6,1,"","connection_to_dict"],[9,6,1,"","edge_from_dict"],[9,6,1,"","edge_to_dict"],[9,6,1,"","graph_from_dict"],[9,6,1,"","graph_from_json"],[9,6,1,"","graph_to_dict"],[9,6,1,"","graph_to_json"],[9,6,1,"","hierarchical_from_dict"],[9,6,1,"","hierarchical_from_json"],[9,6,1,"","hierarchical_to_dict"],[9,6,1,"","hierarchical_to_json"],[9,6,1,"","hyperedge_from_dict"],[9,6,1,"","hyperedge_to_dict"],[9,6,1,"","node_from_dict"],[9,6,1,"","node_to_dict"]],"pylinkage.hypergraph.sim_conversion":[[9,6,1,"","from_sim_linkage"]],"pylinkage.linkage":[[10,0,0,"-","analysis"],[10,0,0,"-","sensitivity"],[10,0,0,"-","transmission"]],"pylinkage.linkage.analysis":[[10,6,1,"","bounding_box"],[10,6,1,"","extract_trajectories"],[10,6,1,"","extract_trajectory"],[10,6,1,"","kinematic_default_test"],[10,6,1,"","movement_bounding_box"]],"pylinkage.linkage.sensitivity":[[10,1,1,"","SensitivityAnalysis"],[10,1,1,"","ToleranceAnalysis"],[10,6,1,"","analyze_sensitivity"],[10,6,1,"","analyze_tolerance"]],"pylinkage.linkage.sensitivity.SensitivityAnalysis":[[10,2,1,"","baseline_path_metric"],[10,2,1,"","baseline_transmission"],[10,2,1,"","constraint_names"],[10,3,1,"","most_sensitive"],[10,2,1,"","perturbation_delta"],[10,2,1,"","perturbed_path_metrics"],[10,2,1,"","perturbed_transmission"],[10,2,1,"","sensitivities"],[10,3,1,"","sensitivity_ranking"],[10,4,1,"","to_dataframe"]],"pylinkage.linkage.sensitivity.ToleranceAnalysis":[[10,2,1,"","max_deviation"],[10,2,1,"","mean_deviation"],[10,2,1,"","nominal_path"],[10,2,1,"","output_cloud"],[10,4,1,"","plot_cloud"],[10,2,1,"","position_std"],[10,2,1,"","std_deviation"],[10,4,1,"","to_dataframe"],[10,2,1,"","tolerances"]],"pylinkage.linkage.transmission":[[10,1,1,"","StrokeAnalysis"],[10,1,1,"","TransmissionAngleAnalysis"],[10,6,1,"","analyze_stroke"],[10,6,1,"","analyze_transmission"],[10,6,1,"","compute_slide_position"],[10,6,1,"","compute_transmission_angle"],[10,6,1,"","stroke_at_position"],[10,6,1,"","transmission_angle_at_position"]],"pylinkage.linkage.transmission.StrokeAnalysis":[[10,3,1,"","amplitude"],[10,3,1,"","center_position"],[10,2,1,"","max_position"],[10,2,1,"","max_position_step"],[10,2,1,"","mean_position"],[10,2,1,"","min_position"],[10,2,1,"","min_position_step"],[10,2,1,"","positions"],[10,2,1,"","stroke_range"]],"pylinkage.linkage.transmission.TransmissionAngleAnalysis":[[10,3,1,"","acceptable_range"],[10,2,1,"","angles"],[10,2,1,"","is_acceptable"],[10,2,1,"","max_angle"],[10,2,1,"","max_angle_step"],[10,2,1,"","max_deviation"],[10,2,1,"","mean_angle"],[10,2,1,"","min_angle"],[10,2,1,"","min_angle_step"],[10,2,1,"","min_deviation"],[10,4,1,"","plot"],[10,4,1,"","worst_angle"]],"pylinkage.mechanism":[[11,0,0,"-","builder"],[11,0,0,"-","factories"],[11,0,0,"-","joint"],[11,0,0,"-","link"],[11,0,0,"-","mechanism"],[11,0,0,"-","serialization"]],"pylinkage.mechanism.builder":[[11,1,1,"","Connection"],[11,1,1,"","MechanismBuilder"],[11,1,1,"","PendingLink"],[11,1,1,"","PendingTracker"],[11,1,1,"","Port"],[11,1,1,"","PrismaticConnection"],[11,1,1,"","SlideAxis"]],"pylinkage.mechanism.builder.Connection":[[11,2,1,"","joint_type"],[11,2,1,"","port1"],[11,2,1,"","port2"]],"pylinkage.mechanism.builder.MechanismBuilder":[[11,4,1,"","add_arc_driver_link"],[11,4,1,"","add_driver_link"],[11,4,1,"","add_ground_link"],[11,4,1,"","add_link"],[11,4,1,"","add_point_tracker"],[11,4,1,"","add_quaternary_link"],[11,4,1,"","add_slide_axis"],[11,4,1,"","add_ternary_link"],[11,4,1,"","build"],[11,4,1,"","connect"],[11,4,1,"","connect_prismatic"],[11,2,1,"","name"],[11,4,1,"","set_branch"]],"pylinkage.mechanism.builder.PendingLink":[[11,2,1,"","angular_velocity"],[11,2,1,"","arc_end"],[11,2,1,"","arc_start"],[11,4,1,"","get_port_distance"],[11,2,1,"","id"],[11,2,1,"","initial_angle"],[11,2,1,"","is_arc_driver"],[11,2,1,"","is_driver"],[11,2,1,"","length"],[11,2,1,"","motor_port"],[11,2,1,"","port_geometry"],[11,2,1,"","ports"]],"pylinkage.mechanism.builder.PendingTracker":[[11,2,1,"","angle"],[11,2,1,"","distance"],[11,2,1,"","id"],[11,2,1,"","ref_port1"],[11,2,1,"","ref_port2"]],"pylinkage.mechanism.builder.Port":[[11,2,1,"","id"],[11,2,1,"","local_position"]],"pylinkage.mechanism.builder.PrismaticConnection":[[11,2,1,"","axis_id"],[11,2,1,"","port"]],"pylinkage.mechanism.builder.SlideAxis":[[11,2,1,"","direction"],[11,4,1,"","get_line_points"],[11,4,1,"","get_normalized_direction"],[11,2,1,"","id"],[11,2,1,"","point"]],"pylinkage.mechanism.factories":[[11,6,1,"","fourbar"],[11,6,1,"","slider_crank"]],"pylinkage.mechanism.joint":[[11,1,1,"","GroundJoint"],[11,1,1,"","Joint"],[11,1,1,"","JointType"],[11,1,1,"","PrismaticJoint"],[11,1,1,"","RevoluteJoint"],[11,1,1,"","TrackerJoint"]],"pylinkage.mechanism.joint.GroundJoint":[[11,2,1,"","is_ground"],[11,3,1,"","joint_type"]],"pylinkage.mechanism.joint.Joint":[[11,2,1,"","acceleration"],[11,4,1,"","coord"],[11,2,1,"","id"],[11,4,1,"","is_defined"],[11,3,1,"","joint_type"],[11,3,1,"","links"],[11,2,1,"","name"],[11,2,1,"","position"],[11,4,1,"","set_coord"],[11,2,1,"","velocity"],[11,3,1,"","x"],[11,3,1,"","y"]],"pylinkage.mechanism.joint.JointType":[[11,2,1,"","GROUND"],[11,2,1,"","PRISMATIC"],[11,2,1,"","REVOLUTE"],[11,2,1,"","TRACKER"]],"pylinkage.mechanism.joint.PrismaticJoint":[[11,2,1,"","axis"],[11,4,1,"","get_axis_normalized"],[11,3,1,"","joint_type"],[11,2,1,"","line_point"],[11,2,1,"","slide_distance"]],"pylinkage.mechanism.joint.RevoluteJoint":[[11,3,1,"","joint_type"]],"pylinkage.mechanism.joint.TrackerJoint":[[11,2,1,"","angle"],[11,2,1,"","distance"],[11,3,1,"","joint_type"],[11,2,1,"","ref_joint1_id"],[11,2,1,"","ref_joint2_id"],[11,4,1,"","update_position"]],"pylinkage.mechanism.link":[[11,1,1,"","ArcDriverLink"],[11,1,1,"","DriverLink"],[11,1,1,"","GroundLink"],[11,1,1,"","Link"],[11,1,1,"","LinkType"]],"pylinkage.mechanism.link.ArcDriverLink":[[11,2,1,"","angular_velocity"],[11,2,1,"","arc_end"],[11,2,1,"","arc_start"],[11,2,1,"","current_angle"],[11,2,1,"","initial_angle"],[11,3,1,"","link_type"],[11,2,1,"","motor_joint"],[11,3,1,"","output_joint"],[11,3,1,"","radius"],[11,4,1,"","reset"],[11,4,1,"","step"]],"pylinkage.mechanism.link.DriverLink":[[11,2,1,"","angular_velocity"],[11,2,1,"","current_angle"],[11,2,1,"","initial_angle"],[11,3,1,"","link_type"],[11,2,1,"","motor_joint"],[11,3,1,"","output_joint"],[11,3,1,"","radius"],[11,4,1,"","reset"],[11,4,1,"","step"]],"pylinkage.mechanism.link.GroundLink":[[11,2,1,"","is_ground"],[11,3,1,"","link_type"]],"pylinkage.mechanism.link.Link":[[11,4,1,"","cache_distances"],[11,4,1,"","get_distance"],[11,2,1,"","id"],[11,2,1,"","joints"],[11,3,1,"","length"],[11,3,1,"","link_type"],[11,2,1,"","name"],[11,3,1,"","order"],[11,4,1,"","other_joint"],[11,4,1,"","set_distance"]],"pylinkage.mechanism.link.LinkType":[[11,2,1,"","BINARY"],[11,2,1,"","DRIVER"],[11,2,1,"","GROUND"],[11,2,1,"","QUATERNARY"],[11,2,1,"","TERNARY"]],"pylinkage.mechanism.mechanism":[[11,1,1,"","Mechanism"]],"pylinkage.mechanism.mechanism.Mechanism":[[11,4,1,"","analyze_sensitivity"],[11,4,1,"","analyze_stroke"],[11,4,1,"","analyze_tolerance"],[11,4,1,"","analyze_transmission"],[11,4,1,"","compile"],[11,4,1,"","get_accelerations"],[11,4,1,"","get_constraints"],[11,4,1,"","get_coords"],[11,4,1,"","get_joint"],[11,4,1,"","get_joint_positions"],[11,4,1,"","get_link"],[11,4,1,"","get_rotation_period"],[11,4,1,"","get_velocities"],[11,2,1,"","ground"],[11,4,1,"","indeterminacy"],[11,2,1,"","joints"],[11,2,1,"","links"],[11,2,1,"","name"],[11,4,1,"","rebuild"],[11,4,1,"","reset"],[11,4,1,"","set_completely"],[11,4,1,"","set_constraints"],[11,4,1,"","set_coords"],[11,4,1,"","set_input_velocity"],[11,4,1,"","set_joint_positions"],[11,4,1,"","simulation"],[11,4,1,"","step"],[11,4,1,"","step_fast"],[11,4,1,"","step_fast_with_kinematics"],[11,4,1,"","step_with_derivatives"],[11,4,1,"","stroke_position"],[11,4,1,"","transmission_angle"]],"pylinkage.mechanism.serialization":[[11,6,1,"","is_legacy_format"],[11,6,1,"","joint_from_dict"],[11,6,1,"","joint_to_dict"],[11,6,1,"","link_from_dict"],[11,6,1,"","link_to_dict"],[11,6,1,"","mechanism_from_dict"],[11,6,1,"","mechanism_from_json"],[11,6,1,"","mechanism_to_dict"],[11,6,1,"","mechanism_to_json"]],"pylinkage.optimization":[[12,0,0,"-","async_optimization"],[12,0,0,"-","co_optimization_types"],[12,0,0,"-","grid_search"],[12,0,0,"-","mixed_variable"],[12,0,0,"-","multi_objective"],[12,0,0,"-","operators"],[12,0,0,"-","particle_swarm"],[12,0,0,"-","scipy_optimize"],[12,0,0,"-","topology_neighborhood"],[12,0,0,"-","utils"],[12,0,0,"-","warm_start"]],"pylinkage.optimization.async_optimization":[[12,1,1,"","OptimizationProgress"],[12,5,1,"","ProgressCallback"],[12,6,1,"","differential_evolution_optimization_async"],[12,6,1,"","minimize_linkage_async"],[12,6,1,"","particle_swarm_optimization_async"],[12,6,1,"","trials_and_errors_optimization_async"]],"pylinkage.optimization.async_optimization.OptimizationProgress":[[12,2,1,"","best_score"],[12,2,1,"","current_iteration"],[12,2,1,"","is_complete"],[12,3,1,"","progress_fraction"],[12,2,1,"","total_iterations"]],"pylinkage.optimization.co_optimization_types":[[12,1,1,"","CoOptSolution"],[12,1,1,"","CoOptimizationConfig"],[12,1,1,"","CoOptimizationResult"],[12,1,1,"","MixedChromosome"]],"pylinkage.optimization.co_optimization_types.CoOptSolution":[[12,2,1,"","chromosome"],[12,2,1,"","linkage"],[12,2,1,"","scores"],[12,2,1,"","topology_entry"]],"pylinkage.optimization.co_optimization_types.CoOptimizationConfig":[[12,2,1,"","algorithm"],[12,2,1,"","crossover_prob"],[12,2,1,"","dimension_bounds_factor"],[12,2,1,"","dimension_mutation_sigma"],[12,2,1,"","max_links"],[12,2,1,"","n_generations"],[12,2,1,"","pop_size"],[12,2,1,"","seed"],[12,2,1,"","topology_mutation_rate"],[12,2,1,"","verbose"]],"pylinkage.optimization.co_optimization_types.CoOptimizationResult":[[12,2,1,"","config"],[12,2,1,"","convergence_history"],[12,2,1,"","n_evaluations"],[12,2,1,"","pareto_front"],[12,2,1,"","solutions"]],"pylinkage.optimization.co_optimization_types.MixedChromosome":[[12,4,1,"","copy"],[12,2,1,"","dimensions"],[12,2,1,"","topology_idx"]],"pylinkage.optimization.collections":[[13,0,0,"-","agent"],[13,0,0,"-","mutable_agent"],[13,0,0,"-","pareto"]],"pylinkage.optimization.collections.agent":[[13,1,1,"","Agent"]],"pylinkage.optimization.collections.agent.Agent":[[13,3,1,"","init_positions"]],"pylinkage.optimization.collections.mutable_agent":[[13,1,1,"","MutableAgent"]],"pylinkage.optimization.collections.mutable_agent.MutableAgent":[[13,2,1,"","dimensions"],[13,3,1,"","init_positions"],[13,2,1,"","initial_positions"],[13,2,1,"","score"]],"pylinkage.optimization.collections.pareto":[[13,1,1,"","ParetoFront"],[13,1,1,"","ParetoSolution"]],"pylinkage.optimization.collections.pareto.ParetoFront":[[13,4,1,"","best_compromise"],[13,4,1,"","filter"],[13,4,1,"","hypervolume"],[13,3,1,"","n_objectives"],[13,2,1,"","objective_names"],[13,4,1,"","plot"],[13,4,1,"","scores_array"],[13,2,1,"","solutions"]],"pylinkage.optimization.collections.pareto.ParetoSolution":[[13,2,1,"","dimensions"],[13,4,1,"","dominates"],[13,3,1,"","init_positions"],[13,2,1,"","initial_positions"],[13,2,1,"","scores"]],"pylinkage.optimization.grid_search":[[12,6,1,"","fast_variator"],[12,6,1,"","sequential_variator"],[12,6,1,"","trials_and_errors_optimization"]],"pylinkage.optimization.mixed_variable":[[12,6,1,"","co_optimize"]],"pylinkage.optimization.multi_objective":[[12,1,1,"","LinkageProblem"],[12,6,1,"","multi_objective_optimization"]],"pylinkage.optimization.multi_objective.LinkageProblem":[[12,4,1,"","close"],[12,3,1,"","problem"]],"pylinkage.optimization.operators":[[12,1,1,"","MixedCrossover"],[12,1,1,"","MixedMutation"],[12,6,1,"","warm_start_sampling"]],"pylinkage.optimization.particle_swarm":[[12,6,1,"","particle_swarm_optimization"]],"pylinkage.optimization.scipy_optimize":[[12,6,1,"","chain_optimizers"],[12,6,1,"","differential_evolution_optimization"],[12,6,1,"","dual_annealing_optimization"],[12,6,1,"","minimize_linkage"]],"pylinkage.optimization.topology_neighborhood":[[12,1,1,"","TopologyNeighbor"],[12,6,1,"","build_neighborhood_graph"],[12,6,1,"","topology_distance"],[12,6,1,"","topology_neighbors"]],"pylinkage.optimization.topology_neighborhood.TopologyNeighbor":[[12,2,1,"","description"],[12,2,1,"","operation"],[12,2,1,"","target_id"]],"pylinkage.optimization.utils":[[12,6,1,"","generate_bounds"],[12,6,1,"","kinematic_maximization"],[12,6,1,"","kinematic_minimization"]],"pylinkage.optimization.warm_start":[[12,6,1,"","synthesis_to_chromosomes"],[12,6,1,"","warm_start_co_optimization"]],"pylinkage.simulation":[[15,0,0,"-","linkage"]],"pylinkage.simulation.linkage":[[15,1,1,"","Linkage"]],"pylinkage.simulation.linkage.Linkage":[[15,4,1,"","analyze_sensitivity"],[15,4,1,"","analyze_stroke"],[15,4,1,"","analyze_tolerance"],[15,4,1,"","analyze_transmission"],[15,4,1,"","compile"],[15,2,1,"","components"],[15,3,1,"","dyads"],[15,4,1,"","get_accelerations"],[15,4,1,"","get_constraints"],[15,4,1,"","get_coords"],[15,4,1,"","get_rotation_period"],[15,4,1,"","get_velocities"],[15,4,1,"","indeterminacy"],[15,2,1,"","name"],[15,4,1,"","rebuild"],[15,4,1,"","set_completely"],[15,4,1,"","set_constraints"],[15,4,1,"","set_coords"],[15,4,1,"","set_input_velocity"],[15,4,1,"","simulation"],[15,4,1,"","step"],[15,4,1,"","step_fast"],[15,4,1,"","step_fast_with_kinematics"],[15,4,1,"","step_with_derivatives"],[15,4,1,"","stroke_position"],[15,4,1,"","to_hypergraph"],[15,4,1,"","transmission_angle"]],"pylinkage.solver":[[16,0,0,"-","acceleration"],[16,0,0,"-","groups"],[16,0,0,"-","joints"],[16,0,0,"-","simulation"],[16,0,0,"-","solve"],[16,0,0,"-","types"],[16,0,0,"-","velocity"]],"pylinkage.solver.acceleration":[[16,6,1,"","solve_crank_acceleration"],[16,6,1,"","solve_fixed_acceleration"],[16,6,1,"","solve_prismatic_acceleration"],[16,6,1,"","solve_revolute_acceleration"],[16,6,1,"","solve_rigid_body_acceleration"]],"pylinkage.solver.groups":[[16,6,1,"","solve_pp_dyad"],[16,6,1,"","solve_rrp_dyad"],[16,6,1,"","solve_rrr_dyad"],[16,6,1,"","solve_triad"]],"pylinkage.solver.joints":[[16,6,1,"","solve_arc_crank"],[16,6,1,"","solve_crank"],[16,6,1,"","solve_fixed"],[16,6,1,"","solve_line_line"],[16,6,1,"","solve_linear"],[16,6,1,"","solve_linear_actuator"],[16,6,1,"","solve_oscillating_cam_follower"],[16,6,1,"","solve_revolute"],[16,6,1,"","solve_translating_cam_follower"]],"pylinkage.solver.simulation":[[16,6,1,"","first_nan_step"],[16,6,1,"","has_nan_positions"],[16,6,1,"","simulate"],[16,6,1,"","simulate_with_kinematics"],[16,6,1,"","step_single"],[16,6,1,"","step_single_acceleration"],[16,6,1,"","step_single_velocity"]],"pylinkage.solver.solve":[[16,6,1,"","solve_decomposition"],[16,6,1,"","solve_group"]],"pylinkage.solver.types":[[16,1,1,"","SolverData"]],"pylinkage.solver.types.SolverData":[[16,2,1,"","accelerations"],[16,2,1,"","alpha_values"],[16,2,1,"","constraint_counts"],[16,2,1,"","constraint_offsets"],[16,2,1,"","constraints"],[16,4,1,"","copy"],[16,2,1,"","crank_indices"],[16,2,1,"","joint_types"],[16,3,1,"","n_constraints"],[16,3,1,"","n_joints"],[16,2,1,"","omega_values"],[16,2,1,"","parent_indices"],[16,2,1,"","positions"],[16,2,1,"","solve_order"],[16,2,1,"","velocities"]],"pylinkage.solver.velocity":[[16,6,1,"","solve_crank_velocity"],[16,6,1,"","solve_fixed_velocity"],[16,6,1,"","solve_prismatic_velocity"],[16,6,1,"","solve_revolute_velocity"],[16,6,1,"","solve_rigid_body_velocity"]],"pylinkage.symbolic":[[17,0,0,"-","conversion"],[17,0,0,"-","geometry"],[17,0,0,"-","joints"],[17,0,0,"-","linkage"],[17,0,0,"-","optimization"],[17,0,0,"-","solver"]],"pylinkage.symbolic.conversion":[[17,6,1,"","fourbar_symbolic"],[17,6,1,"","get_numeric_parameters"]],"pylinkage.symbolic.geometry":[[17,6,1,"","symbolic_circle_intersect"],[17,6,1,"","symbolic_circle_line_intersect"],[17,6,1,"","symbolic_cyl_to_cart"],[17,6,1,"","symbolic_dist"],[17,6,1,"","symbolic_sqr_dist"]],"pylinkage.symbolic.joints":[[17,1,1,"","SymCrank"],[17,1,1,"","SymJoint"],[17,1,1,"","SymRevolute"],[17,1,1,"","SymStatic"]],"pylinkage.symbolic.joints.SymCrank":[[17,4,1,"","constraint_equations"],[17,3,1,"","parameters"],[17,4,1,"","position_expr"],[17,2,1,"","r"],[17,2,1,"","theta"]],"pylinkage.symbolic.joints.SymJoint":[[17,4,1,"","constraint_equations"],[17,2,1,"","name"],[17,3,1,"","parameters"],[17,2,1,"","parent0"],[17,2,1,"","parent1"],[17,4,1,"","position_expr"]],"pylinkage.symbolic.joints.SymRevolute":[[17,2,1,"","branch"],[17,4,1,"","constraint_equations"],[17,3,1,"","parameters"],[17,4,1,"","position_expr"],[17,2,1,"","r0"],[17,2,1,"","r1"]],"pylinkage.symbolic.joints.SymStatic":[[17,4,1,"","constraint_equations"],[17,4,1,"","position_expr"]],"pylinkage.symbolic.linkage":[[17,1,1,"","SymbolicLinkage"]],"pylinkage.symbolic.linkage.SymbolicLinkage":[[17,4,1,"","coupler_curve"],[17,4,1,"","get_constraint_equations"],[17,4,1,"","get_joint"],[17,4,1,"","get_trajectory_expressions"],[17,4,1,"","jacobian"],[17,4,1,"","jacobian_theta"],[17,2,1,"","joints"],[17,2,1,"","name"],[17,3,1,"","parameters"],[17,4,1,"","simplify"],[17,4,1,"","substitute"],[17,2,1,"","theta"]],"pylinkage.symbolic.optimization":[[17,1,1,"","OptimizationResult"],[17,1,1,"","SymbolicOptimizer"],[17,6,1,"","generate_symbolic_bounds"],[17,6,1,"","symbolic_gradient"],[17,6,1,"","symbolic_hessian"]],"pylinkage.symbolic.optimization.OptimizationResult":[[17,2,1,"","iterations"],[17,2,1,"","message"],[17,2,1,"","objective_value"],[17,2,1,"","params"],[17,2,1,"","success"]],"pylinkage.symbolic.optimization.SymbolicOptimizer":[[17,4,1,"","evaluate"],[17,4,1,"","gradient"],[17,4,1,"","optimize"]],"pylinkage.symbolic.solver":[[17,6,1,"","check_buildability"],[17,6,1,"","compute_trajectory_numeric"],[17,6,1,"","create_trajectory_functions"],[17,6,1,"","eliminate_theta"],[17,6,1,"","solve_linkage_symbolically"]],"pylinkage.synthesis":[[18,0,0,"-","burmester"],[18,0,0,"-","conversion"],[18,0,0,"-","core"],[18,0,0,"-","function_generation"],[18,0,0,"-","generalized"],[18,0,0,"-","motion_generation"],[18,0,0,"-","multi_topology"],[18,0,0,"-","path_generation"],[18,0,0,"-","ranking"],[18,0,0,"-","six_bar"],[18,0,0,"-","topology_types"],[18,0,0,"-","utils"]],"pylinkage.synthesis.burmester":[[18,6,1,"","complex_to_point"],[18,6,1,"","compute_all_poles"],[18,6,1,"","compute_circle_point_curve"],[18,6,1,"","compute_pole"],[18,6,1,"","compute_relative_pole"],[18,6,1,"","point_to_complex"],[18,6,1,"","select_compatible_dyads"]],"pylinkage.synthesis.conversion":[[18,6,1,"","fourbar_from_lengths"],[18,6,1,"","linkage_to_synthesis_params"],[18,6,1,"","nbar_solution_to_linkage"],[18,6,1,"","solution_to_linkage"],[18,6,1,"","solutions_to_linkages"],[18,6,1,"","stephenson_from_lengths"],[18,6,1,"","watt_from_lengths"]],"pylinkage.synthesis.core":[[18,1,1,"","BurmesterCurves"],[18,1,1,"","BurmesterDyad"],[18,1,1,"","SynthesisProblem"],[18,1,1,"","SynthesisResult"]],"pylinkage.synthesis.core.BurmesterCurves":[[18,2,1,"","center_curve"],[18,2,1,"","circle_curve"],[18,4,1,"","filter_finite"],[18,4,1,"","get_all_dyads"],[18,4,1,"","get_dyad"],[18,2,1,"","is_discrete"],[18,2,1,"","parameter"],[18,4,1,"","sample"]],"pylinkage.synthesis.core.BurmesterDyad":[[18,2,1,"","center_point"],[18,2,1,"","circle_point"],[18,3,1,"","link_length"],[18,4,1,"","to_cartesian"],[18,4,1,"","to_dyad_solution"]],"pylinkage.synthesis.core.SynthesisProblem":[[18,2,1,"","angle_pairs"],[18,2,1,"","ground_length"],[18,2,1,"","ground_pivot_a"],[18,2,1,"","ground_pivot_d"],[18,3,1,"","num_precision_positions"],[18,2,1,"","poses"],[18,2,1,"","precision_points"],[18,2,1,"","synthesis_type"]],"pylinkage.synthesis.core.SynthesisResult":[[18,2,1,"","branch_info"],[18,3,1,"","ensemble"],[18,2,1,"","problem"],[18,2,1,"","raw_solutions"],[18,2,1,"","solutions"],[18,2,1,"","warnings"]],"pylinkage.synthesis.function_generation":[[18,6,1,"","coefficients_to_link_lengths"],[18,6,1,"","freudenstein_equation"],[18,6,1,"","function_generation"],[18,6,1,"","solve_freudenstein_3_positions"],[18,6,1,"","solve_freudenstein_least_squares"],[18,6,1,"","verify_function_generation"]],"pylinkage.synthesis.generalized":[[18,6,1,"","generalized_synthesis"]],"pylinkage.synthesis.motion_generation":[[18,6,1,"","motion_generation"],[18,6,1,"","motion_generation_3_poses"]],"pylinkage.synthesis.multi_topology":[[18,6,1,"","rank_solutions"],[18,6,1,"","synthesize"]],"pylinkage.synthesis.path_generation":[[18,5,1,"","DEFAULT_ORIENTATION_RESOLUTION"],[18,5,1,"","MAX_ORIENTATION_CANDIDATES"],[18,6,1,"","path_generation"],[18,6,1,"","path_generation_with_timing"],[18,6,1,"","verify_path_generation"]],"pylinkage.synthesis.ranking":[[18,6,1,"","compute_compactness"],[18,6,1,"","compute_link_ratio"],[18,6,1,"","compute_metrics"],[18,6,1,"","compute_path_accuracy"],[18,6,1,"","compute_transmission_angle"],[18,6,1,"","score_solution"]],"pylinkage.synthesis.six_bar":[[18,6,1,"","six_bar_path_generation"]],"pylinkage.synthesis.topology_types":[[18,1,1,"","GroupSynthesisResult"],[18,1,1,"","NBarSolution"],[18,1,1,"","QualityMetrics"],[18,1,1,"","TopologySolution"]],"pylinkage.synthesis.topology_types.GroupSynthesisResult":[[18,2,1,"","dyads"],[18,2,1,"","group_index"],[18,2,1,"","group_signature"],[18,2,1,"","joint_positions"],[18,2,1,"","precision_indices"],[18,2,1,"","residual"]],"pylinkage.synthesis.topology_types.NBarSolution":[[18,2,1,"","coupler_node"],[18,2,1,"","coupler_point"],[18,2,1,"","group_results"],[18,2,1,"","joint_positions"],[18,2,1,"","link_lengths"],[18,2,1,"","topology_id"]],"pylinkage.synthesis.topology_types.QualityMetrics":[[18,2,1,"","compactness"],[18,2,1,"","is_grashof"],[18,2,1,"","link_ratio"],[18,2,1,"","min_transmission_angle"],[18,2,1,"","num_links"],[18,2,1,"","overall_score"],[18,2,1,"","path_accuracy"]],"pylinkage.synthesis.topology_types.TopologySolution":[[18,2,1,"","linkage"],[18,2,1,"","metrics"],[18,2,1,"","solution"],[18,2,1,"","topology_entry"]],"pylinkage.synthesis.utils":[[18,1,1,"","GrashofType"],[18,6,1,"","angle_between_points"],[18,6,1,"","check_condition_number"],[18,6,1,"","complex_to_point"],[18,6,1,"","crank_angle_limits"],[18,6,1,"","distance"],[18,6,1,"","grashof_check"],[18,6,1,"","is_crank_rocker"],[18,6,1,"","is_grashof"],[18,6,1,"","normalize_angle"],[18,6,1,"","point_to_complex"],[18,6,1,"","rotate_point"],[18,6,1,"","rotation_matrix_2d"],[18,6,1,"","validate_fourbar"]],"pylinkage.synthesis.utils.GrashofType":[[18,2,1,"","CHANGE_POINT"],[18,2,1,"","GRASHOF_CRANK_ROCKER"],[18,2,1,"","GRASHOF_DOUBLE_CRANK"],[18,2,1,"","GRASHOF_DOUBLE_ROCKER"],[18,2,1,"","GRASHOF_ROCKER_CRANK"],[18,2,1,"","NON_GRASHOF"]],"pylinkage.topology":[[19,0,0,"-","analysis"],[19,0,0,"-","catalog"],[19,0,0,"-","enumeration"],[19,0,0,"-","isomorphism"]],"pylinkage.topology.analysis":[[19,1,1,"","MobilityInfo"],[19,6,1,"","compute_dof"],[19,6,1,"","compute_mobility"]],"pylinkage.topology.analysis.MobilityInfo":[[19,2,1,"","dof"],[19,2,1,"","num_full_joints"],[19,2,1,"","num_half_joints"],[19,2,1,"","num_links"]],"pylinkage.topology.catalog":[[19,1,1,"","CatalogEntry"],[19,1,1,"","TopologyCatalog"],[19,6,1,"","generate_catalog"],[19,6,1,"","load_catalog"]],"pylinkage.topology.catalog.CatalogEntry":[[19,2,1,"","assur_groups"],[19,2,1,"","dof"],[19,2,1,"","family"],[19,2,1,"","id"],[19,2,1,"","link_assortment"],[19,2,1,"","name"],[19,2,1,"","num_joints"],[19,2,1,"","num_links"],[19,4,1,"","to_graph"]],"pylinkage.topology.catalog.TopologyCatalog":[[19,4,1,"","all_graphs"],[19,4,1,"","by_family"],[19,4,1,"","by_num_links"],[19,4,1,"","compatible_topologies"],[19,2,1,"","entries"],[19,4,1,"","from_json"],[19,4,1,"","get"],[19,4,1,"","load_builtin"],[19,4,1,"","to_json"],[19,4,1,"","topology_by_index"],[19,4,1,"","topology_index"]],"pylinkage.topology.enumeration":[[19,6,1,"","enumerate_all"],[19,6,1,"","enumerate_topologies"]],"pylinkage.topology.isomorphism":[[19,6,1,"","are_isomorphic"],[19,6,1,"","canonical_form"],[19,6,1,"","canonical_hash"]],"pylinkage.visualizer":[[21,0,0,"-","animated"],[21,0,0,"-","core"],[21,0,0,"-","drawsvg_viz"],[21,0,0,"-","dxf_export"],[21,0,0,"-","kinematics"],[21,0,0,"-","plotly_viz"],[21,0,0,"-","pso_plots"],[21,0,0,"-","static"],[21,0,0,"-","step_export"],[21,0,0,"-","symbols"]],"pylinkage.visualizer.animated":[[21,6,1,"","plot_kinematic_linkage"],[21,6,1,"","show_linkage"],[21,6,1,"","swarm_tiled_repr"],[21,6,1,"","update_animated_plot"]],"pylinkage.visualizer.core":[[21,6,1,"","build_connections"],[21,6,1,"","build_rails"],[21,6,1,"","get_components"],[21,6,1,"","get_parent_pairs"],[21,6,1,"","get_rail_pairs"],[21,6,1,"","is_prismatic_like"],[21,6,1,"","is_revolute_like"],[21,6,1,"","is_static_like"],[21,6,1,"","resolve_component"]],"pylinkage.visualizer.drawsvg_viz":[[21,6,1,"","plot_linkage_svg"],[21,6,1,"","plot_linkage_svg_with_velocity"],[21,6,1,"","save_linkage_svg"],[21,6,1,"","save_linkage_svg_with_velocity"]],"pylinkage.visualizer.dxf_export":[[21,6,1,"","plot_linkage_dxf"],[21,6,1,"","save_linkage_dxf"]],"pylinkage.visualizer.kinematics":[[21,6,1,"","animate_kinematics"],[21,6,1,"","plot_acceleration_vectors"],[21,6,1,"","plot_kinematics_frame"],[21,6,1,"","plot_velocity_vectors"],[21,6,1,"","show_kinematics"]],"pylinkage.visualizer.plotly_viz":[[21,6,1,"","animate_linkage_plotly"],[21,6,1,"","interactive_linkage_plotly"],[21,6,1,"","plot_linkage_plotly"],[21,6,1,"","plot_linkage_plotly_with_velocity"]],"pylinkage.visualizer.pso_plots":[[21,6,1,"","animate_dashboard"],[21,6,1,"","animate_parallel_coordinates"],[21,6,1,"","dashboard_layout"],[21,6,1,"","normalize_data"],[21,6,1,"","parallel_coordinates_plot"]],"pylinkage.visualizer.static":[[21,6,1,"","plot_static_linkage"]],"pylinkage.visualizer.step_export":[[21,1,1,"","JointProfile"],[21,1,1,"","LinkProfile"],[21,6,1,"","build_linkage_3d"],[21,6,1,"","save_linkage_step"]],"pylinkage.visualizer.step_export.JointProfile":[[21,2,1,"","length"],[21,2,1,"","radius"]],"pylinkage.visualizer.step_export.LinkProfile":[[21,2,1,"","fillet_radius"],[21,2,1,"","thickness"],[21,2,1,"","width"]],"pylinkage.visualizer.symbols":[[21,1,1,"","LinkStyle"],[21,1,1,"","SymbolSpec"],[21,1,1,"","SymbolType"],[21,6,1,"","get_link_color"],[21,6,1,"","get_symbol_spec"],[21,6,1,"","is_ground_joint"]],"pylinkage.visualizer.symbols.LinkStyle":[[21,2,1,"","BAR"],[21,2,1,"","BONE"],[21,2,1,"","LINE"]],"pylinkage.visualizer.symbols.SymbolSpec":[[21,2,1,"","color"],[21,2,1,"","label_offset"],[21,2,1,"","size"],[21,2,1,"","symbol_type"]],"pylinkage.visualizer.symbols.SymbolType":[[21,2,1,"","CRANK"],[21,2,1,"","FIXED"],[21,2,1,"","GROUND"],[21,2,1,"","LINEAR"],[21,2,1,"","REVOLUTE"],[21,2,1,"","SLIDER"]]},"objnames":{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","attribute","Python attribute"],"3":["py","property","Python property"],"4":["py","method","Python method"],"5":["py","data","Python data"],"6":["py","function","Python function"],"7":["py","exception","Python exception"]},"objtypes":{"0":"py:module","1":"py:class","2":"py:attribute","3":"py:property","4":"py:method","5":"py:data","6":"py:function","7":"py:exception"},"terms":{"0066cc":[21,36],"006s":39,"01ms":39,"0f":31,"100x":23,"1e":[17,36],"1f":[31,38,39,40],"1mm":38,"1x":23,"2196f3":21,"2c":23,"2d":[12,13,16,18,23],"2e":12,"2f":[26,32,36,40],"2j\u2081":23,"2nd":18,"2x":36,"2x2":[16,18],"35000x":39,"350ms":39,"350s":39,"3d":[12,13,21,37],"3f":[18,30,31,32,36,38,39,40],"3x":[23,39],"4f":[10,38,39,40],"4x":[22,23],"5m":29,"5mm":38,"5x":[22,23],"60x":39,"6f":39,"6ms":39,"7840u":22,"7x":29,"800px":41,"8x":23,"A":[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,24,25,26,30,31,32,33,34,36,37,38,39,40,41],"AND":[18,40],"After":[23,25,36,39],"All":[3,11,12,14,16,18,19,23,24,30,31,34,37,38,39,40],"An":[1,2,3,7,9,11,12,16,19,21,26,30,31,41],"And":18,"At":[3,5,16,18,31,39],"Being":24,"Both":[3,16,22,23,34,40],"By":[36,38,40],"Could":23,"Do":[12,28],"Each":[1,6,10,11,12,14,16,18,19,21,22,23,25,33,34,39],"For":[1,3,7,9,10,11,12,13,15,16,17,18,19,21,22,23,24,29,30,31,33,36,38,39,40,41],"From":[8,16,23],"Further":41,"Has":31,"Here":[12,18,30,32,33,39],"How":[12,28,38,39],"I":[3,23,26,38],"If":[1,2,3,7,9,10,11,12,13,14,15,16,17,18,19,21,22,23,26,38,39,40],"In":[12,18,21,23,41],"Is":[38,40],"It":[1,3,6,7,8,9,11,12,13,15,16,18,21,22,23,25,26,28],"Its":[11,17,23,29,40],"More":[18,23,30],"Most":[11,18,37,38],"My":[26,41],"NO":3,"NOT":3,"No":[1,3,6,7,8,13,23,24,25,30,34,40],"Not":[19,40],"On":[11,22],"Or":[30,33,40,41],"Other":24,"Our":28,"Over":[18,19],"Same":[1,2,8,12,23,34],"Should":[1,11,12,13],"Some":[23,25,33],"Such":[14,23],"That":[22,23,25],"The":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,29,30,31,32,33,36,37,38,39,40,41],"Their":18,"There":[12,39],"These":[3,7,9,11,16,22,23,31,34,38],"They":[1,3,6,11,23,25,29],"This":[1,2,3,4,5,6,7,9,10,11,12,15,16,17,18,19,21,23,24,26,30,31,32,33,34,36,37,38,39,40,41],"Those":[7,22,23],"To":[0,3,21,25,29,33],"Under":[25,34],"Up":18,"We":[16,18,23,24,33],"What":[23,28,35],"When":[1,7,11,12,16,23,32,39,40],"Where":[16,18],"Which":[1,10,12,13,18,21,23,38,41],"With":[3,18,23,29,32,36,37,40],"You":[13,23,29,34,35,38,40,41],"Your":30,"_":[3,7,26,29,30,36,38,39,41],"__all__":[0,23,25],"__bool__":23,"__dict__":32,"__find_solving_order__":23,"__getattr__":23,"__getitem__":23,"__init__":[23,32],"__iter__":23,"__len__":23,"__main__":26,"__name__":[3,26,34],"__secant_circles_intersections__":23,"__slots__":32,"_adjac":[3,9],"_agentbas":13,"_anchorproxi":[1,2,6,7,21,23],"_assur_dimens":11,"_assur_graph":11,"_cached_dist":11,"_compat":[4,10,23],"_compute_crank_limit":23,"_configur":11,"_connect":11,"_constraints_by_joint":26,"_convers":23,"_crank":36,"_decomposit":[3,11],"_deprec":23,"_dimens":3,"_direct":11,"_driver_link":11,"_ensembl":18,"_generic_nbar_to_linkag":23,"_get_anchor_posit":[23,32],"_graph":3,"_graph_data":19,"_ground_link_id":11,"_ground_port":11,"_hyperedge_membership":9,"_joint_map":11,"_link":[11,23],"_link_map":11,"_mechanism_to_solver_data":23,"_member":25,"_numeric_":[17,39],"_numeric_r":39,"_numeric_r0":39,"_parent":21,"_pending_link":11,"_pending_track":11,"_prismatic_connect":11,"_replac":40,"_signatur":3,"_simulation_context":[11,23],"_simulationcontext":[1,11,15],"_slide_ax":11,"_solve_ord":11,"_solver_data":[1,11,15,23],"_staticbas":23,"_time":32,"_trajectori":14,"_trt_":[7,16],"_type":[3,9,18,23,25],"_use_group_solv":11,"a0":16,"a1":16,"ab":[1,3,9,11,12,19,26,34,36,37],"ab_p":26,"abbrevi":23,"abc":[3,5,6,11,12,17],"abcsic":23,"abort":23,"abov":[22,23,25,29,32,34,36],"abscissa":[1,8],"absent":23,"absolut":[1,8,22,23],"abstract":[3,4,5,6,9,11,14,17,23,29,32],"abstractmethod":[3,5,6,17],"abus":24,"academ":[21,41],"acc":[1,15],"acceler":[0,1,5,6,11,12,15,21,23,29,31,32,33,35,36,37,38,40],"acceleration_scal":21,"accelerations_trajectori":16,"accept":[1,3,10,12,15,18,21,23,24,32,37,38,41],"acceptable_rang":[1,10,11,15],"access":[1,3,6,7,13,14,16,17,18,23,36,40],"accessor":23,"accord":[18,23],"account":[3,19,24],"accur":[37,38],"accuraci":[12,18,37,38],"accuracy_obj":12,"achiev":[16,18,29,30,36,40],"across":[10,12,14,18,22,23,29,32,41],"act":24,"action":[24,26],"activ":2,"actual":[9,11,18,23,30,39],"actuat":[0,1,3,4,6,7,9,10,15,16,18,23,25,26,29,30,31,32,33,36,37,38,39,41],"adapt":[12,23,24],"add":[1,3,6,7,9,11,14,15,18,21,22,29,32,33,36,41],"add_arc_driver_link":[1,11],"add_connect":[1,9],"add_driver_link":[1,11,29],"add_dyad":[12,23],"add_edg":[1,3,9,19,34],"add_ensembl":14,"add_ground_link":[1,11,29],"add_hyperedg":[1,9,34],"add_inst":[1,9],"add_link":[1,11,29],"add_nod":[1,3,9,19,34],"add_point_track":[1,11],"add_quaternary_link":[1,11],"add_slide_axi":[1,11],"add_subplot":26,"add_ternary_link":[1,11],"addit":[3,12,13,21,23,30,32,40],"address":24,"adher":23,"adjac":[9,12,18,19,23],"admit":22,"advanc":[1,2,11,18,21,24,26,28,31,32,33,36,38,39],"advertis":23,"advic":23,"advis":23,"affect":[1,6,10,11,23,24,25,38,39],"afterward":0,"age":24,"agent":[1,12,14,21,23,26,41],"aggress":24,"agnost":23,"agre":[16,23],"al":18,"algebra":[17,18,39],"algorithm":[1,3,12,17,18,23,29,34],"alia":[1,3,6,9,11,12,13,15,18,23,25],"alias":[23,25],"align":[23,24,41],"alik":23,"all_graph":[1,19],"all_neighbor":[1,9],"all_nodes_in_ord":[1,3],"all_point":[30,37,40],"all_satisfi":18,"all_veloc":36,"allow":[1,3,4,7,9,11,12,23,24,31],"almost":[12,18,23],"alon":23,"along":[1,2,7,10,11,16,18,19,31,32,34,37,41],"alongsid":[17,23,36,41],"alpha":[1,10,11,12,15,16,21,23,36,37,38,41],"alpha_valu":[1,16],"alphabet":[0,23],"alreadi":[3,9,14,23,32,40],"also":[10,11,13,16,19,22,23,24,25,29,31,34,36,38,40],"altern":[3,23],"although":23,"alway":[1,6,7,10,16,18,23,25,32,39],"ambigu":[1,6,7,19],"amd":22,"among":[23,34],"amount":10,"amplitud":[1,10,32],"analys":3,"analysi":[0,1,6,9,11,12,15,16,17,18,23,25,32,35,36,41],"analyt":[5,16,17,18,23,35,36,39,40],"analyz":[1,3,9,10,11,15,17,18,23,29,30,31],"analyze_loci":30,"analyze_sensit":[1,10,11,15,23,38],"analyze_strok":[1,10,11,15,23],"analyze_toler":[1,10,11,15,23,38],"analyze_transmiss":[1,10,11,12,15,23,37],"anchor":[1,2,3,6,7,9,15,16,17,18,21,23,25,26,29,30,31,32,33,34,36,37,38,39,41],"anchor0":16,"anchor0_po":16,"anchor1":[1,6,7,15,16,21,26,29,30,31,32,33,36,37,38,39,41],"anchor1_po":16,"anchor2":[1,6,7,15,21,26,29,30,31,32,33,36,37,38,39,41],"anchor_0":3,"anchor_1":3,"anchor_2":3,"anchor_a":16,"anchor_ax":16,"anchor_ay":16,"anchor_i":16,"anchor_nod":[1,3,16,34],"anchor_node_id":3,"anchor_po":16,"anchor_v":16,"anchor_vi":16,"anchor_vx":16,"anchor_x":16,"angl":[1,2,3,5,6,7,8,9,10,11,12,15,16,17,18,21,22,23,26,29,30,32,33,37,39,40],"angle_between_point":[1,18],"angle_pair":[1,18,40],"angle_r":16,"anglepair":[18,23],"angular":[1,2,7,11,15,16,18,23,31,33,34,41],"angular_displac":[1,7],"angular_veloc":[0,1,2,7,11,15,26,29,30,31,32,33,34,36,37,38,39,41],"ani":[1,3,4,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,24,25,31,32,34,36,41],"anim":[0,1,14,23,26,29,30,33,34,35,36],"animate_dashboard":[1,21,30,41],"animate_kinemat":[1,21,23,36,41],"animate_linkage_plot":[1,21,41],"animate_parallel_coordin":[1,21],"animated_linkag":41,"ankl":26,"anneal":[12,23],"annot":[21,23,25],"announc":[23,25],"anoth":[12,13,23,25,26,32,34,37],"answer":[23,24,36,38],"anyjoint":23,"anylink":23,"anymor":23,"anyon":23,"anyth":[9,12,23],"anyway":23,"anywher":25,"apart":[23,25],"apertur":26,"api":[4,7,9,10,11,16,17,18,21,22,23,26,30,34,37,39,40,41],"apidoc":23,"apolog":24,"appear":[0,1,11,15,23,24],"append":[26,30,41],"appl":23,"appli":[1,6,11,15,16,22,23,24,25,30,33,34,37],"applic":[5,16,18,21,26,29,31,36,40,41],"appoint":24,"approach":[11,18,19,29,30,37,40],"appropri":[3,7,16,23,24],"approxim":[5,12,16,18,23,39,40],"arbitrari":[1,8,14,18,23],"arc":[1,2,11,15,16,18,40],"arc_crank":[0,1,11],"arc_end":[1,2,11,15,16],"arc_limit":[18,23,40],"arc_start":[1,2,11,15,16],"arccrank":[1,2,7,9,18,23,25,32,40],"arcdriverlink":[1,11,23],"architectur":28,"are_isomorph":[1,19,23,34],"area":[18,37,39],"arg":[1,2,5,6,7,12,23,26,32],"argument":[12,13,21,22,23,41],"arial":41,"arm":[7,16,18,23,31],"arm_angl":[1,7,16],"arm_length":[1,7,16,31],"around":[1,2,11,12,16,17,23,24,30,32,40],"arrang":[3,11],"array":[1,4,5,10,11,12,13,14,15,16,17,18,21,23,33,36,37,39],"arriv":23,"arrow":[21,41],"article_swarm_optim":23,"artist":[21,26],"ascend":[14,18],"ascii":23,"ask":[22,23,40],"aspect":[3,9],"assembl":[3,9,11,18,23,29,30,32,33,34,36,39,40],"assess":38,"assign":[3,12,13,18,23],"assort":23,"assum":[9,23],"assumpt":39,"assur":[0,1,6,7,9,11,12,16,18,19,23,25,29,33,35],"assur_graph":3,"assur_group":[1,3,19,34],"assur_mechan":[0,1],"assurgroup":[1,3,16],"assurgroupclass":[1,3],"assurmechan":[1,3],"assursignatur":[1,3],"async":[12,23],"async_optim":[0,1],"asyncio":[12,30],"atan2":16,"atlas":19,"attach":[3,11,18,23,33,40],"attack":24,"attent":24,"attribut":[4,11,17,23,25,28,32,39],"attributeerror":23,"author":[1,12,21,26],"auto":[10,12,14,21,23,30,38,41],"autocad":[21,41],"autodoc":23,"autom":34,"automat":[11,14,23,29],"automodul":23,"avail":[5,11,12,14,18,21,23,24],"averag":[17,23,36,38],"avg_spe":36,"avoid":[1,12,15,16,17,23,24,30],"await":[11,12,30],"awar":[12,18],"away":11,"ax":[1,6,8,10,12,13,15,16,21,23,26,36,38,41],"ax1":[38,41],"ax2":[38,41],"axe":[10,12,13,21,23,26,41],"axhlin":23,"axi":[1,2,7,8,9,10,11,16,17,18,21,22,23,25,31,36,37,39],"axis_id":[1,11],"ay":[1,6,15,16,21,36],"b":[1,3,7,8,9,10,11,12,16,17,18,19,23,26,33,34,37,39,40],"b_a":26,"b_d":26,"b_p":26,"back":[1,4,11,14,18,21,22,23,26,34],"backend":[16,21,23,29,35],"backtrack":[19,23],"backward":[1,3,9,12,13,14,15,23],"bad":[23,30],"badg":23,"balanc":[12,13,37],"ball":18,"bar":[1,3,7,9,10,11,12,15,17,18,19,21,22,23,27,28,30,34,36,37,38,39,40,41],"base":[1,2,3,5,6,7,9,10,11,12,13,14,15,16,17,18,19,21,23,29,30,31,32,35,39,40,41],"base_radius":[1,5,7,31],"baselin":38,"baseline_path_metr":[1,10],"baseline_transmiss":[1,10,38],"basi":[17,23],"basic":[8,11,16,26,33,34,35],"batch":[14,18,23,29,32,40],"bbox":[30,36,37,40],"bc":[9,19,34],"becam":[23,34],"becaus":[1,9,11,12,14,15,16,18,21,22,23,25,32,39,40],"becom":[9,11,14,16,18,23,38,40],"befor":[1,10,11,12,18,19,21,23,25,26,36,39,41],"beforehand":36,"begin":[5,23,31,41],"behavior":[1,2,3,10,16,23,24,30,38,39],"behaviour":23,"behind":[18,21,22,23],"belong":[3,9,19,34],"benchmark":[23,28],"benchmark_geometri":22,"benchmark_integr":22,"benchmark_optim":22,"benchmark_solv":22,"besid":23,"best":[5,12,13,18,21,22,23,24,26,29,30,36,38,41],"best1bin":12,"best1exp":12,"best2bin":12,"best2exp":12,"best_compromis":[12,13,14,23,37],"best_scor":[1,12,26,30],"beta":23,"better":[12,13,18,23,30,37],"beyond":[12,18],"bfgs":[12,17],"bfs":12,"bias":23,"big":12,"bigger":[23,33],"bin":26,"binari":[1,3,7,9,11,15,21,23,34],"binarydyad":[1,7,32],"bind":[5,18,31],"bisector":18,"bit":23,"bitrat":26,"blank":23,"blend":[12,23],"blit":26,"block":[6,7,11,12,19,23,26,34],"blue":[21,37,38],"blx":[12,23],"bodi":[1,3,9,11,15,16,18,19,23,24,29,34,40,41],"body_id":[1,3,9],"boilerpl":[11,23],"bold":21,"bone":[1,21,41],"bonus":18,"bool":[1,3,5,9,10,11,12,13,14,15,16,17,18,19,21,23,26],"boolean":23,"bottema":18,"bottom":39,"bounc":[1,2],"bound":[1,6,8,10,11,12,13,17,18,21,22,23,26,29,32,35,36,37,38,39,40,41],"boundari":[2,5,11,31],"bounding_box":[1,8,10,23,26,29,30,36,37,38,40],"bourk":[1,8,17],"box":[1,8,10,18,21,23,26,30,37,41],"bp":34,"bp_a":26,"bp_d":26,"branch":[1,11,17,18,23,34],"branch_info":[1,18],"break":23,"breakdown":23,"bridg":[0,1,3,9,16,17,23],"broken":23,"browser":41,"budget":22,"bug":23,"buggi":23,"build":[1,6,7,11,12,14,15,17,21,23,26,29,35,40,41],"build123d":[21,41],"build_connect":[1,21,23],"build_linkage_3d":[1,21,23,41],"build_neighborhood_graph":[1,12,23],"build_rail":[1,21,23],"buildabl":[1,10,17,23],"builder":[0,1,23],"built":[1,3,9,11,12,14,15,18,19,23,29,32,33,34,37],"bullet":23,"bump":23,"bump2vers":23,"bundl":34,"burgmest":23,"burmest":[0,1,22,23,25,29,35],"burmestercurv":[1,18],"burmesterdyad":[1,18,23,25],"button":41,"bx":34,"by_famili":[1,19],"by_num_link":[1,19,34],"bypass":[3,9],"byte":23,"c":[1,7,8,9,10,11,17,18,19,26,33,34,36,37,39,40],"c1":12,"c2":12,"c_i":17,"c_posit":17,"c_x":17,"cach":[1,3,11,12,14,15,18,23,36],"cache_dist":[1,11],"cad":[21,23,25,29],"calcul":[5,23,30,36,39],"call":[1,4,11,12,14,15,16,17,18,22,23,25,32,33,41],"callabl":[1,10,12,14,17,21],"callback":[12,30],"caller":[9,23],"cam":[0,1,3,7,16,23,29,35],"cam_angl":[1,7],"cam_cent":[7,31],"cam_crank":31,"cam_driv":[1,7,31],"came":23,"camprofil":[1,5,7],"can":[1,2,3,4,5,6,9,10,11,12,13,14,17,18,19,22,23,26,28,30,31,32,33,34,36,38,39,40,41],"can_form":[1,3],"cancel":12,"cancellederror":12,"candid":[3,8,12,18,22,23,25,30,37,38,40],"canon":[1,3,16,19,23,34],"canonical_form":[1,3,19,23],"canonical_hash":[1,19,23,34],"canva":[21,41],"cap":40,"capabl":[3,11,17,18,30,35,39],"caption":41,"captur":23,"carlo":[1,10,11,15,29,35,38],"carri":[9,14,16,18,23,25,26,34,37,39],"cartesian":[1,6,8,17,18],"cascad":18,"case":[1,3,9,10,11,12,13,16,18,19,21,23,30,38,39,40],"catalog":[0,1,9,12,14,18,23],"catalogentri":[1,12,18,19,23],"catch":[23,30],"categori":3,"caus":[5,23,31],"cbar_ax":21,"cd":[9,19,23,29,34],"cdn":41,"ceil":[18,26],"cell":[21,26],"center":[1,5,7,8,10,12,16,17,18,23,25,26,30,31,32,40,41],"center1":17,"center_curv":[1,18],"center_point":[1,18],"center_point_xi":18,"center_posit":[1,10],"center_valu":17,"centr":[23,32],"centric":21,"centripet":16,"centroid":16,"certain":[12,30,36],"cff":23,"cfg":23,"chain":[9,11,18,23,34],"chain_optim":[1,12,23],"chang":[7,10,11,12,18,22,25,26,38,39,40],"change_point":[1,18,40],"changelog":[25,28],"channel":24,"chapter":18,"char":3,"charact":3,"characterist":[24,37],"charg":[22,23],"chassi":34,"cheap":22,"cheapest":25,"chebyshev":[3,11,23],"check":[1,3,9,11,12,13,15,16,17,18,19,21,22,23,25,30,31,34,36,37,38,40,41],"check_build":[1,17],"check_condition_numb":[1,18],"checker":23,"checkout":23,"child":12,"child_idx":21,"choic":[12,31],"choos":[18,23,30],"chord":17,"chosen":[1,7,14],"chromosom":[1,12,23],"chunk":26,"ci":23,"circl":[1,2,5,7,8,11,16,17,18,21,23,25,26,29,33,34,37,39,40],"circle_ax":16,"circle_ay":16,"circle_circl":[3,7,34],"circle_curv":[1,18,40],"circle_i":16,"circle_intersect":[1,8],"circle_lin":[3,7],"circle_line_from_points_intersect":[1,8],"circle_line_intersect":[1,8,23],"circle_point":[1,18],"circle_point_xi":18,"circle_vi":16,"circle_vx":16,"circle_x":16,"circlespher":[1,8],"circular":[18,21,23,39,40],"citat":23,"cite":23,"clarifi":24,"clariti":[23,24],"class":[1,2,3,5,6,7,9,10,11,12,13,14,15,16,17,18,19,21,23,24,25,29,34,35],"classic":[18,22,23,29,39,40],"classif":[3,18,23,34],"classifi":[1,3,4,9,11,34],"classmethod":[1,3,9,14,18,19],"clear":[3,11,23,32,37],"cliqu":[9,19,23],"clone":29,"close":[0,1,5,11,12,17,18,19,23,26,29,30,33,34,39,40,41],"closer":8,"cloud":10,"cls":3,"cmap":21,"cnc":[21,29,41],"co":[9,12,23,25],"co_optim":[1,9,12,23,25],"co_optimization_typ":[0,1],"coars":[23,38],"coarser":[18,22,25,30],"cobyla":12,"code":[3,5,9,16,23,25,26,28,29,33],"code_of_conduct":[23,24,29],"codebas":23,"coeffici":[1,5,8,10,12,18,31,35,40],"coefficients_to_link_length":[1,18],"cognit":12,"coincid":[8,16],"cold":12,"collaps":23,"collect":[1,9,11,12,14,15,17,18,19,22,23,25,26],"collid":23,"collinear":[16,18,23],"collis":23,"color":[1,19,21,23,41],"color_switch":23,"colorbar":21,"colormap":21,"column":[10,12,14,17,18,22,23,37],"columnar":[14,23],"com":[8,26,29],"combin":[3,9,11,12,18,21,23,29,30,38,40],"combined_fit":40,"come":[1,10,22,23,34,36,38],"command":23,"comment":[24,26],"commit":[24,30],"common":[1,3,5,7,10,11,12,16,18,23,24,31,39,40],"communic":24,"communiti":24,"compact":[1,12,18,37],"compactness_obj":12,"companion":[1,9],"compar":[1,8,10,12,13,22,23,39,41],"comparison":[29,41],"compat":[1,2,3,4,5,7,9,11,12,13,14,15,16,18,21,23,32,40,41],"compatible_topolog":[1,19],"compet":[12,37],"compil":[1,11,14,15,16,22,23,29,36],"compiled_tim":39,"complaint":24,"complementari":38,"complet":[1,3,10,11,12,18,23,26,30,31,40],"complete_strid":26,"complex":[3,17,18,33,34,39,40],"complex128":18,"complex_to_point":[1,18,23],"complexpoint":23,"compon":[0,1,2,3,4,7,8,9,10,15,18,21,22,23,25,26,29,30,31,34,35,36,37,38,40,41],"component_instance_from_dict":[1,9],"component_instance_to_dict":[1,9],"componentid":1,"componentinst":[1,9,34],"compos":[29,34],"composit":[9,18,25,29,34],"compound":[21,41],"compress":[12,23],"compromis":[12,13,23],"comput":[1,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,29,32,35,36,40,41],"compute_all_pol":[1,18,40],"compute_circle_point_curv":[1,18,40],"compute_compact":[1,12,18],"compute_dof":[1,19,23,34],"compute_link_ratio":[1,18],"compute_metr":[1,18,23],"compute_mobl":[1,19,23,25,34],"compute_path_accuraci":[1,12,18],"compute_path_error":12,"compute_pol":[1,18],"compute_relative_pol":[1,18],"compute_slide_posit":[1,10],"compute_trajectory_numer":[1,17,29,39],"compute_transmission_angl":[1,10,18],"concaten":32,"concentr":23,"concept":[9,18,23],"concret":[3,9,23],"concurr":[12,23],"concycl":18,"conda":23,"condit":[5,16,18,23,36,40],"conduct":28,"config":[1,12,25,30,39],"configur":[1,10,11,12,15,16,23,29,30,32,33,34,39,40,41],"confirm":22,"conflat":23,"conflict":23,"confus":23,"conn":9,"connect":[1,3,6,7,9,10,11,12,16,17,18,21,23,26,29,34,39,40,41],"connect_prismat":[1,11],"connectedcompon":[1,2,6,7,23,25,32],"connecteddyad":[23,25],"connection_from_dict":[1,9],"connection_to_dict":[1,9],"consecut":12,"consequ":[23,24,25],"consid":[1,8,12,18,23,24,30],"consist":[3,7,11,16,17,18,23,34,41],"consol":12,"constant":[1,2,5,12,16,17,23,36],"constrain":[0,1,11,12,16,17,18,19,23,29,33,34,38,40],"constrained_fit":30,"constraint":[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,23,26,31,32,35,37,40],"constraint_count":[1,16],"constraint_equ":[1,17],"constraint_nam":[1,10,38],"constraint_offset":[1,4,14,16],"constraint_typ":38,"construct":[3,5,12,19,23,24,39,40],"constructor":32,"consum":[9,23,26,30,41],"contact":[7,31],"contain":[0,1,2,3,4,7,9,10,11,12,13,15,16,18,19,21,22,23,25,26,29,33,38,39,41],"content":[0,28],"context":[1,11,15,23],"contigu":[4,16,33],"continu":[1,5,7,11,12,18,23,24,26],"contribut":[1,6,15,23,24,26,28,39],"control":[7,12,18,21,22,23,25,30,38,41],"conveni":[11,18,19,23,25,38],"convent":[3,14,23],"converg":[12,17,23,30,37,39],"convergence_histori":[1,12],"convers":[0,1,3,4,7,9,23,34],"convert":[1,3,4,5,7,8,9,12,14,17,18,19,23,26,29,31,33,37],"convert_legacy_dict":23,"conveyor":36,"cooptimizationconfig":[1,12,23,25],"cooptimizationresult":[1,12,23],"cooptsolut":[1,12,23],"coord":[1,3,6,11,15,16,21,32,33],"coordin":[1,5,6,7,8,10,11,17,18,21,23,26,30,33,39,41],"copi":[0,1,3,9,12,16,23,26,39],"core":[0,1,16,23,28,29],"corioli":16,"corner":23,"correct":[3,17,19,22,23,25,30],"correspond":[3,7,18,40],"corrupt":23,"cos":[5,16,17,18,39,40],"cosin":[5,18,31],"cost":[18,22,23,25,38],"count":[1,3,11,12,15,19,22,23,33,34,39,40],"counterclockwis":[17,18],"counterpart":[16,23],"coupler":[1,6,10,11,16,17,18,19,22,23,26,29,30,33,34,37,38,39,40,41],"coupler1":18,"coupler_c":39,"coupler_curv":[1,17],"coupler_dist1":38,"coupler_dist2":38,"coupler_joint":10,"coupler_length":[17,18,29,39,40],"coupler_mechan":34,"coupler_mid":11,"coupler_nod":[1,18],"coupler_path":34,"coupler_pivot_c":18,"coupler_point":[1,7,18],"coupler_point_offset":18,"couplerfourbar":34,"cover":[7,23,29,30,31,32,33,34,36,37,38,39,40,41],"coverag":23,"cp":34,"cpu":22,"cpus":12,"crank":[0,1,3,6,7,9,10,11,14,15,16,17,18,19,21,22,23,25,26,29,30,31,32,33,34,36,37,38,39,40,41],"crank_angl":[18,40],"crank_angle_limit":[1,18,23,40],"crank_b":39,"crank_indic":[1,16],"crank_length":[17,18,29,39,40],"crank_path":30,"crank_pivot_b":18,"crank_r":26,"crank_radius":[10,38],"crash":[23,30],"creat":[1,2,3,5,7,9,10,11,12,13,14,16,17,21,23,26,29,30,31,32,35,36,37,38,41],"create_crank":11,"create_dyad":[1,7],"create_fourbar":37,"create_linkag":[30,36],"create_my_linkag":[4,16],"create_rrr_dyad":11,"create_stroke_engine_linkag":26,"create_trajectory_funct":[1,17,39],"creation":41,"crisp":41,"criterion":[18,40],"critic":[10,38],"cross":[11,16,21,23,25,41],"crossov":12,"crossover_prob":[1,12],"crowd":[12,13,23,37],"cubic":[5,18],"culprit":40,"curr_bb":26,"current":[0,1,2,3,6,7,10,11,12,15,16,18,21,23,28,30,32,39],"current_angl":[1,11,16],"current_extens":16,"current_i":16,"current_iter":[1,12,30],"current_swarm":26,"current_x":16,"curv":[5,7,17,18,23,29,31,39],"curvatur":39,"cusp":[18,39],"custom":[5,11,12,13,18,21,23,30,31,33,35,37,39],"custom_joint":23,"custom_linkag":41,"cut":41,"cutter":41,"cx":[8,16,17,32,34],"cy":[8,16,17,32,34],"cycl":[1,3,10,11,15,18,21,33,38,41],"cycloid":[5,31],"cycloidalmotionlaw":[1,5,7,23,31],"cyl_to_cart":[1,8],"cylind":2,"cylindr":41,"d":[1,7,9,10,11,12,16,17,18,19,23,26,30,33,34,36,37,38,39,40,41],"d1":33,"d1_":34,"d1_anchor_0":34,"d1_anchor_1":34,"d1_internal_0":34,"d1_link_0":34,"d1_link_1":34,"d2":33,"d2i":39,"d2s":5,"d2x":39,"d_d1":26,"d_d2":26,"dash":10,"dashboard":[21,41],"dashboard_layout":[1,21,30,41],"data":[1,3,4,9,11,14,16,18,19,21,23,34],"data_array":5,"dataclass":23,"datafram":10,"date":23,"de":[12,23,29],"dead":23,"decis":24,"declar":23,"decompos":[3,18],"decompose_assur_group":[1,3,16,23,34],"decomposit":[0,1,12,16,18,19,23,29,34],"decompositionresult":[1,3,11,16],"decor":[1,10,12,23,30,32,38],"dedic":22,"dedupl":[9,19],"deem":24,"deep":[1,3,9,12,16],"deeper":35,"def":[12,17,26,29,30,32,36,37,38,39,40,41],"default":[1,2,3,5,8,10,11,12,15,16,17,18,19,21,22,23,25,30,32,38,40,41],"default_angular_veloc":[1,2,23],"default_orientation_resolut":[1,18],"defin":[0,1,3,5,6,7,8,9,10,11,12,14,16,17,18,21,23,25,26,31,38,39,40,41],"define_linkag":26,"definit":[1,3,5,9,11,12,18,19,21,23,25,29],"deg":[31,39,40],"degener":[16,23],"degre":[1,2,3,5,6,7,9,10,11,15,18,19,23,31,34,37,40],"degree_of_freedom":[1,3,34],"delay":21,"deleg":[1,3,15,16,18,23],"delta":[1,10,11,15,38],"delta_dim":[12,23],"demo":[23,26],"demonstr":[24,26,30],"denot":[18,23,25],"dens":[22,23],"densiti":[12,18],"depend":[4,7,12,18,21,22,23,32,41],"deprec":[0,7,18,22,28,29],"deprecationwarn":[23,25],"depth":41,"deriv":[5,11,16,17,23,39],"derogatori":24,"describ":[3,23,26,34],"descript":[1,12,23,26,39],"deselect":23,"deseri":[3,11,19],"design":[3,16,18,23,25,26,29,32,34,36,38,39,40,41],"desir":[18,30,31,36,40],"detail":[1,11,15,26,29,30,38],"detect":[10,19,23,30],"determin":[1,3,5,7,9,10,11,16,18,23,24,40],"determinist":[1,6,7,16,23],"dev":[12,23,29,38],"develop":[22,23,29,41],"deviat":[10,17,36,37,38,39],"devic":18,"df":38,"diagon":18,"diagram":[21,23,41],"dict":[1,3,7,9,10,11,12,14,15,16,17,18,19,39,41],"dictionari":[3,9,10,11,13,16,17,34,39],"diff":[23,25,39],"differ":[1,9,11,12,14,17,18,19,21,22,23,24,26,30,33,34,38,39,40,41],"differenti":[12,16,17,23,29,39],"differential_evolut":12,"differential_evolution_optim":[1,12,23],"differential_evolution_optimization_async":[1,12],"dilat":[12,23],"dim":[1,3,9,16,23,26,34,41],"dim_nam":[21,26,41],"dim_typ":[21,41],"dimens":[0,3,9,10,11,12,13,14,15,16,19,21,23,26,28,29,30,32,36,37,38],"dimension":[1,3,8,9,10,12,23,30],"dimension_bounds_factor":[1,12],"dimension_func":[21,26],"dimension_mutation_sigma":[1,12],"dimension_r":12,"dimension_sigma":12,"dimensionless":[5,31],"dims_back":34,"dims_coupl":34,"direct":[1,2,3,5,6,7,9,10,11,16,17,18,21,22,23,25,31,32,37,39,40],"direct_tim":39,"directori":[22,23,29],"disabl":[23,24],"disagre":[23,25],"disambigu":16,"discard":[22,23],"disconnect":9,"discontinu":5,"discov":22,"discret":[5,12,18,23,31],"disk":31,"disparag":24,"dispatch":[1,3,4,5,15,16,23],"displac":[1,5,7,11,16,18,31,32,38],"display":[3,9,11,21,23,26,41],"dist":[1,8,17,37],"distanc":[1,2,3,5,6,7,8,9,10,11,12,13,16,17,18,23,26,30,32,33,34,37,38,39,40],"distance0":[16,17,39],"distance1":[1,7,11,15,16,17,23,26,29,30,31,32,33,36,37,38,39,41],"distance2":[1,7,11,15,23,26,29,30,31,32,33,36,37,38,39,41],"distinct":[14,16,18,23],"distinguish":3,"distribut":[1,12,13,37],"dither":12,"div":41,"div_html":41,"dive":35,"divers":[12,13,24],"divis":[12,23,26,30],"divisor":17,"diywalk":26,"doc":[1,21,23,29,41],"docstr":[22,23],"doctyp":41,"document":[1,18,21,22,23,25,32,41],"doe":[1,3,6,9,12,18,22,23,32,41],"doesn":[1,6,7,11,19,26,40],"dof":[1,3,7,9,11,15,19,23,29,34],"doi":23,"domin":[12,13,22,23],"don":[1,3,6,7,9,11,12,16,17,23,26],"done":23,"door":18,"dot":[10,38],"doubl":[7,18,23,40],"double_slid":7,"download":28,"downstream":[9,23],"dpi":[38,41],"dr":5,"draw":[10,21,23,29,32,34,41],"drawn":[10,21,41],"drawsvg":[21,29],"drawsvg_viz":[0,1],"drift":23,"drive":[5,7,11,18,31,33,34,40],"driven":[1,2,3,7,9,11,18,19,23,29,32,34],"driven_nod":[1,3,9],"driver":[1,2,3,7,9,11,15,19,23,26,29,31,33,34],"driver_angl":[0,1,9,34],"driver_nod":[1,3,9,34],"driver_or_crank":23,"driverangl":[0,1,9,23,34],"driverlink":[1,11,23],"drop":[16,23,25],"ds":5,"dt":[1,2,3,4,6,7,11,14,15,16,23,26,32],"dtheta":5,"dtype":[1,10,12,13,14,15,16,17,18],"du":5,"du2":5,"dual":[12,23],"dual_ann":12,"dual_annealing_optim":[1,12,23],"due":[10,23],"dump":[3,11,34],"duplic":23,"durat":[21,26,36,41],"dure":[1,2,6,7,9,11,12,13,16,17,18,24,33,41],"dwell":[5,31],"dwell_high_end":[1,5,31],"dx":[11,16,34,39],"dxf":[21,23,29],"dxf_export":[0,1],"dy":[11,16,34],"dyad":[0,1,2,3,4,6,9,10,11,12,15,16,18,23,26,29,30,31,32,33,34,36,37,38,39,40,41],"dyad_left":18,"dyad_right":18,"dyad_typ":23,"dyadic":[3,7],"dyadpp":[1,3],"dyadprr":[1,3],"dyadrpr":[1,3],"dyadrrp":[1,3,23],"dyadrrr":[1,3,16,23],"dyadsolut":18,"dynam":[29,30],"d\u00b2":16,"d\u03b1":16,"e":[3,7,10,11,12,14,16,17,18,19,21,23,24,26,29,34,39],"e1":[9,34],"e2":[9,34],"e3":34,"e_d1":26,"e_d2":26,"earli":[18,22],"earlier":[22,23,25],"earn":[22,23],"eas":23,"easi":[21,29,39],"easier":23,"econom":24,"ed":18,"edg":[1,3,7,9,12,16,18,19,21,23,26,30,31,34,41],"edge_0":34,"edge_1":34,"edge_2":34,"edge_3":34,"edge_dist":[0,1,9,16,34],"edge_from_dict":[1,3,9],"edge_id":[1,3,9],"edge_map":[1,3],"edge_to_dict":[1,3,9],"edgeid":[1,3,9],"edit":[23,24,41],"editor":[23,29],"educ":24,"effect":[10,12,18,23],"effector":18,"effici":[4,5,14,16,17,23,30,31,39],"eight":[12,18,19,23,34,41],"either":[3,9,11,12,19,21,32,33,34],"element":[1,3,6,7,9,12,13,18,19,23,32,41],"eleven":23,"elif":[34,40],"elimin":[16,17],"eliminate_theta":[1,17],"els":[9,12,25,28,32,34,36,37,40],"elsewher":22,"email":24,"emb":41,"embedded_linkag":41,"embodi":3,"emit":[1,9,21,23,25],"empathi":24,"emphasi":23,"empti":[1,3,5,6,7,9,10,12,13,14,23,26,32,34,37,40],"en":[23,26],"enabl":[3,9,17,23,36,39],"encod":[9,12,19,23],"encount":[3,9],"end":[1,2,3,5,9,11,16,17,18,21,22,23,31,32,38,41],"end1":21,"end1_idx":21,"end2":21,"end2_idx":21,"endpoint":[3,9,11,18,26],"enforc":[28,30],"engin":[11,21,23,27,28,29],"enough":[23,26,38],"ensembl":[1,12,14,18,23,25,26,29,30,32,37,40],"entir":[23,37],"entiti":23,"entri":[1,11,12,14,16,18,19,22,23,30,34],"enum":[1,3,9,11,18,21],"enumer":[0,1,11,23,26,29,34,36,40,41],"enumerate_al":[1,19,23],"enumerate_topolog":[1,19,23],"env":26,"environ":[23,24,28],"eq":17,"equal":[1,3,8,12,13,17,18,19,37,38,39,41],"equat":[3,8,16,17,18,22,34,39],"equival":[18,19,23,25,39],"erdman":18,"error":[1,3,12,18,23,25,26,30,37,39,40],"error_messag":17,"error_penalti":[1,10],"escap":[12,23],"essenti":22,"establish":11,"estim":[18,38],"et":18,"etc":[3,6,7,11,12,14,16,18,19,23],"ethnic":24,"euclidean":[8,17,18],"eval":39,"eval_func":[12,23,26,29,30,36,40],"evalf":39,"evalu":[1,5,7,10,12,17,18,22,23,26,29,30,31,41],"evaluate_deriv":[1,5],"even":[21,22,23,32],"event":[12,24,30],"ever":23,"everi":[0,1,9,10,11,14,18,19,21,22,23,25,26,29,30,32,33,34,37,40,41],"everyon":24,"everyth":[23,29,32],"evolut":[12,23,29],"evolutionari":[12,23],"exact":[1,3,7,9,11,14,18,23,25,30,32,38,39,40],"examin":[18,39,40],"exampl":[1,2,3,5,6,7,9,10,11,12,15,16,17,18,19,21,22,23,24,28,29,34],"exceed":[23,38],"except":[0,11,19,23,26,28,33,34,36],"excess":38,"exclud":[17,22],"execut":23,"executor":[12,30],"exhaust":[12,18,19,23,30],"exhaustive_optim":23,"exist":[1,3,4,7,9,11,12,14,16,17,18,19,21,23,25,40],"exist_ok":41,"exit":[1,11,15,23],"expand":[3,9,19,23,26],"expect":[18,19,23,30,32,34,38,40],"expens":[12,18,22,23],"experi":24,"experiment":23,"explan":[12,24],"explicit":[1,3,9,11,15,24,32,34],"explor":[12,22,23,30,32,36,37,38,39,40,41],"explos":3,"exponenti":[18,22,23],"export":[7,9,10,21,23,29,35],"expos":[1,9,23,26,31,33],"expr":17,"express":[9,17,23,24,29,35,39],"ext":23,"extend":[1,2,3,9,16,18,26,32,35],"extens":[1,2,8,16,23],"extent":41,"extern":[12,24,34],"extra":[12,14,23,26,29],"extract":[1,4,10,12,17,18],"extract_trajectori":[1,10,23],"extrud":41,"extrus":41,"ezdxf":[21,41],"f":[1,3,10,12,15,17,18,23,26,30,31,32,33,34,36,37,38,39,40,41],"f_a":26,"f_d":26,"fabric":[29,41],"face":[6,23],"fact":23,"factor":[12,18,21,23,41],"factori":[0,1,3,5,9,12,13,14,17,18,19,23],"fade":21,"fail":[1,3,12,17,23,25,40],"failur":25,"fair":24,"fall":[5,21,23,31],"fall_end":[1,5,31],"fallback":[9,23],"fals":[3,11,12,18,21,23,26,30,32,34,36,37,38,39,40,41],"famili":[1,12,19,23,25,29,41],"faq":24,"far":[11,12,30,37],"fast":[14,17,19,36,37,38,40],"fast_vari":[1,12],"fastapi":23,"faster":[1,8,11,12,15,18,21,22,23,29,33,39],"favor":23,"favour":[22,23],"feasibl":18,"featur":[8,21,23,26,28,29],"feed":[9,12,23],"feedback":[21,24],"feel":[22,26],"feet":26,"femur":26,"fewer":[18,22,25,30,37],"ffmpeg":41,"ffmpegwrit":26,"fh":34,"field":[13,18,23],"fifteen":23,"fig":[21,23,26,36,37,38,41],"figsiz":[21,38,41],"figur":[10,12,13,14,21,22,23,26,39,41],"figure1":41,"figurewidget":[21,41],"file":[3,9,11,14,19,21,23,25,34,41],"fill":[12,23,32],"fillet_radius":[1,21,41],"filter":[12,13,14,18,19,23,29,36,40],"filter_by_scor":[14,23],"filter_finit":[1,18],"filterwarn":25,"final":[12,16,17,23,26,33,38,39,41],"find":[3,9,12,13,16,18,23,25,26,29,30,32,36,37,40],"fine":[12,23,30,38,39,40],"finer":22,"finish":23,"finit":[18,23],"first":[1,3,6,7,8,9,10,11,12,14,16,17,18,19,21,22,23,30,32,38,40,41],"first_i":8,"first_iter":30,"first_nan_step":[1,16],"first_x":8,"fit":[1,10,12,18,21,22,23,26,29,35,36,37,39,40,41],"five":[18,22,23],"fix":[0,1,3,5,6,9,10,11,16,17,18,21,22,26,30,31,32,33,39,40,41],"fixeddyad":[1,6,7,9,15,18,21,23,25,26,29,33,40],"flake8":23,"flat":[1,9,11,14,15,16,23,26,33,34,38],"flat_dim":26,"flat_graph":9,"flatten":[1,9,14,34],"flavour":34,"flexibl":23,"fli":12,"flicker":21,"float":[1,2,3,5,6,7,8,10,11,12,13,14,15,16,17,18,21,26,30,36,38,39,40],"float64":[1,5,10,11,14,15,16,17,18,21],"floor":[23,25],"focus":[12,24,38],"fold":[18,22,23,25],"folder":[1,23],"follow":[3,5,7,12,16,18,23,24,25,29,30,32,35,36,37,38,41],"follower_po":31,"font":41,"foot":[23,26,34],"foot_locus":26,"forc":[3,11,18,31,37],"fork":23,"form":[1,3,9,11,12,14,17,18,19,23,26,29,39,40],"formal":[3,23,34],"format":[3,11,12,14,21,23,41],"formatted_histori":26,"former":23,"formul":[16,23],"formula":[8,19,23,25],"forth":11,"forward":14,"found":[1,3,8,9,10,12,14,16,18,21,22,23,26,37,40],"foundat":[6,9,18],"four":[0,1,3,7,9,10,11,12,15,17,18,19,22,23,25,27,28,30,34,36,37,38,39,41],"four_bar_anim":41,"fourbar":[1,11,18,23,34],"fourbar_assur":34,"fourbar_from_length":[1,11,18,23,40],"fourbar_from_lengths_demo":23,"fourbar_linkag":[23,26],"fourbar_symbol":[1,17,23,29],"fourbarsolut":[18,23],"fps":[21,26,36,41],"frac":40,"fraction":[6,12,21,22,32,36],"frame":[0,1,3,6,9,10,11,14,15,18,21,23,25,26,29,33,36],"frame10":41,"frame_dur":[21,41],"frame_idx":41,"frame_index":[21,36,41],"framework":[12,40],"free":[4,9,12,18,22,23,24,25,30],"freecad":[21,41],"freedom":[1,3,7,9,11,19,34],"frequenc":22,"fresh":[12,23,39],"freudenstein":[18,22,29],"freudenstein_equ":[1,18],"fri":12,"friend":[4,14,23],"from_ag":14,"from_dict":[0,1,23],"from_edg":[1,9],"from_ensembl":14,"from_graph":[1,3],"from_hypergraph":[1,3,23,34],"from_inst":[1,9],"from_json":[1,19,23],"from_linkag":23,"from_mechan":[1,3,9,23,34],"from_memb":[14,23],"from_pareto_front":[14,23],"from_pareto_solut":14,"from_point_angl":18,"from_port":[1,9],"from_sim_linkag":[1,9,15,23],"from_synthesi":23,"from_topology_solut":[14,23],"front":[12,13,14,23,30],"froze":23,"frozen":23,"full":[1,2,3,7,10,11,12,14,15,16,18,19,21,22,23,26,29,30,33,34,39,40],"full_html":41,"fulli":[1,7,9,11,18,23,34,40],"func":[1,10,12,17,23,26,39],"funcanim":[14,21,26,41],"function":[1,3,4,5,6,7,8,9,10,11,12,16,17,18,19,21,22,23,25,29,31,34,35,36,37,38,41],"function_gener":[0,1,22,40],"functionprofil":[1,5,7,23],"fundament":[3,9,11,18,34,35],"fuse":34,"fusion":[21,41],"futur":[12,23],"g":[3,7,10,11,12,14,16,17,18,19,21,23,26,34,39],"g1":19,"g2":19,"g_a":26,"g_d":26,"gain":23,"galleri":33,"gap":22,"garbag":26,"gaussian":[12,23],"gave":23,"gen":[18,23],"gender":24,"gene":12,"general":[0,1,5,8,12,23,36,39],"generalized_synthesi":[1,14,18,25],"generat":[1,3,9,11,12,14,15,17,18,19,22,23,29,33,34,35,38],"generate_bound":[1,12,17,23,26,29,30,32,36,37,38,39,40,41],"generate_catalog":[1,19],"generate_symbolic_bound":[1,17],"genet":[12,23,29],"gentl":22,"genuin":[23,25],"geometr":[1,3,9,12,15,16,17,18,23,30,32,33],"geometri":[0,1,3,7,11,18,21,23,26,29,30,32,33,34,38,39,41],"get":[0,1,3,7,8,9,11,12,14,16,17,18,19,21,23,26,28,29,30,31,32,34,36,37,39,40,41],"get_acceler":[1,11,15,23],"get_all_dyad":[1,18],"get_all_port_nod":[1,9],"get_axis_norm":[1,11],"get_compon":[1,21],"get_constraint":[1,2,5,6,7,11,12,15,23,26,29,30,31,33,36,37,38,39,40,41],"get_constraint_equ":[1,17],"get_coord":[1,11,15,23,26,30,32,33],"get_dist":[1,11],"get_driver_angl":[0,1],"get_dyad":[1,18],"get_edge_between":[1,3,9],"get_edge_dist":[0,1],"get_edges_for_nod":[1,3,9],"get_hyperedge_dist":[0,1],"get_hyperedges_for_nod":[1,9],"get_isomer_geometri":[1,7],"get_joint":[1,11,17],"get_joint_posit":[1,3,11,23],"get_line_point":[1,11],"get_link":[1,11],"get_link_color":[1,21],"get_nearest_point":[1,8],"get_node_posit":[0,1,16],"get_normalized_direct":[1,11],"get_num_constraint":23,"get_numeric_paramet":[1,17,39],"get_parent_pair":[1,21,23],"get_po":23,"get_port_dist":[1,11],"get_port_qualified_nod":[1,9],"get_qualified_node_id":[1,9],"get_rail_pair":[1,21,23],"get_required_anchor":[1,7],"get_required_constraint":[1,7],"get_rotation_period":[1,11,15,23,32],"get_symbol_spec":[1,21],"get_trajectory_express":[1,17],"get_veloc":[1,11,15,23,36],"ghost":[21,41],"gif":[21,36],"git":[23,29],"github":[1,23,24,29],"gitignor":23,"give":[12,16,17,18,23,24,29,34,38,39],"given":[1,3,5,9,10,11,12,14,16,17,18,19,23,33,34,36,38,40],"global":[9,11,12,17,23,30],"go":[3,21,29,41],"goal":[30,37],"goe":[23,30],"gone":23,"good":[5,12,13,18,25,26,30,31,37,38,40],"googl":23,"got":[22,23],"govern":[18,22],"grace":24,"grad_i":39,"grad_x":39,"gradient":[1,12,17,29,35,39],"graph":[0,1,11,12,16,18,19,23,26,29,35],"graph_back":34,"graph_from_dict":[1,3,9],"graph_from_json":[1,3,9,34],"graph_represent":23,"graph_to_dict":[1,3,9,34],"graph_to_json":[1,3,9,34],"graph_to_linkag":23,"graph_to_mechan":[1,3,23,34],"graphic":41,"grashof":[1,15,18,23,35],"grashof_check":[1,18,23,40],"grashof_crank_rock":[1,18,40],"grashof_double_crank":[1,18,40],"grashof_double_rock":[1,18,40],"grashof_rocker_crank":[1,18,40],"grashof_typ":40,"grashoftyp":[1,18,40],"gray":41,"great":23,"greedi":18,"green":[10,41],"grid":[12,14,18,22,23,25,26,29,35,38,41],"grid_search":[0,1,23],"gridcolor":41,"gridwidth":41,"groebner":17,"ground":[0,1,2,3,7,9,10,11,15,16,17,18,19,21,22,23,25,26,29,30,31,32,33,34,36,37,38,39,40,41],"ground2":7,"ground_a":39,"ground_constraint":18,"ground_d":39,"ground_i":17,"ground_length":[1,17,18,29,39,40],"ground_nod":[1,3,9,34],"ground_pivot_a":[1,18],"ground_pivot_d":[1,18],"ground_toler":18,"ground_x":17,"groundjoint":[1,11,23,34],"groundlink":[1,11],"group":[0,1,7,9,10,11,14,18,19,21,23,25,29,30,35,41],"group_class":[1,3,34],"group_index":[1,18],"group_result":[1,18],"group_signatur":[1,3,18],"groupsynthesisresult":[1,18],"grow":[9,18,22,23,32],"gruebler":[1,3,11,15,23],"gr\u00fcbler":[19,23,34],"guarante":19,"guaranti":13,"guess":[12,16],"gui":29,"guid":[1,3,7,16,18,23,29,31,35,40],"guidanc":[18,23],"guide_angl":[1,7,16,31],"guide_i":16,"guide_x":16,"guidelin":28,"h":[17,26,30,34],"h1":41,"h_d1":26,"h_d2":26,"half":[10,11,17,22,26,34,40],"halfway":32,"halv":23,"hand":[11,23,29,30,34],"handl":[1,3,9,11,12,15,18,21,23,40],"hang":32,"har":[22,23],"harass":24,"hard":18,"hardwar":[22,23],"harm":24,"harmon":[5,31],"harmonicmotionlaw":[1,5,7,23,31],"has_nan_posit":[1,16],"hash":[19,34],"hashabl":[3,14,19],"hatch":[12,18,23],"head":[23,41],"header":[12,23],"healthi":24,"heavi":39,"heavier":[12,23],"heavili":23,"height":[18,21,37,39,41],"help":[35,38],"helper":[10,11,17,18,21,23,26],"henc":22,"hessian":17,"heterogen":[14,23],"hex":21,"hg":[3,9,19,34],"hg_coupler":34,"hi":[18,40],"hierarch":[9,23,25,29],"hierarchi":[0,1,3],"hierarchical_from_dict":[1,9],"hierarchical_from_json":[1,9,34],"hierarchical_to_dict":[1,9],"hierarchical_to_json":[1,9,34],"hierarchicallinkag":[1,9,34],"high":[4,5,11,16,18,23,29,30,31,38],"higher":[3,4,5,10,11,12,13,18,19,23,26,31],"highest":[10,12,30],"highlight":[21,23],"highlight_best":21,"hint":[7,16,23],"hint_posit":16,"hip":34,"histori":[21,23,26,30,41],"history_sav":26,"hit":[1,2,11,40],"hoeken":[21,23],"hold":[1,3,9,12,14,17,18,22,23,25,34,40],"hole":[21,41],"home":[7,23,25],"honour":23,"horizont":[6,10,26,30,32,36,41],"horizontal_ratio":36,"horizontal_veloc":36,"hot":16,"hour":23,"hover":[21,41],"html":[8,21,24,26,29,36,41],"http":[1,8,29],"https":[1,8,24,26,29],"huge":12,"hugofara":[1,12,21,26,29],"human":[3,5,6,7,9,11,12,14,19,23,32],"hundr":[18,22],"hundredth":36,"hv":37,"hyperdegre":[1,9],"hyperedg":[1,3,9,19,23],"hyperedge_constraint":[0,1],"hyperedge_from_dict":[1,9],"hyperedge_id":[1,9],"hyperedge_neighbor":[1,9],"hyperedge_to_dict":[1,9],"hyperedgeid":[1,9],"hypergraph":[0,1,3,15,19,23,25,29,33,35],"hypergraph_convers":[0,1],"hypergraphlinkag":[1,3,9,15,19,23,34],"hyperstat":23,"hypervolum":[12,13,14,23,35],"hypostaticerror":23,"hypot":34,"hypothet":[22,23],"hysteresi":[1,7,16],"i_":26,"i_d1":26,"i_d2":26,"id":[1,3,9,11,12,16,18,19,34],"id_a":12,"id_b":12,"ideal":[10,18,37,38,41],"ident":[1,6,9,14,18,23,24],"identifi":[1,3,5,6,7,9,10,11,18,19,23,32,38,40],"identify_dyad_typ":[1,3,23],"identify_group_typ":[1,3,23],"idx":14,"ignor":[1,2,6,7,23],"ii":[3,12,16,23,29,35],"iii":[3,12,18,23,29,35],"illustr":41,"im":21,"imag":[21,23,30,41],"imageri":24,"imaginari":17,"immut":[3,23],"impact":24,"implement":[0,3,5,12,18,22,23,25,34,36,40],"impli":[22,34],"implicit":[16,17,19,23],"import":[1,2,3,4,5,7,9,11,12,15,16,17,18,19,21,23,25,26,29,30,31,32,34,36,37,38,39,40,41],"importerror":[10,12,13],"imposs":[11,30,32,33],"improv":[21,23,37,39],"inappropri":24,"inch":21,"incid":24,"incident":22,"includ":[1,3,6,10,11,12,16,17,18,19,21,23,24,29,30,34,40,41],"include_pin":[21,41],"include_plotlyj":41,"include_transmiss":[1,10,11,15,38],"includesvg":41,"inclus":24,"incomplet":1,"inconsist":23,"incorpor":36,"incorrect":23,"increas":[23,30,36,37],"indent":[3,11,23],"independ":[3,11,16,23,34],"indetermin":[3,19,23],"indeterminaci":[1,11,15,23],"index":[1,10,12,13,14,16,18,19,21,23,28,38,40],"indexerror":19,"indic":[1,3,10,12,13,16,18,21,22,23,31,38,39],"individu":[14,23,24,36,38],"industri":41,"inequ":18,"inert":23,"inertia":[12,30],"inf":[1,10,12,14,18,23,30,36,38],"infeas":12,"infer":22,"infin":[18,23,30],"infinit":[18,32,38],"info":[18,34],"inform":[1,12,18,23,24,37],"ingest":23,"inherit":[12,23],"ini":23,"init_coord":[26,30],"init_func":26,"init_po":[26,30],"init_polar_repr":26,"init_posit":[12,13,23],"initi":[1,3,7,11,12,13,14,15,16,17,18,21,23,26,32,34,39,40,41],"initial_angl":[0,1,2,7,11,31],"initial_coordin":12,"initial_crank_angl":18,"initial_dist":39,"initial_extens":[1,2],"initial_guess":12,"initial_param":[17,39],"initial_popul":12,"initial_posit":[11,12,13,14,16,21,23,26,30,37,41],"initial_temp":12,"initial_traj":39,"inkscap":41,"inlin":23,"inner":30,"innermost":23,"input":[0,1,2,3,7,8,9,10,11,12,15,17,18,19,23,29,36,39,40,41],"input_angl":18,"insensit":38,"insert":[14,23],"insid":[0,18,22,23,25,34],"inspir":24,"instal":[10,12,13,21,23,28,38,41],"instanc":[1,3,5,7,9,10,12,19,23,24,34],"instance_id":9,"instant":[18,21],"instanti":[1,9],"instead":[3,9,12,18,21,22,23,25,33,37,40],"insult":24,"int":[1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,21,26],"int32":16,"integ":[1,3,9,10,11,12,14,19,23],"integr":[5,12,23,41],"intellig":30,"intend":[23,26],"intenum":[1,3,9,11],"interact":[18,21,22,24,29,35],"interactive_linkag":41,"interactive_linkage_plot":[1,21,41],"interchang":[21,41],"interfac":[1,2,6,7,12,14,29],"intermedi":18,"internal":[3,6,7,9,14,16,18,22,23,34],"internal_0":3,"internal_1":3,"internal_edg":[1,3,34],"internal_id":16,"internal_nod":[1,3,9,34],"internal_node_id":3,"interoper":9,"interpol":[5,23,31,32],"interpret":[7,11],"intersect":[1,3,7,8,11,16,17,18,23,29,33,34,39],"interval":[21,26,41],"intrins":11,"introduc":[23,33,37],"introduct":23,"introspect":21,"invalid":[1,3,9,10,11,12,13,15,18,23],"invent":23,"invers":[12,23],"invert":[27,28],"inverted_stroke_engin":[23,26],"investig":24,"invis":24,"invoc":[1,15],"invok":12,"involv":[24,39],"io":1,"ipywidget":[21,41],"is_accept":[1,10],"is_arc_driv":[1,11],"is_build":17,"is_complet":[1,12,30],"is_crank_rock":[1,18,23,40],"is_defin":[1,11],"is_determin":[1,3],"is_discret":[1,18],"is_driv":[1,11,23],"is_dyad":23,"is_grashof":[1,18,40],"is_ground":[1,11,23],"is_ground_joint":[1,21],"is_legacy_format":[1,11,23],"is_overconstrain":[1,3],"is_prismatic_lik":[1,21],"is_revolute_lik":[1,21],"is_static_lik":[1,21],"is_underconstrain":[1,3],"is_valid":[1,3,18,34,40],"is_valid_mechan":[1,3],"isinst":[23,25,26,36],"isn":30,"isnan":[1,15,36],"iso":[21,41],"isom":[3,7,16,23],"isomer_to_canon":[1,3],"isomorph":[0,1,23],"issu":[3,23,24,30],"issue_templ":23,"ite":12,"iter":[1,3,4,8,10,11,12,14,15,16,17,18,21,22,23,26,30,32,33,36,37,38,39,40,41],"iteration_factor":[21,26],"iteration_numb":21,"iy":18,"j":[18,34,39],"j1":[3,11,19],"j2":[3,11,19],"j_1":34,"j_2":34,"jacobian":[1,16,17,23],"jacobian_theta":[1,17],"jansen":23,"jerk":[5,31],"jerki":37,"jit":[16,22,23,29],"job":29,"join":[8,9,23],"joint":[0,1,2,3,4,7,9,10,12,13,14,15,18,19,21,23,26,29,30,31,33,34,35,39,41],"joint0":[21,23],"joint1":[10,11,21,23],"joint2":[11,21],"joint_":23,"joint_0":3,"joint_1":3,"joint_2":3,"joint_crank":23,"joint_fix":23,"joint_from_dict":[1,11],"joint_id":11,"joint_linear":23,"joint_map":11,"joint_nam":[17,23,38,39],"joint_name_or_index":[1,10],"joint_po":12,"joint_posit":[1,12,18],"joint_prismat":23,"joint_profil":[21,41],"joint_radius":[21,41],"joint_revolut":23,"joint_rol":3,"joint_signatur":[1,3,34],"joint_to_dict":[1,11,23],"joint_typ":[1,3,4,9,11,14,16,19,34],"jointposit":[1,10,12,13],"jointprofil":[1,21,41],"jointtyp":[1,3,9,11,23],"json":[1,3,9,11,19,22,23,34],"jul":12,"jump":12,"jun":[1,21,26],"jupyt":[21,41],"just":[1,2,3,9,11,21,22,24,25,31,34,40],"j\u2082":23,"k":[3,9,19,23,26,34],"k_1":40,"k_2":40,"k_3":40,"keep":[4,11,12,13,23,25,26,30,32,37,38,40,41],"kept":[22,23,30,34,37,40],"kernel":[23,34],"key":[1,3,7,9,10,11,14,16,18,19,23,30,34,39,41],"keyerror":[3,9,14,19],"keyword":[12,23,41],"kf":34,"kind":[23,24,25,33],"kinemat":[0,1,3,6,7,9,10,11,12,15,16,17,18,23,26,31,32,34,35,38,40],"kinematic_":23,"kinematic_default_test":[1,10],"kinematic_maxim":[1,12,30,32,38,41],"kinematic_minim":[1,12,23,26,29,30,32,36,37,38,39,40],"kinematic_optimizatino":23,"knee":[26,34],"knife":[7,23,31],"knob":22,"know":[3,9,23,32,40],"known":[3,16,19,23,30,34],"kutzbach":[1,3,11,15,23,34],"kw":12,"kwarg":[3,12,13,14,21,23,26,30,32,36,37,38,39,40,41],"l":[12,17,18],"l0":[17,39],"l1":[1,7,17,29,39,40],"l2":[1,7,17,29,39,40],"l3":[17,29,39,40],"l4":40,"l_1":40,"l_2":40,"l_3":40,"l_4":40,"label":[14,21,23,34],"label_offset":[1,21],"ladder":24,"lambda":[12,26],"lambdifi":17,"land":[18,23],"languag":24,"lap_per_second":26,"lap_point":26,"laptop":22,"larg":[1,11,15,23,33],"larger":[34,39],"laser":41,"last":[10,18,23,26,30,36,38,40],"last_iter":30,"later":[3,33],"latex_figur":41,"launch":23,"law":[5,7,18,23,29,35],"layer":41,"layout":21,"lazi":14,"lazili":[18,23],"lcm":[1,15],"lead":[24,25],"leader":[12,24,30],"learn":[12,24,29,35],"least":[3,12,13,16,18,22,37,40],"least_squar":23,"leav":16,"left":[9,11,17,18,23,26,34,39,40,41],"left_leg":9,"leg":[3,9,18,23,26,34],"leg1":9,"leg1_":3,"leg1_anchor_0":3,"leg2":9,"leg_topolog":9,"legaci":[1,3,9,10,11,14,17,21,23],"legacylinkag":21,"legend":[21,23,41],"leggedsnak":[9,23,29],"leman":19,"len":[3,9,11,12,18,21,23,26,30,32,33,34,36,37,39,40,41],"length":[1,5,7,10,11,12,16,17,21,23,26,29,30,33,34,38,40,41],"lengthen":38,"less":[18,23],"let":[21,23,29,30,32,33,37,39,40],"level":[4,7,9,11,16,18,19,23,24,25,29],"lib":23,"librari":[22,29,34,35,37],"licens":23,"lie":[16,18,23],"life":23,"lift":[5,31],"lightgray":41,"like":[1,3,6,7,9,11,16,21,22,23,24,32,34,37,38,41],"limit":[1,2,10,11,12,16,23,26,36,37,40],"linalg":[18,36],"linalgerror":18,"line":[1,2,3,6,7,8,9,10,11,16,17,18,21,23,26,29,30,33,38,39,40,41],"line1":7,"line1_anchor1":[1,7],"line1_anchor2":[1,7],"line1_p1":[7,16],"line1_p1_i":16,"line1_p1_x":16,"line1_p2":[7,16],"line1_p2_i":16,"line1_p2_x":16,"line1_pos1":16,"line1_pos2":16,"line2":7,"line2_anchor1":[1,7],"line2_anchor2":[1,7],"line2_node1":[1,3],"line2_node2":[1,3],"line2_p1":[7,16],"line2_p1_i":16,"line2_p1_x":16,"line2_p2":[7,16],"line2_p2_i":16,"line2_p2_x":16,"line2_pos1":16,"line2_pos2":16,"line2d":21,"line_a":26,"line_anchor1":[1,7,21,26],"line_anchor2":[1,7,21,26],"line_b":26,"line_from_point":[1,8,23],"line_lin":[3,7],"line_line_intersect":[1,8],"line_node1":[1,3],"line_node2":[1,3],"line_p1":16,"line_p1_ax":16,"line_p1_ay":16,"line_p1_i":16,"line_p1_vi":16,"line_p1_vx":16,"line_p1_x":16,"line_p2":16,"line_p2_ax":16,"line_p2_ay":16,"line_p2_i":16,"line_p2_vi":16,"line_p2_vx":16,"line_p2_x":16,"line_point":[1,11],"line_point1":10,"line_point2":10,"line_pos1":16,"line_pos2":16,"line_width":41,"linear":[0,1,6,7,11,12,15,16,18,21,22,23,26,31,32,36],"linearactu":[1,2,7,9,15,23,25,29,32,33],"lineintersect":8,"link":[0,1,2,3,4,6,7,9,10,12,16,17,19,21,23,25,26,31,33,38,40,41],"link1":11,"link2":11,"link4":18,"link5":18,"link6":18,"link_0":3,"link_1":3,"link_assort":[1,19],"link_from_dict":[1,11,23],"link_id":11,"link_length":[1,12,18,40],"link_profil":[21,41],"link_ratio":[1,18],"link_styl":[21,41],"link_to_dict":[1,11],"link_typ":[1,11],"link_width":[21,41],"linkag":[0,1,2,3,4,6,7,9,11,12,13,14,16,19,21,22,23,25,27,28,30,32,35,36,37,38],"linkage1":[39,41],"linkage2":[39,41],"linkage3":39,"linkage_2d":41,"linkage_3d":41,"linkage_factori":[12,23],"linkage_position_":41,"linkage_stat":41,"linkage_to_graph":23,"linkage_to_solver_data":[1,4,16,23],"linkage_to_symbol":23,"linkage_to_synthesis_param":[1,18,23],"linkage_veloc":36,"linkage_with_veloc":21,"linkagegraph":[1,3,11,34],"linkageproblem":[1,12,23],"linkprofil":[1,21,41],"linkstyl":[1,21,23],"linktyp":[1,11],"linspac":[17,26,29,39],"lint":23,"linux":22,"list":[0,1,3,5,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,25,26,30,31,32,33,34,37,39,40,41],"list_of_ag":21,"liter":[12,21],"literatur":19,"live":[3,9,10,23,25,29,34,37,41],"lk":41,"ll":[29,35],"lo":[18,40],"load":[3,5,9,11,12,18,19,31,34],"load_builtin":[1,19],"load_catalog":[1,19,23,34],"local":[11,12,18,23,38],"local_posit":[1,11],"localbestpso":12,"locat":[16,18,25,40,41],"loci":[1,10,11,12,14,21,23,26,29,32,33,34,36,37,38,39,40,41],"lock":23,"locus":[1,8,10,23,26,30,40],"locus_highlight":[21,23],"logic":[3,16],"lone":23,"long":[12,30,41],"longer":[21,22,23,39,41],"longest":[18,38,40],"look":[9,12,19,22,23,25,26,30],"lookup":23,"loop":[0,5,11,12,16,18,22,23,26,29,30,33,36,38,39],"lose":[30,37],"lost":23,"lot":23,"low":[4,5,7,11,16,29,30,31,36,38],"lower":[5,11,12,17,18,22,23,25,29,30,31,32],"lower_bound":[12,30],"lowest":[12,13,36],"lw":26,"m":[18,34],"machin":[22,41],"machined_linkag":41,"machineri":[18,23],"made":[23,26,32,34],"magnitud":[1,2,8,10,11,16,22,33],"mail":24,"main":[11,16,18,23,26,35,39],"maintain":[1,7,11,16,23],"major":[23,25,29],"make":[1,10,12,16,18,21,22,23,24,25,34,40],"make_fourbar":41,"malform":23,"manag":[1,11,15,23,37],"mandatori":23,"mani":[12,17,18,22,23,30,32,34,37,40],"manifest":23,"manipul":[9,12,17,41],"manual":[21,23,30,41],"manufactur":[10,29,38,39],"map":[1,3,7,9,10,11,12,14,16,17,18,19,26,31,34,39,40],"mar":12,"margin":[18,38,41],"mark":[10,23],"markdown":22,"marker":[21,23],"markup":23,"master":[23,35],"match":[1,3,10,11,14,16,18,21,23,29,30,36],"math":[1,2,3,5,6,7,18,29,31,32,34,40],"mathemat":[3,9,17,18,23,40],"mathworld":8,"matplotlib":[10,12,13,14,21,23,26,29,33,35,37,38],"matrix":[17,18,19,23],"matt":[1,8],"max":[5,10,12,17,18,21,23,25,26,30,32,36,37,38,39,41],"max_angl":[1,10,18,37],"max_angle_step":[1,10],"max_bound":21,"max_devi":[1,10,37,38],"max_dim":12,"max_factor":[12,17,30,32,38,39,40,41],"max_i":[26,30,36,37,38],"max_link":[1,12,18,19],"max_link_length":18,"max_orientation_candid":[1,18],"max_pair":[18,40],"max_par":16,"max_posit":[1,10],"max_position_step":[1,10],"max_ratio":23,"max_sensit":38,"max_solut":[12,13,18,22,23,25,37,40],"max_solutions_per_topolog":18,"max_synthesis_solut":12,"max_total_solut":18,"max_val":14,"max_x":[26,30,36,37,38],"maxim":[12,23,30,32,36,39],"maximize_height":39,"maximum":[1,2,4,5,10,11,12,13,16,17,18,19,26,31,32,36,39],"maxit":[12,17],"may":[1,12,16,17,22,23,24,25,30,32,37,38,40],"maybecoord":[3,11],"mccarthi":18,"md":[23,29],"mead":[12,23],"mean":[1,10,17,22,23,32,34,36,37,38,39],"mean_angl":[1,10,12,37],"mean_devi":[1,10,38],"mean_posit":[1,10],"meaning":[11,18,22,32],"measur":[1,6,7,10,11,16,18,22,23,25,36,37,38,40],"mech":11,"mech_bbox":30,"mechan":[0,1,2,3,4,5,6,7,9,10,14,15,16,18,19,21,22,23,26,29,30,35,36,37,40,41],"mechanism_convers":[0,1],"mechanism_from_dict":[1,11],"mechanism_from_json":[1,11],"mechanism_from_linkag":23,"mechanism_s":30,"mechanism_to_dict":[1,11,23],"mechanism_to_graph":[1,3,23,34],"mechanism_to_json":[1,11],"mechanism_to_linkag":23,"mechanismbuild":[1,11,23,29,34],"media":24,"median":[22,23],"meet":[7,30,34,36,38],"member":[3,11,12,14,23,24,26,30,37,40],"membership":[9,21],"memori":[12,36],"mention":23,"mere":23,"merg":[9,14,23],"messag":[1,3,17,18,23],"metadata":[12,14,18,19,21,23,26],"metaheurist":29,"method":[1,3,5,8,9,11,12,16,17,18,23,31,32,38,40],"metric":[1,10,18,30,36,37],"microsecond":22,"middl":[5,12,30,34,39],"midpoint":[5,11,31],"might":[3,37],"migrat":23,"millisecond":[18,21,22],"mimick":23,"min":[10,12,17,18,21,26,29,30,32,36,38,39,40,41],"min_angl":[1,10,18,37],"min_angle_step":[1,10],"min_bound":21,"min_devi":[1,10],"min_dim":12,"min_i":[26,29,30,36,37,38],"min_link_length":18,"min_posit":[1,10],"min_position_step":[1,10],"min_ratio":[12,17,30,32,38,39,40,41],"min_transmission_angl":[1,18],"min_val":14,"min_x":[26,30,36,37,38],"mind":32,"minim":[3,12,13,17,18,23,26,29,30,37,38,39,40],"minima":[12,23],"minimize_curvatur":39,"minimize_linkag":[1,12,23],"minimize_linkage_async":[1,12],"minimize_peak_veloc":36,"minimum":[1,2,5,10,11,16,18,23,31,36],"minor":[23,25],"mint":23,"minut":23,"mirror":[18,26,30],"misbehav":23,"mismatch":40,"miss":[7,16,23],"mistak":24,"mistaken":23,"mit":23,"mix":[3,12,23,39],"mixed_vari":[0,1],"mixedchromosom":[1,12,23],"mixedcrossov":[1,12,23],"mixedmut":[1,12,23],"mk":34,"mkdir":41,"mm":[10,38],"mobil":[1,3,11,15,18,19,23,25,29],"mobility_status":[1,3],"mobilityinfo":[1,19,23,25],"mobilityresult":[1,3,23],"mode":[21,23,26,40,41],"model":[1,3,4,9,10,11,21,23,25,29,32,33,41],"moder":24,"modern":[9,10,21,23,39],"modifi":[3,4,5,9,12,16,21,23,31,33,38],"modifiedtrapezoidalmotionlaw":[1,5,23,31],"modul":[0,23,25,26,28,29,31,34,39],"modulenotfounderror":23,"momentum":30,"mon":[12,21],"monoton":[22,25],"mont":[1,10,11,15,29,35,38],"moo":[23,29,37],"most_accur":37,"most_sensit":[1,10,38],"motion":[1,2,3,5,7,9,10,11,15,16,18,23,26,29,30,32,34,35,36,37,41],"motion_gener":[0,1,22,40],"motion_generation_3_pos":[1,18],"motion_law":[0,1,7,31],"motionlaw":[1,5],"motor":[0,1,2,3,9,11,17,18,23,29,32,33,34,39,41],"motor_joint":[1,11],"motor_port":[1,11,29],"move":[1,2,3,6,7,9,11,16,18,22,23,31,32,33,38,40],"movement":[6,16,21],"movement_bounding_bow":23,"movement_bounding_box":[1,10,23],"mozilla":24,"mp4":[26,41],"mruthyunjaya":[19,23],"ms":[22,23,41],"msg":17,"much":[10,22,23,38],"multi":[12,13,14,18,23,25,29,35],"multi_object":[0,1],"multi_objective_optim":[1,12,14,23,30,37],"multi_topolog":[0,1],"multi_topology_synthes":[14,18,34],"multimod":12,"multipl":[1,9,12,16,18,23,33,37,40],"multipli":[1,2,11,12,15,17],"must":[1,2,3,5,11,12,15,16,18,23,31,40],"mutabl":[13,23],"mutable_ag":[1,12],"mutableag":[12,13,23],"mutabledensematrix":17,"mutat":[12,14,23],"my_fit":12,"my_linkag":[3,12,26,29],"my_optim":12,"mypi":23,"myst_heading_anchor":23,"n":[1,3,8,9,11,12,14,15,16,18,19,23,26,30,34,38,39],"n_agent":26,"n_compon":[1,15,36],"n_constraint":[1,14,16],"n_crank":16,"n_dim":12,"n_dimens":[12,21],"n_evalu":[1,12],"n_gener":[1,12,37],"n_ghost":[21,41],"n_intersect":[1,8],"n_iter":[26,41],"n_joint":[1,11,14,16,17,21],"n_member":[14,26,40],"n_obj":23,"n_object":[12,13,37],"n_orientation_sampl":[12,18,22,23],"n_param":17,"n_particl":[12,21,22,26,30,32,36,38,39,40,41],"n_point":[22,25],"n_pop":23,"n_precision_point":23,"n_result":[12,30],"n_sampl":[1,10,11,15,18,23,25,38],"n_show":26,"n_solut":[12,13,37],"n_step":[10,38],"n_topolog":[12,14],"n_var":23,"n_worker":[12,23],"naiv":23,"name":[0,1,2,3,5,6,7,9,10,11,12,13,14,15,17,18,19,21,23,26,29,30,31,32,33,34,36,37,39,40,41],"namedtupl":[13,18,23],"namespac":23,"nan":[1,11,14,15,16,18,23,36],"nanmax":36,"napoleon":23,"napoleon_use_ivar":23,"narrow":[18,22,30],"nation":24,"nativ":[9,23],"natur":24,"navig":[12,23],"nbar_solution_to_linkag":[1,18,23],"nbarsolut":[1,12,18,25],"ndarray":[1,5,10,11,12,13,14,15,16,17,18,21],"near":[18,40],"nearest":[1,7,8,16],"necessarili":37,"need":[0,3,4,11,12,14,16,17,19,21,22,23,29,32,33,34,36,37,39,40,41],"negat":[11,12,18,23,36,39,40],"neighbor":[1,3,9,12,23,30],"neighborhood":[12,23],"neighbourhood":30,"neither":[23,25],"nelder":[12,23],"nest":14,"net":[1,8],"never":[1,10,11,18,22,23,25],"new":[1,2,3,5,7,9,10,11,12,13,14,15,16,17,18,21,23,32,34,35],"new_angl":16,"new_direct":16,"new_extens":16,"new_i":16,"new_po":16,"new_x":16,"newer":[23,25],"newest":23,"newli":3,"newton":[3,12,16,18],"newton_raphson":3,"next":[1,11,12,15,23,25],"nine":[18,23],"nlinkag":40,"node":[1,3,9,16,18,19,23,34],"node1":[1,3,9],"node2":[1,3,9],"node_a":[3,16,23],"node_b":[3,16,23],"node_from_dict":[1,3,9],"node_id":[1,3,9,34],"node_posit":[0,1,3,9,16,34],"node_to_dict":[1,3,9],"nodeid":[1,3,9,16,23],"noderol":[1,3,9,19,23,34],"nois":38,"noisi":22,"nomin":[10,38,39],"nominal_path":[1,10,38],"nominal_traj":39,"non":[1,5,11,12,13,15,18,19,21,23,26,31,37,40],"non_grashof":[1,18],"none":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,26,29,30,32,36,37,38,40],"nonsens":23,"norm":[1,8,36],"normal":[5,11,12,13,16,18,21,23,26,30,31,37,38],"normalis":23,"normalize_angl":[1,18],"normalize_data":[1,21],"normalized_signatur":3,"notabl":23,"notat":[3,7],"notcompletelydefinederror":[0,1,23],"note":[3,9,17,22,23,30,39],"notebook":[21,23,29,41],"noth":[22,23,25,32],"notic":[23,25],"notimplementederror":[3,9,14,16,18,23,32],"now":[22,23,25,33,39],"np":[1,5,11,12,13,14,15,17,21,26,29,36,39],"nsga":[12,23,29,35],"nsga2":[12,37],"nsga3":[12,37],"nsolut":40,"nstep":39,"num_1dof_joint":[1,3],"num_2dof_joint":[1,3],"num_anchor_nod":[1,3],"num_assur_group":[1,3,34],"num_constraint":12,"num_driver_joint":[1,3],"num_driver_nod":[1,3],"num_full_joint":[1,19,34],"num_ground_joint":[1,3],"num_ground_nod":[1,3],"num_half_joint":[1,19],"num_internal_nod":[1,3],"num_joint":[1,3,19,34],"num_link":[1,3,18,19,34],"num_precision_posit":[1,18],"numba":[1,4,5,8,11,12,14,15,16,22,23,29,32,33,36,39],"number":[1,3,9,10,11,12,13,14,15,16,17,18,19,21,23,25,26,28,30,32,37,38,40],"numer":[4,5,9,16,17,18,23,34,36,38],"numeric_crank":39,"numeric_linkag":39,"numeric_output":39,"numpi":[1,4,5,10,11,12,13,14,15,16,17,18,22,23,26,29,33,36,37,39],"numpydoc":23,"nx2":17,"o":[7,11,30],"o1":[1,2,6,7,11,15,29],"o2":[1,6,7,11,15,29],"o_cam":7,"o_pivot":7,"obj_1":[1,8],"obj_2":[1,8],"object":[1,3,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,25,29,33,34,35,36,38,40,41],"objective_func":17,"objective_indic":[12,13,37],"objective_nam":[12,13,14,37],"objective_valu":[1,17,39],"oblig":24,"observ":[1,3,6,9,11,39],"occur":10,"offens":24,"offer":[3,23],"offici":[23,24],"offlin":24,"offs":[12,30,37],"offset":[1,6,7,11,16,18,31],"often":[12,22,23,30,40],"old":[22,23,25],"older":25,"oldest":23,"omega":[1,11,15,16,21,23,29,34,36,41],"omega_valu":[1,16],"omit":10,"on_progress":[12,30],"onc":[3,11,18,22,23,36,38,41],"one":[1,2,3,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,25,26,29,30,32,33,34,36,37,38,39,40,41],"onli":[1,3,4,8,9,10,11,12,13,14,16,17,18,19,22,23,25,26,29,30,31,32,34,36,38,40,41],"onlin":24,"onto":[10,18],"op":[1,6,7,23],"open":[23,24,33,41],"oper":[0,1,5,16,18,19,23],"opinion":24,"oppos":2,"optim":[0,1,4,5,6,7,8,9,10,11,14,15,16,18,21,23,25,26,32,33,34,35,41],"optimal_dist":39,"optimal_param":39,"optimal_traj":39,"optimis":[22,26,39],"optimiz":[1,2,5,6,7,31],"optimizationerror":[0,1,12],"optimizationprogress":[1,12,30],"optimizationresult":[1,17],"optimize_with_progress":30,"optimized_fit":36,"optimizer_func":12,"optimum":[10,23,30,39],"option":[1,3,4,7,9,10,11,12,15,16,17,18,21,23,29,30,34,36,41],"orchestr":[1,11,15,29],"order":[0,1,3,10,11,12,14,15,16,18,19,21,22,23,26,30,32,33,34,39],"order_rel":[12,23,26,29,30,36,38,39,40],"ordin":23,"org":[24,26],"organiz":[14,23,41],"ori_i":[1,8,17],"ori_x":[1,8,17],"orient":[12,18,22,23,24,29,40],"orientation_resolut":[18,22,23,25],"origin":[1,3,5,6,7,8,10,11,12,16,17,18,21,23,26,30,39],"original_func":12,"original_graph":3,"oscil":[1,2,7,10,11,16,18,35,40],"oscillating_cam":[0,1],"oscillatingcamfollow":[1,7,23,31],"ot":23,"other_joint":[1,11],"other_nod":[1,3,9],"others":[23,24,30],"otherwis":[1,3,10,11,14,18,23,24],"outer":30,"outlin":[21,41],"outliv":[12,23],"output":[1,2,3,6,7,9,10,11,12,14,15,16,17,18,21,22,23,25,26,29,30,31,32,33,34,37,39,40],"output_angl":18,"output_cloud":[1,10,38],"output_joint":[1,10,11,15,17,38],"output_locus":30,"output_path":[30,36,37,38,40],"output_po":31,"output_veloc":36,"output_vi":36,"output_vx":36,"overal":[18,24],"overall_scor":[1,18],"overconstrain":3,"overdu":23,"overhead":[16,36],"overlaid":[21,33],"overrid":[5,16],"overview":1,"owning":23,"p":[1,3,9,11,15,16,17,18,23,30,34,37,39,40,41],"p0":16,"p0_ax":16,"p0_ay":16,"p0_i":16,"p0_vi":16,"p0_vx":16,"p0_x":16,"p1":[16,18,32],"p12":18,"p13":18,"p1_ax":16,"p1_ay":16,"p1_i":[8,16,17],"p1_vi":16,"p1_vx":16,"p1_x":[8,16,17],"p1n":18,"p2":[16,18,32],"p23":18,"p2_i":[8,16,17],"p2_x":[8,16,17],"p3_i":8,"p3_x":8,"p4_i":8,"p4_x":8,"p_ij":18,"pack":12,"packag":[0,23,25,33],"pad":[21,23,41],"page":[7,22,23,28,29],"paid":22,"pair":[0,1,3,7,8,9,10,11,12,14,15,16,18,19,21,22,23,25,26,29,33,34,40,41],"pairwis":[1,9,11,21,23],"pan":[21,41],"panda":[10,38],"paper":41,"paper_bgcolor":41,"parallel":[1,7,8,12,16,21,23,41],"parallel_coordinates_plot":[1,21,23,30,41],"param":[1,17,21,23,26,29,30,32,39],"param2dimens":26,"param_symbol":[17,39],"param_valu":17,"paramet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,25,26,31,32,37,38,39,40,41],"parameter":[3,17,18,23],"parameter_nam":[17,39],"parametr":[8,11,17,18],"parent":[1,2,6,7,12,16,17,21,23,32,39],"parent0":[1,17,39],"parent1":[1,17,39],"parent_idx":21,"parent_indic":[1,4,14,16],"pareto":[1,12,14,23,29,30,35],"pareto_front":[1,12,37],"paretofront":[12,13,14,23,37],"paretosolut":[12,13,14,23],"pariti":23,"pars":[3,23],"parse_isomer_signatur":[1,3],"parse_signatur":[1,3,34],"part":[1,3,6,9,11,15,21,23,26,32,34,41],"partial":17,"particip":24,"particl":[12,21,22,23,26,41],"particle_swarm":[0,1,23],"particle_swarm_optim":[1,12,22,23,26,29,30,31,32,36,38,39,40,41],"particle_swarm_optimization_async":[1,12,30],"particular":40,"partit":18,"partition_strategi":18,"pass":[1,3,7,8,10,11,12,13,16,18,21,23,25,26,29,30,32,34,36,37,40],"passiv":[1,2,3,9,34],"paste":26,"path":[1,3,5,9,10,11,12,14,15,18,19,21,22,23,25,29,31,33,34,35,37,38,39,41],"path_accuraci":[1,18],"path_and_veloc":36,"path_error":[12,36,37,38],"path_gener":[0,1,23,25,29,40],"path_generation_with_tim":[1,18,40],"pathlib":[34,41],"pattern":[3,11,12,22,23,24,30,38,40],"paul":[1,8,17],"paulbourk":[1,8],"paus":[21,41],"pay":22,"pdf":41,"peak":[5,31,39],"peak_acc":36,"peak_vel":36,"peak_veloc":36,"penal":[12,30,36,37],"penalti":[1,10,12,23,32,37],"pendinglink":[1,11],"pendingtrack":[1,11],"peopl":24,"pep":23,"per":[1,2,3,9,10,11,12,13,14,15,16,17,18,19,21,22,23,25,26,30,32,34,36,37,38,41],"perf_count":39,"perfect":[18,23,37,41],"perform":[4,16,17,22,23,29],"period":[1,5,14,15,21,24,31,32],"permiss":24,"permit":11,"permut":19,"perpendicular":[11,17,18],"persist":9,"person":24,"perspect":23,"perturb":[1,10,11,12,15,23,39],"perturbation_delta":[1,10],"perturbed_metr":[10,38],"perturbed_path_metr":[1,10],"perturbed_traj":39,"perturbed_transmiss":[1,10,38],"phase":[12,23,32,34],"phi":[26,40],"physic":[1,11,15,18,24,29,36,41],"pi":[1,2,5,6,7,11,15,17,18,26,29,31,39,40],"pick":[11,16,18,30,34,38],"pickl":[12,23],"picklabl":[12,23],"pillow":[36,41],"pin":[1,3,7,9,11,17,18,19,21,23,25,26,29,33,34,39,40,41],"pip":[21,23,29,33,37,38,41],"pipelin":[12,23],"piston":2,"pitch":[5,7],"pitch_radius":[1,5,31],"pivot":[7,10,11,16,18,21,23,29,31,32,34,38,39,40],"pivot_anchor":[1,7,31],"pivot_i":16,"pivot_x":16,"pixel":[21,41],"pl":[23,26,29,30,32,33,34,36,37,38,39,40,41],"place":[11,16,18,21,23,34],"placement":23,"plain":[18,23,25,29,34,38,39,41],"plan":26,"planar":[1,3,6,7,9,11,15,16,18,19,23,29,33,34],"plane":11,"plate":31,"platform":22,"plausibl":23,"play":[21,41],"pleas":[1,29],"plecnik":18,"pledg":28,"plot":[1,10,12,13,14,21,23,26,29,30,33,35,37,38,40],"plot_acceleration_vector":[1,21],"plot_bgcolor":41,"plot_cloud":[1,10,38],"plot_kinematic_linkag":[1,21,23,41],"plot_kinematics_fram":[1,21],"plot_linkage_dxf":[1,21,23,41],"plot_linkage_plot":[1,14,21,41],"plot_linkage_plotly_with_veloc":[1,21,23,36,41],"plot_linkage_svg":[1,21,23,41],"plot_linkage_svg_with_veloc":[1,21],"plot_plot":[14,23],"plot_static_linkag":[1,21,23,41],"plot_velocity_vector":[1,21],"plotly_viz":[0,1],"plt":[26,37,38,41],"plus":[7,9,18,19,23,30,33,34,38],"png":[36,37,38,41],"point":[0,1,2,3,5,6,7,8,9,10,11,12,13,15,16,17,18,19,21,22,23,25,26,29,30,31,32,33,34,37,38,39,41],"point2d":[18,23],"point_distance_object":39,"point_error":40,"point_to_complex":[1,18,23],"point_track":[0,1],"pointarrayprofil":[1,5,23],"pointtrack":[1,6,7,23,25],"polar":[1,6,7,8,11,16,17,21,26],"pole":[18,40],"polici":[23,25],"polish":12,"polit":24,"polynomi":[5,17,31],"polynomial_345":[1,5,23,31],"polynomial_4567":[1,5,23,31],"polynomialmotionlaw":[1,5,23,31],"pool":[12,23,30],"poor":[12,18,23,30,37],"pop_siz":[1,12,37],"popsiz":12,"popul":[0,1,11,12,17,18,23,25,29,37,39],"port":[1,9,11,16,23,29,34],"port1":[1,11],"port1_id":11,"port2":[1,11],"port2_id":11,"port_geometri":[1,11],"port_id":[9,11],"portid":[1,9],"pos":[1,15,16,23,26,41],"pos1":18,"pos2":18,"pose":[1,11,15,18,22,23,29],"posit":[1,2,3,4,6,7,9,10,11,12,13,14,15,16,17,18,21,23,24,26,29,31,32,33,34,36,38,39,40,41],"position_expr":[1,17],"position_std":[1,10,38],"positions_at_step_5":30,"positions_trajectori":16,"possibl":[1,3,7,10,12,18,23,36,39,40],"post":24,"potenti":14,"powel":12,"power":[18,39],"pp":[0,1,3,16,34],"ppdyad":[1,7,9,21,23,25],"ppr":3,"practic":[22,25,41],"pre":[1,11,12,14,15,17,21,23],"preassign":13,"preced":23,"precis":[18,22,23,25,30,41],"precision_indic":[1,18],"precision_point":[1,12,18,40],"precisionpoint":[12,18],"precomput":[5,12,21,41],"predic":14,"prefer":[3,9,18,30,39],"prefix":[3,9,12,34],"prepar":41,"prescrib":[18,22],"present":[23,41],"preserv":[17,19],"pressur":5,"pressure_angl":[1,5,31],"prev":[21,26],"prevent":21,"preview":26,"previous":[3,10,12,17,21,23],"primari":[1,2,14,16,18],"primit":29,"principl":3,"print":[1,3,7,10,12,15,16,17,18,22,23,25,26,29,30,31,32,33,34,36,37,38,39,40,41],"prior":23,"priorit":[18,37],"prioriti":37,"prismat":[1,3,7,9,10,11,15,16,19,21,23,34],"prismatic_joint":[1,10,11,15],"prismaticconnect":[1,11],"prismaticjoint":[1,11,23],"privaci":24,"privat":[23,24],"probabl":[12,19],"problem":[1,11,12,18,23,26,29,30,34,40],"process":[1,4,9,12,16,18,22,23,38],"processpoolexecutor":[12,23],"produc":[1,2,3,9,10,12,13,18,19,23,25,31,34],"product":16,"profession":24,"profil":[0,1,7,21,22,23,29,35,41],"profile_constraint":7,"profile_typ":[1,5],"profile_type_cod":5,"program":[1,8,12],"programmat":19,"progress":[12,23,41],"progress_fract":[1,12],"progress_handl":12,"progresscallback":[1,12],"project":[1,6,7,10,16,23,26,28],"promis":[12,23,25],"promot":34,"prompt":24,"propag":[16,23],"proper":[11,21,23],"properti":[1,2,3,5,6,7,10,11,12,13,14,15,16,17,18,23,31,32,40],"protocol":23,"prototyp":22,"provid":[1,2,3,4,5,6,7,8,9,10,11,12,15,16,17,18,19,21,23,24,30,31,32,33,38,39,41],"provision":[23,25],"proxi":[1,2,6,7,32],"prp":3,"prr":[3,34],"psi":40,"pso":[12,14,21,23,26,28,30,31,33,35,39,40],"pso_dashboard":41,"pso_parallel_coordin":41,"pso_plot":[0,1],"pso_visualization_demo":41,"ptp":39,"public":[0,21,22,23,24,28,29,41],"publish":[19,23,24],"pull":[23,30],"pure":[1,3,4,9,12,16,18,19,22,23,29,34],"purpos":[9,29],"push":23,"put":32,"px":[34,41],"py":[3,9,18,22,23,25,26,29,34,41],"pycharm":23,"pylinkag":[22,23,25,26,30,31,32,33,34,35,36,37,38,39,40,41],"pymoo":[12,13,23,29,37],"pymunk":29,"pypi":[23,28],"pyplot":[26,37,38,41],"pyproject":23,"pyswarm":23,"pytest":[23,25],"python":[1,4,15,16,22,23,25,26,29],"python3":26,"q":[18,34],"quad":40,"quadrant_fit":26,"qualifi":9,"qualiti":[18,21,22,29,37,41],"qualitymetr":[1,14,18,23],"quantiti":[21,36],"quarter":[22,23,26],"quaternari":[1,11],"queri":[16,23],"question":[24,30,38],"quick":[1,22,23,26,38],"quicker":23,"quiet":23,"quiver":21,"quot":22,"r":[1,3,7,8,9,11,15,16,17,18,26,34],"r0":[1,5,16,17],"r0\u00b2":16,"r1":[1,8,16,17,18],"r1\u00b2":16,"r2":[1,8,17,18],"r3":18,"r_ab":17,"r_bc":17,"r_cd":17,"r_max":5,"r_p_r":3,"r_t_t":7,"r_tt_":7,"race":24,"rad":[1,11,15,16,18,23,33,36,41],"radian":[1,2,5,6,7,11,16,17,18,31,34,40],"radic":[17,26],"radii":[1,5,23,31],"radius":[1,2,5,6,7,8,11,15,16,17,18,21,23,26,29,30,32,33,36,37,38,39,40,41],"rail":[3,7,11,21,23,32],"rais":[1,2,3,7,9,10,11,12,13,14,15,16,17,18,19,23,25,32,33,34],"ran":23,"rand1bin":12,"rand1exp":12,"rand2bin":12,"rand2exp":12,"random":[10,12,37],"randtobest1bin":12,"randtobest1exp":12,"rang":[10,12,14,18,19,21,22,23,26,30,31,32,37,39,40,41],"rank":[0,1,10,12,14,23,29,37,38,40],"rank_solut":[1,18],"raphson":[3,16,18],"rare":[18,22,25],"raster":41,"rate":[1,2,11,16,23,36],"rather":[1,3,11,16,18,19,22,23,25,32,36],"ratio":[12,18,22,36,40],"rational":23,"raw":[18,40],"raw_solut":[1,18,40],"raw_str":[1,3,34],"re":[7,11,12,23,30,34,41],"reach":[0,1,2,11,16,18,23,40],"reachabl":[12,23,25,40],"react":2,"read":[14,22,23,25,31,32],"readabl":[3,5,6,7,9,11,12,14,19,22,23,25,32],"reader":23,"readi":[3,9,11,18,21,23,32,34,40,41],"readm":[22,23,25,28],"real":[21,23,39,40],"realist":[22,38],"realli":23,"rearrang":16,"reason":[22,24,29,34],"rebuild":[1,11,15,23,39],"rebuilt":23,"receiv":[12,23,30],"reciproc":[1,2,31],"recognis":[23,34],"recombin":12,"recommend":[18,23,29,33,38],"recompil":[1,11,15,23],"recomput":[1,3,5,6,7,32],"reconstruct":3,"record":[9,10,14,23,26,30,34,41],"recorded_strid":41,"recov":[23,34,39],"recreat":21,"rectangl":[30,41],"rectangle_fit":30,"rectangular":30,"recur":23,"red":[10,21,38,40,41],"redefin":23,"reduc":[30,36,37,40],"ref1_po":11,"ref2_po":11,"ref_bb":26,"ref_i":8,"ref_joint1":11,"ref_joint1_id":[1,11],"ref_joint2":11,"ref_joint2_id":[1,11],"ref_po":26,"ref_port1":[1,11],"ref_port2":[1,11],"ref_x":8,"refer":[1,3,6,7,8,9,10,11,12,13,16,18,21,22,23,25,26,28,29,37,39,40],"referenc":[1,9,23],"reference_point":[12,13,37],"refin":[12,18,19,23],"reflect":[7,22],"refus":23,"regardless":[14,24],"regener":23,"region":[12,30],"regist":3,"regress":[22,23],"regular":[3,9,21],"reimplement":[22,23],"reject":[18,19,23,24,32,38,40],"relat":[1,6,7,9,10,11,12,16,18,19,23,28,30,38,40],"relationship":[18,29,40],"releas":[22,23,25],"religion":24,"reload":[1,2,6,7,23,34],"remain":[12,18,23],"rememb":23,"remov":[3,9,10,17,18,24,25],"remove_dyad":[12,23],"remove_edg":[1,3,9],"remove_hyperedg":[1,9],"remove_nod":[1,3,9],"renam":[23,25,34],"render":[21,23,26],"reorder":23,"reorgan":23,"repeat":[1,3,11,12,15,16,17,22,23,26,38,39],"replac":[14,23,25],"repoint":23,"report":[22,23,24],"reposit":11,"repositori":[23,29],"repr_polar_swarm":[23,26],"repres":[1,2,3,6,7,9,10,11,14,17,18,23,24],"represent":[1,3,4,5,9,11,14,16,17,18,19,23,29,33,35],"reproduc":[10,12,23,25,28,38,39],"request":[23,24,37],"requir":[1,3,5,6,7,10,12,15,16,18,21,23,28,30,32,34,36,37,38,40,41],"require_crank_rock":[18,40],"require_grashof":18,"require_grashof_driv":18,"resampl":18,"research":[34,40],"reset":[1,3,11,26],"reshap":14,"residu":[1,18],"residual_norm":18,"resolut":[18,22,23,25,41],"resolv":[7,21,23,25,32],"resolve_compon":[1,21],"respect":[16,17,18,23,24,29,39],"respons":28,"rest":[0,3,19,23,31,40],"restart":12,"restart_temp_ratio":12,"restor":[1,3,11,15,23,30],"restored_graph":3,"restrict":12,"restructur":[12,23],"restyl":41,"result":[1,3,5,10,11,12,13,14,15,16,17,19,21,22,23,25,26,29,30,32,33,34,36,37,41],"retir":[23,29],"retriev":18,"return":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,25,26,29,30,31,32,33,34,36,37,38,39,40,41],"reus":[1,11,15,23],"reusabl":[29,34],"revamp":23,"revers":[1,2,11,16,23],"review":24,"revolut":[1,3,7,9,10,11,16,17,18,19,21,23,26,33,34,41],"revolute_anchor":[1,7,23,26],"revolute_dist1":10,"revolutejoint":[1,11,23,34],"rewritten":23,"ride":23,"right":[11,17,18,24,26,30,34,39,40],"rigid":[3,9,11,16,18,19,23,29,33,34],"ring":[12,23,30],"rise":[5,31],"rise_end":[1,5,31],"rise_start":[1,5,31],"risk":23,"rms":18,"rng":12,"robot":18,"robust":[23,35,38],"robust_linkag":38,"rocker":[1,7,10,11,15,17,18,23,26,29,30,31,32,33,34,37,38,39,40,41],"rocker1":18,"rocker2":18,"rocker_length":[17,18,29,39,40],"rocker_pivot":[10,31],"rockerl":26,"rod":[11,23],"role":[1,3,7,9,19,23,34],"roll":[3,11,31],"roller":[5,7,23],"roller_radius":[1,5,7,23,31],"root":17,"rotari":[1,2,26,31],"rotat":[1,2,3,5,7,9,10,11,14,16,17,18,21,23,31,33,36,39,40],"rotate_point":[1,18],"rotation_matrix_2d":[1,18],"roth":18,"rough":[13,22,23,39],"round":[21,23,25,40,41],"rout":[16,23],"row":17,"rpr":[3,34],"rr_t":7,"rrp":[0,1,3,10,16,34],"rrpdyad":[1,7,9,15,21,23,25,26,29,33],"rrr":[0,1,3,10,15,16,18,23,26,29,33,34],"rrrdyad":[1,7,9,15,18,21,22,23,25,26,29,30,31,32,33,36,37,38,39,40,41],"rrrrrr":[3,34],"rrt_":[7,23],"rst":23,"rt__t":7,"rt_r":[3,7],"rt_t_":7,"rtr":3,"rule":[0,12,19,23,25,36],"run":[1,10,11,12,14,15,16,17,18,19,21,22,23,26,29,30,33,34,35,37,38,39,41],"run_benchmark":[22,23],"runtim":[19,22,23],"ryzen":22,"r\u00b2":16,"s":[0,1,3,5,6,7,8,9,10,11,12,14,15,16,17,18,19,21,22,23,24,25,30,31,32,33,34,35,36,37,39,41],"safe":[1,12,23],"said":23,"sampl":[1,10,12,17,18,23,25,40],"sandor":18,"sat":26,"satisfact":11,"satisfactori":23,"satisfi":[5,16,17,18],"save":[3,9,11,14,19,21,23,26,30,36,41],"save_count":26,"save_each":26,"save_linkage_dxf":[1,21,41],"save_linkage_step":[1,21,41],"save_linkage_svg":[1,14,21,41],"save_linkage_svg_with_veloc":[1,21,36,41],"save_path":[21,36,41],"save_png":41,"save_svg":[14,21,23,41],"savea":[21,41],"savefig":[36,37,38,41],"saw":23,"say":[23,40],"scale":[3,18,21,22,23,37,40,41],"scatter":[10,12,13,21,37,38],"schedul":[12,23],"scipi":[12,17,18,22,23,29],"scipy_optim":[0,1],"scope":28,"score":[1,12,13,14,18,21,23,26,30,32,36,37,38,39,40,41],"score_histori":[21,41],"score_solut":[1,18],"scores_array":[12,13,37],"scratch":29,"script":[23,27,28,30,33],"scrub":[21,41],"search":[12,14,18,19,22,23,25,28,29,34,35,37,39,40],"sec":29,"secant":[0,1,23],"secant_circles_intersect":23,"second":[1,3,6,7,8,9,10,11,16,17,18,19,21,22,23,25,26,29,36,38,39,41],"second_i":8,"second_x":8,"section":[21,22,23,26,41],"secur":24,"see":[0,1,6,7,9,11,12,15,19,21,22,23,24,25,26,29,30,32,33,34,36,37,38,39,40,41],"seed":[1,10,11,12,15,23,37,38],"seem":23,"seen":23,"segment":5,"select":[11,12,13,17,18,23,40],"select_compatible_dyad":[1,18,40],"selector":41,"self":[1,11,15,17,23,32],"semant":[1,6,23,25,29],"sen":[10,38],"sensit":[0,1,11,15,17,35,37],"sensitivity_analysi":[10,38],"sensitivity_rank":[1,10,38],"sensitivityanalysi":[1,10,11,15,38],"sensor":[1,6,11],"sent":23,"separ":[1,3,4,9,11,18,21,23,31,34],"sequenc":[1,3,10,12,13,17,19,21,23],"sequenti":[12,18],"sequential_vari":[1,12],"seri":[18,24],"serial":[0,1,12,19,23],"serialis":1,"serious":24,"serv":[1,6,9,23],"server":[23,29],"set":[1,2,3,5,6,7,11,12,15,17,18,19,21,22,23,24,25,26,31,32,34,37,40,41],"set_aspect":41,"set_branch":[1,11,23],"set_complet":[1,11,15,23,26],"set_constraint":[1,2,4,5,6,7,11,12,15,23,26,29,30,31,33,37],"set_coord":[1,4,6,11,15,23,26,30,32,37],"set_data":26,"set_dist":[1,11,23],"set_input_veloc":[1,11,15,21,23,36,41],"set_joint_posit":[1,11,23],"set_num_constraint":23,"set_rmax":26,"set_text":26,"set_titl":38,"set_xlabel":38,"set_xtick":26,"set_ylabel":38,"setup":23,"seven":23,"sever":[18,22,33,40],"sex":24,"sextic":18,"sexual":24,"shaft":21,"shape":[1,5,10,11,12,13,14,15,16,17,18,21,23,25,29,31,36,37,38,39,41],"shape_error":30,"share":[1,9,12,14,15,18,19,21,22,23,34],"sharp":[21,41],"shift":[21,39],"shim":23,"ship":[19,22,23,34],"short":[22,26,30,41],"shortcut":[23,25,29],"shorter":39,"shortest":[12,18,38,40],"shortest_crank":40,"shot":23,"show":[10,14,18,21,23,26,30,32,33,36,37,38,39,40],"show_acceler":[21,41],"show_dimens":[21,41],"show_kinemat":[1,21,23,36,41],"show_label":[21,41],"show_legend":[21,41],"show_limit":10,"show_linkag":[1,14,21,23,26,29,30,32,33,34,37,39,40,41],"show_loci":[21,41],"show_nomin":[10,38],"show_optim":26,"show_optimum":10,"show_veloc":[21,36,41],"showgrid":41,"shown":[33,41],"shrink":[22,25],"shuffl":23,"shut":12,"sibl":23,"side":[18,19,23,26,29,34,41],"sidebar":23,"sig":3,"sigma":12,"sign":[10,23],"signatur":[0,1,7,12,18,19,22,23,30,32],"signature_to_group_class":[1,3],"signature_to_hypergraph":[1,3,23,34],"signific":[1,11,15,16],"silent":[1,10,22,23,25,32],"sim":1,"sim_convers":[0,1],"sim_linkag":9,"similar":[1,2,17,23,37,41],"simlinkag":[9,18,21,23],"simpl":[1,5,9,12,21,23,26,30,31,34,39,41],"simpler":[3,18,30],"simplest":[33,39],"simplex":12,"simpli":[23,25,39],"simplic":18,"simplif":23,"simplifi":[1,17,23,37],"simul":[0,1,2,3,4,5,6,7,9,10,11,12,14,18,21,22,23,25,26,29,30,31,32,34,35,37,38,39,40,41],"simulate_al":[14,23],"simulate_memb":14,"simulate_with_kinemat":[1,16,23],"simultan":[3,23],"sin":[5,16,17,32,39],"sinc":[3,9,12,18,23,25],"singl":[1,3,9,10,11,12,13,14,16,18,19,21,22,23,24,32,34,36,41],"singular":[16,18,23],"sinusoid":[5,32],"sit":[4,16,23,30,32,33,34,40],"situat":23,"six":[12,18,19,22,23,25,34,41],"six_bar":[0,1],"six_bar_path_gener":[1,18],"size":[1,12,19,21,24,30,37,40,41],"skip":[1,10,21,23],"skip_stat":21,"skip_unbuild":23,"slice":14,"slide":[1,3,7,10,11,15,16,19,21,23,32],"slide_direct":11,"slide_dist":[1,11],"slide_through":11,"slideaxi":[1,11],"slider":[1,3,7,9,10,11,19,21,23,26,33],"slider_crank":[1,11,23],"slider_po":10,"slight":39,"slot":[3,7,12,16,32],"slow":[23,30,37],"slower":[22,30,39],"slowest":11,"slsqp":12,"small":[10,12,19,22,26,31,38,40],"smaller":[12,21,37,38,39],"smallest":38,"smooth":[5,12,14,31,37],"snap":23,"snippet":23,"social":[12,24],"socio":24,"softwar":[21,41],"soh":18,"sol":[14,18,40],"sol_a":37,"sol_b":37,"sole":23,"solid":[10,21,22,41],"solidwork":[21,41],"solut":[1,7,11,12,13,14,16,18,22,23,25,29,30,39],"solution_to_linkag":[1,18,23,40],"solutions_to_linkag":[1,18],"solv":[0,1,3,9,10,11,15,17,18,19,22,23,31,32,34,40],"solvabl":3,"solve_":23,"solve_arc_crank":[1,16],"solve_crank":[1,16],"solve_crank_acceler":[1,16,23],"solve_crank_veloc":[1,16],"solve_decomposit":[1,3,16],"solve_fix":[1,16],"solve_fixed_acceler":[1,16,23],"solve_fixed_veloc":[1,16],"solve_freudenstein_3_posit":[1,18],"solve_freudenstein_least_squar":[1,18],"solve_group":[1,3,16,23],"solve_line_lin":[1,16],"solve_linear":[1,16],"solve_linear_actu":[1,16],"solve_linkage_symbol":[1,17,39],"solve_ord":[1,3,4,14,16],"solve_oscillating_cam_follow":[1,16],"solve_pp_dyad":[1,16],"solve_prismatic_acceler":[1,16,23],"solve_prismatic_veloc":[1,16],"solve_revolut":[1,16],"solve_revolute_acceler":[1,16,23],"solve_revolute_veloc":[1,16,23],"solve_rigid_body_acceler":[1,16,23],"solve_rigid_body_veloc":[1,16,23],"solve_rrp_dyad":[1,16],"solve_rrr_dyad":[1,16],"solve_translating_cam_follow":[1,16],"solve_triad":[1,16],"solver":[0,1,3,4,11,14,15,23,25,28,29,32,34,36,39],"solver_categori":[1,3,23],"solver_convers":[0,1,23],"solver_data_to_linkag":[1,4],"solverdata":[1,4,11,12,14,15,16,23],"some_metr":12,"sometim":[23,30,40],"soon":[18,22],"sort":[14,18,19,23,24],"sourc":[1,3,9,11,12,23,28,34],"sp":[17,39],"space":[12,13,17,18,21,23,24,33,39,40],"span":31,"spare":30,"spawn":12,"spec":21,"special":[1,3,9,11,18,21,31,32,35,40],"specif":[3,11,12,16,17,18,21,23,25,29,30,36,39,40,41],"specifi":[11,16,17,18,21,23,24,29,38,40],"speed":[1,2,5,23,31,34,36,37,39],"speedup":[16,22,23,39],"spheric":18,"sphinx":23,"spline":[5,23,31],"split":[18,22,23],"spot":23,"spread":[22,37,38],"sqr_dist":[1,8],"sqrt":[17,26,34,36,39],"squar":[1,8,12,17,18,26,30,39,40],"stabil":[1,3,9,11,18,28],"stabl":19,"stack":18,"stadium":41,"stage":[12,18,22,23],"stale":23,"stand":23,"standalon":16,"standard":[1,3,5,10,11,12,15,19,23,26,28,36,38,39,41],"star":40,"start":[0,1,2,3,5,7,8,11,12,14,15,16,23,26,28,30,31,32,34,41],"startup":23,"stash":[17,39],"state":[1,3,11,12,15,18,21,22,23],"static":[0,1,3,10,11,17,18,19,23,26],"stationari":[1,6,11,18,23],"statist":[10,38],"status":[3,17,24],"stay":[1,16,22,23,30,32],"std":[12,36,38],"std_deviat":[1,10,38],"steadi":[22,23],"steal":21,"step":[1,2,3,6,7,10,11,12,14,15,16,18,21,22,23,26,29,35],"step_export":[0,1],"step_fast":[1,7,11,15,16,22,23,29,32,33],"step_fast_with_kinemat":[1,11,15,21,23,33,36],"step_singl":[1,16,23],"step_single_acceler":[1,16,23],"step_single_veloc":[1,16],"step_with_deriv":[1,11,15,23],"stephenson":[12,18,19,23,34],"stephenson_from_length":[1,18,23],"still":[3,7,14,22,23,25,34,36],"stop":[5,18,22,23,25,31,40],"store":[3,9,11,14,16,17,18,19,23,36],"stp":[21,41],"str":[1,2,3,5,6,7,9,10,11,12,13,14,15,16,17,18,19,21,26],"straight":[2,11,18,23,29,39],"strategi":12,"stray":[23,30],"stream":23,"strict":[12,13,23,26,37],"stride":[14,26,32,41],"strider":[23,27,28,30,41],"string":[1,3,7,21,23,34],"stringif":23,"stringifi":[1,23],"stroke":[1,2,10,11,15,16,23,27,28],"stroke_at_posit":[1,10,11,15],"stroke_engin":26,"stroke_posit":[1,11,15,23],"stroke_rang":[1,10],"strokeanalysi":[1,10,11,15],"strong":22,"structur":[1,3,6,7,8,9,10,11,12,14,16,17,18,19,22,23,29,30,34,35],"structuralanalysi":[1,3,23],"style":[21,23,32,37],"styled_linkag":41,"sub":[18,23,29,34,39],"subclass":[3,5,32],"subdivid":21,"subdivis":[12,23],"subject":37,"submodul":[0,28],"subpackag":[0,23,28],"subplot":[21,23,26,38,41],"subprocess":23,"subscript":13,"subsequ":[16,23],"subset":[12,13,18,37],"substitut":[1,16,17],"substructur":3,"subsystem":[23,25],"succeed":12,"success":[1,10,17,26,39],"sugar":23,"suggest":19,"suit":22,"suitabl":[3,9,12,21],"sum":[5,12,13,18,26,30,36,37,39,40],"super":32,"suppli":[11,12],"support":[3,5,9,12,13,14,16,18,21,23,28,29,31,41],"suptitl":26,"sure":12,"surfac":[23,25,29,31,39],"surviv":[18,23],"sustain":24,"svg":[14,21,23,29,35],"swallow":[23,25],"swap":23,"swap_vari":[12,23],"swarm":[12,21,22,23,26,36,38,41],"swarm_optim":26,"swarm_tiled_repr":[1,21,23,26],"sweep":[18,23,39,40],"swing":[7,31,32],"switch":23,"sym_linkag":[17,39],"sym_stride_evalu":26,"symbol":[0,1,23,35,40,41],"symbol_spec":23,"symbol_typ":[1,21],"symbolic_circle_intersect":[1,17],"symbolic_circle_line_intersect":[1,17],"symbolic_cyl_to_cart":[1,17],"symbolic_dist":[1,17],"symbolic_gradi":[1,17,39],"symbolic_hessian":[1,17],"symbolic_sqr_dist":[1,17],"symbolic_to_linkag":23,"symboliclinkag":[1,17,23,39],"symbolicoptim":[1,17],"symbolspec":[1,21],"symboltyp":[1,21,23],"symcoord":[17,23],"symcrank":[1,17,23,39],"symjoint":[1,17],"symmetr":26,"symmetri":39,"sympi":[17,23,29,35,39],"symrevolut":[1,17,23,39],"symstat":[1,17,23,39],"sync":[4,29],"synchron":4,"syntact":23,"syntax":3,"synthes":[1,18,29,40],"synthesi":[0,1,9,11,12,14,23,25,28,29,34,35,39],"synthesis_to_chromosom":[1,12],"synthesis_typ":[1,18],"synthesisproblem":[1,18],"synthesisresult":[1,18,23,40],"synthesistyp":18,"system":[1,3,5,11,16,18,22,31],"systemat":[3,19,23],"s\u00b2":[1,6,11,15,16,36],"t":[1,3,6,7,9,11,12,16,17,19,23,26,30,32,36,40],"t_r_t":[3,7,16],"t_rt_":[7,16],"tabl":[22,23],"tag":[3,23],"tail":12,"take":[12,22,23,24,25,32,34,40],"taken":[18,23],"tangent":8,"tangenti":16,"target":[1,3,9,12,17,18,19,23,30,34,37,39],"target_bbox":36,"target_cent":37,"target_i":39,"target_id":[1,12],"target_radius":37,"target_v":30,"target_x":39,"task":23,"tau":[23,32,34],"tax":23,"technic":41,"techniqu":[31,32,33,35,36,37,38,39,40],"tell":[22,23,25,29],"temperatur":12,"tempfil":34,"templat":[14,23],"temporarydirectori":34,"ten":[22,23,25],"tend":[18,25],"term":[16,18,23,24,39],"termin":[12,18],"terminolog":11,"ternari":[1,11,16,18,21,23],"test":[22,23,25,29],"test_converg":23,"test_geometri":23,"test_linkag":23,"test_optim":23,"test_public_api":[23,25,29],"testpso":23,"tetrad":[1,3],"text":[26,41],"thank":23,"themselv":[16,23],"theorem":18,"theoret":[18,26],"theori":[1,3,22,23,29,35],"therefor":[19,23,30,34],"theta":[1,8,17,39,40],"theta12":18,"theta13":18,"theta2":18,"theta4":18,"theta_array":17,"theta_sampl":17,"theta_v":[17,39],"theta_valu":[17,39],"thick":[1,21,41],"thicker":41,"thin":33,"thing":[23,32],"think":29,"third":[16,23],"thousand":[22,23],"thread":[12,30],"threadpoolexecutor":12,"threaten":24,"three":[9,11,16,18,19,21,22,23,25,29,32,33,34,39,41],"threshold":18,"throughout":[10,23,33],"throughput":[23,28],"thu":1,"thus":40,"tibia":26,"tight":[16,38],"tight_layout":[38,41],"tighten":38,"tile":[21,26],"time":[1,2,3,5,6,7,11,14,15,16,17,18,23,24,25,26,29,31,32,38,39],"tini":36,"tip":[11,18,23,26,29,32,33],"tip_locus":[26,29],"titl":[10,21,26,36,38,41],"tmp":34,"tnc":12,"to_ag":14,"to_cartesian":[1,18],"to_complex":18,"to_datafram":[1,10,38],"to_dict":[0,1,23],"to_dyad_solut":[1,18],"to_edg":[1,9,23],"to_graph":[1,19,34],"to_html":41,"to_hypergraph":[1,3,15,23],"to_inst":[1,9],"to_json":[1,19,23],"to_linkag":23,"to_loci":[14,23],"to_mechan":[1,3,7,9,23,34],"to_numba_coeffici":[1,5],"to_numba_data":[1,5],"to_pareto_front":[14,23,37],"to_port":[1,9],"to_simple_graph":[1,9,23],"toctre":23,"today":25,"togeth":[9,19,23,34],"toggl":[23,41],"tol":[1,8,12,17,38],"told":23,"toler":[1,8,10,11,12,15,17,18,29,35,37],"tolerance_analysi":[10,38],"tolerance_cloud":38,"tolerance_constrain":38,"toleranceanalysi":[1,10,11,15,38],"toml":23,"took":[22,23,25],"tool":[3,9,10,14,19,23,29,37,38],"tooltip":21,"top":[3,9,14,18,22,23,25,26,29,39],"topic":28,"topolog":[0,1,3,4,9,11,12,14,16,18,23,25,29,30,39],"topology_0":14,"topology_1":14,"topology_by_index":[1,19,23],"topology_dist":[1,12,23],"topology_entri":[1,12,18],"topology_id":[1,12,14,18,19],"topology_idx":[1,12],"topology_index":[1,19,23],"topology_key":[14,23],"topology_mutation_r":[1,12],"topology_neighbor":[1,12,23],"topology_neighborhood":[0,1],"topology_r":12,"topology_typ":[0,1],"topologycatalog":[1,12,19,23],"topologyneighbor":[1,12],"topologysolut":[1,12,14,18,23],"total":[3,10,11,12,16,18,19,23,30,36],"total_iter":[1,12,30],"total_lift":[1,5,7,31],"touch":[23,25],"toward":[18,24,30],"tox":23,"tqdm":[23,29],"tqdm_verbos":23,"trace":[1,2,5,18,21,23,29,30,31,33,34,40,41],"tracer":[1,6,11],"tracer_point":[1,6],"track":[1,3,6,9,10,11,12,23,30,38],"tracker":[1,3,6,9,11,18,23],"trackerjoint":[1,11,23],"tracking_fit":30,"trade":[12,18,22,23,25,30,35],"trail":32,"traj":39,"trajectori":[1,4,10,12,14,15,16,17,18,21,23,29,30,41],"tran":38,"transcript":[1,8],"transfer":[3,18],"transform":[11,21,34,39,40],"transit":[23,25],"translat":[1,3,7,9,11,16,18,22,23,24,25,35],"translating_cam":[0,1],"translatingcamfollow":[1,7,23,31],"transmiss":[0,1,11,12,15,18,23,29,31],"transmission_angl":[1,11,15,23],"transmission_angle_at_posit":[1,10,11,15],"transmission_object":37,"transmission_penalti":[12,37],"transmissionangleanalysi":[1,10,11,15,23],"transmit":11,"transpar":[10,21,38],"trapezoid":[5,31],"travel":[10,31,32,37,41],"treat":[3,11,22,23,33],"tri":[3,9,18,26,33],"triad":[1,3,16,18,23,34],"trial":[23,26,30],"trials_and_error":23,"trials_and_error_optim":23,"trials_and_errors_optim":[1,12,23,26,30],"trials_and_errors_optimization_async":[1,12],"trials_and_errors_optimizatt":23,"triangl":[9,11,18,19,21,23,26,34],"tricircular":18,"trip":23,"tripl":[1,23],"trivial":36,"troll":24,"true":[1,3,5,7,9,10,11,12,13,14,15,16,17,18,19,21,23,25,26,30,31,34,36,37,38,39,40,41],"truncat":[12,23],"truss":19,"trustworthi":22,"tune":[30,39,40],"tupl":[1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,26,29,30,32,33],"turn":[18,23,25,26,32,34,40,41],"tutori":[0,23,25,30,31,32,33,34,36,37,38,39,40,41],"twelv":23,"twenti":23,"twice":23,"two":[1,2,3,6,7,8,9,11,12,14,16,17,18,19,21,22,23,25,30,31,32,33,34,38,39,40],"txt":23,"type":[0,1,2,3,5,7,8,9,10,11,12,14,18,19,21,23,25,26,31,34,35,38,40,41],"type_check":23,"typeerror":9,"typic":[4,5,7,11,18,19,22,23,34,40,41],"typing_extens":23,"typo":23,"u":[5,31],"ugli":23,"unabl":1,"unaccept":24,"unaffect":[23,25],"unassembl":23,"unavail":14,"unblock":23,"unbound":[17,18],"unbuild":[1,10,11,15,16,17,18,23,30,37,38],"unbuildableerror":[0,1,7,11,16,23,26,30,32,33],"unchang":[22,23,25],"uncom":39,"uncondit":23,"unconstrain":11,"undefin":[1,2,7,8,11,23],"underconstrain":[3,9,11],"underconstrainederror":[0,1,11,23],"underlying":[3,18,40],"underscor":25,"understand":[30,34],"unifi":[7,14],"uniform":[10,13,23,30,33],"uniform_veloc":36,"uniqu":[3,9,11,18,19,40],"unit":[1,2,3,6,7,11,15,16,21,22,31,34,36,38,41],"unittest":23,"universal":[14,23],"unknown":[7,16,18,21,23],"unless":[23,36],"unlik":[1,3,6,7,11,12,18,37,40],"unmaintain":23,"unpack":23,"unprofession":24,"unrank":18,"unreach":[12,23,40],"unrel":[23,25,39],"unreleas":28,"unresolv":23,"unsolicit":24,"unsupport":3,"untouch":[11,23],"untyp":23,"unus":[1,6,7,16,26,32],"unwelcom":24,"updat":[4,11,12,16,21,23],"update_animated_plot":[1,21],"update_layout":41,"update_posit":[1,11],"update_solver_constraint":[1,4,23],"update_solver_posit":[1,4],"update_trac":41,"update_xax":41,"update_yax":41,"upfront":30,"upgrad":25,"upl":12,"upper":[11,12,13,17,22,30,32,34],"upper_bound":[12,30],"upstream":9,"upward":31,"url":23,"us":24,"usag":[3,4,9,11,16,17,26,36],"use":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,30,31,33,35,36,39,40,41],"useless":21,"user":[4,6,11,14,22,23,41],"usr":26,"usual":[16,30,40],"util":[0,1,3,10,17,21,23],"uv":[22,23,29,33],"uvicorn":23,"ux":34,"uy":34,"v":16,"v0":16,"v1":16,"val":38,"valid":[1,3,10,11,12,16,18,19,23,29,32,34,38,40],"valid_ratio":36,"valid_spe":36,"validate_against":[0,1,34],"validate_decomposit":[1,3,34],"validate_fourbar":[1,18],"validation_messag":[1,3],"valu":[1,2,3,5,6,8,9,10,11,12,13,15,16,17,18,19,21,22,23,25,26,30,31,32,34,36,38,40],"valueerror":[1,2,3,7,9,10,11,12,13,14,15,16,17,18,19,23,32],"vari":[12,14,31,39,40],"variabl":[1,2,3,5,6,7,9,10,11,12,13,14,16,18,19,21,22,23,38],"variant":[3,7,12,14,23,41],"variat":[10,12,23,29,36,38],"varieti":18,"various":[3,5,12,14,23,31],"vbox":21,"vector":[1,8,11,14,21,23,26,41],"vel":[1,15,21],"vel_uniform":36,"veloc":[0,1,2,4,5,6,11,15,17,21,23,29,31,32,33,34,35,38,40,41],"velocities_trajectori":16,"velocity_anim":[36,41],"velocity_color":[21,36],"velocity_fram":36,"velocity_penalti":36,"velocity_plot":36,"velocity_scal":[21,36,41],"velocity_vari":36,"verbos":[1,12,23,30,32,36,37,38,39,40,41],"veri":[12,36],"verif":[19,22,23,38,40],"verifi":[18,22,23,38,41],"verify_function_gener":[1,18,40],"verify_path_gener":[1,18],"version":[12,17,21,22,23,24,25,29,30,32],"versus":10,"vertic":[6,7,11,19,21,26,31],"via":[1,3,4,9,10,11,12,14,15,18,19,21,23,24,29,31,33,36],"vibrat":36,"video":21,"view":[1,14,15,23,26,38,41],"view_linkag":26,"view_swarm_polar":26,"view_swarm_til":26,"viewpoint":24,"violat":24,"violent":12,"viridi":21,"virtual":23,"visibl":[22,24,25],"visit":12,"visual":[0,1,3,9,11,12,14,18,23,25,26,31,32,34,35,39,40],"visualis":26,"viz":[23,29,41],"vizual":23,"vocabulari":23,"volum":[12,13],"vs":[7,18,39],"vulner":23,"vx":[1,6,11,15,16,21,36],"vx0":36,"vx1":36,"vy":[1,6,11,15,16,21,36],"vy0":36,"vy1":36,"w":[25,41],"wait":22,"walk":[0,18,23,26,29,33,41],"walker":[9,23],"walkthrough":23,"wall":23,"wampler":18,"want":[1,6,11,21,26,29,30,34,36,40,41],"warm":[12,23],"warm_start":[0,1],"warm_start_co_optim":[1,12,23],"warm_start_sampl":[1,12,23],"warmup":[22,23],"warn":[1,3,7,18,23,25,40],"warrant":22,"wasn":23,"watch":33,"watt":[12,18,19,23,34],"watt_from_length":[1,18,23],"way":[0,1,3,7,9,18,19,21,22,23,24,25,29,30,32,33,34,39],"wear":36,"websit":23,"wed":1,"weight":[12,13,18,30,36,37],"weighted_object":30,"weisfeil":19,"welcom":[24,26,29],"well":[12,13,16,18,23,24,30,37],"whatev":[23,34],"wheel":23,"whenev":23,"wherev":[16,23],"whether":[10,12,17,18,19,21,25,38],"whi":[22,23,24],"whichev":[18,23],"white":41,"whole":[23,25,31,41],"whose":[1,11,12,14,15,16,18,19,23,32,33,34,40],"wide":[5,18,38,40],"widen":[30,37],"wider":22,"width":[1,18,21,37,41],"wiki":[24,26],"wikipedia":26,"will":[1,7,11,12,15,16,17,21,23,24,25,39],"win":23,"window":[33,41],"within":[1,3,9,10,11,12,14,18,19,24,30,39],"without":[1,3,6,9,11,12,13,15,18,22,23,24,25,26,29,30,32,34,37,39],"wl":[19,23],"wolfram":8,"woodhead":[1,8],"word":23,"work":[1,3,4,10,14,19,21,22,23,28,32,34,39,41],"worker":[12,23],"workflow":[23,29],"workspac":39,"world":[18,21,41],"wors":[12,13,37],"worsen":37,"worst":[10,18,37,38],"worst_angl":[1,10],"worst_transmiss":37,"worth":23,"wrap":[3,12,18,23,33,34,41],"wrapper":[1,3,11,12,23,30,41],"write":[23,30,34,41],"write_html":[36,41],"writer":[26,41],"written":[23,24],"wrong":[3,23,25,30],"www":[24,26],"x":[1,2,3,6,7,8,10,11,12,14,15,16,17,18,21,22,23,26,29,30,32,33,34,36,37,39,40,41],"x0":[12,16,17,32],"x1":[1,8,16,17,32],"x2":[1,8,17],"x_a":16,"x_b":16,"x_coupler":39,"x_crank":39,"x_expr":[17,39],"x_func":[17,39],"x_max":[1,8,10],"x_min":[1,8,10],"x_rang":39,"x_val":17,"xl":12,"xs":[1,10,23,32,41],"xu":12,"y":[1,3,6,7,8,10,11,12,14,15,16,17,18,21,23,26,30,32,33,36,37,39,40],"y0":[16,17,32],"y1":[1,8,16,17,32],"y2":[1,8,17],"y_a":16,"y_b":16,"y_coupler":39,"y_crank":39,"y_expr":[17,39],"y_func":[17,39],"y_max":[1,8,10],"y_min":[1,8,10],"y_rang":39,"yet":[3,9,12,14,16,23,32],"yield":[1,3,11,15,16,19,21,23,33,40],"yml":23,"your_script":25,"ys":[1,10,23,30],"z":[18,21,41],"z_offset":21,"zenodo":23,"zero":[1,5,11,12,15,18,22,23,25,26,31,34,39],"zip":[26,30,36,38,39,40],"zone":23,"zoom":[21,41],"\u03b1":16,"\u03b3":16,"\u03b8":16,"\u03c9":16,"\u03c9\u00b2":16,"\u1d40":16,"\u1e91":16},"titles":["pylinkage","pylinkage package","pylinkage.actuators package","pylinkage.assur package","pylinkage.bridge package","pylinkage.cam package","pylinkage.components package","pylinkage.dyads package","pylinkage.geometry package","pylinkage.hypergraph package","pylinkage.linkage package","pylinkage.mechanism package","pylinkage.optimization package","pylinkage.optimization.collections package","pylinkage.population package","pylinkage.simulation package","pylinkage.solver package","pylinkage.symbolic package","pylinkage.synthesis package","pylinkage.topology package","pylinkage.topology.data package","pylinkage.visualizer package","Benchmarks","Changelog","Contributor Covenant Code of Conduct","Deprecations","Example Scripts","examples","Welcome to pylinkage\u2019s documentation!","Pylinkage","Advanced Optimization Techniques","Cam-Follower Mechanisms","Custom Components","Getting Started","Graph-Based Linkage Representation","Tutorials","Kinematics-Based Optimization","Multi-Objective Optimization","Sensitivity & Tolerance Analysis","Symbolic Computation","Linkage Synthesis","Visualization Backends"],"titleterms":{"2d":[37,41],"3d":41,"Do":29,"How":25,"I":29,"It":29,"Offs":37,"Our":24,"The":34,"Up":36,"What":[22,25,29],"When":[34,37],"Where":22,"Which":29,"Your":33,"acceler":16,"actuat":2,"add":23,"advanc":[30,35,37,40],"agent":13,"algorithm":37,"altern":29,"analysi":[3,10,19,29,31,34,37,38,39,40],"analyz":38,"angl":[31,38],"angular":36,"anim":[21,40,41],"api":[29,38],"appear":41,"applic":34,"arc_crank":2,"architectur":29,"assur":[3,34],"assur_mechan":3,"assurmechan":34,"async":30,"async_optim":12,"attach":34,"attribut":24,"avail":31,"away":25,"back":39,"backend":41,"ban":24,"bar":[26,29,31,33],"base":[34,36,38],"basic":[30,31,37,38,40,41],"benchmark":22,"best":[32,37],"block":33,"bound":30,"bridg":4,"build":[33,34,39],"builder":[11,29],"burmest":[18,40],"cad":41,"cam":[5,31],"can":29,"catalog":[19,34],"chang":23,"changelog":23,"characterist":[36,39],"choos":41,"class":[32,39],"cloud":38,"co_optimization_typ":12,"code":24,"collect":13,"combin":[36,37],"comparison":[37,39],"compil":39,"complet":[32,33,38,39,41],"compon":[6,32,33,39],"compromis":37,"comput":39,"concept":33,"conduct":24,"connect":31,"consider":36,"constraint":[30,33,36,38],"content":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],"contribut":29,"contributor":24,"convers":[17,18],"convert":[34,39],"core":[8,9,18,21,33,35],"correct":24,"count":38,"coven":24,"crank":2,"creat":[18,33,34,39,40],"current":25,"curv":40,"custom":[32,41],"data":[20,30],"datafram":38,"decompos":34,"decomposit":3,"default":37,"defin":[29,30,32,33],"deprec":[23,25],"detect":34,"dimens":[1,34,40,41],"direct":36,"document":28,"domin":37,"downstream":31,"drawsvg":41,"drawsvg_viz":21,"driven":31,"dxf":41,"dxf_export":21,"dyad":[7,25],"effect":39,"els":29,"embed":41,"enforc":24,"engin":26,"enumer":19,"environ":22,"equat":40,"error":33,"evalu":39,"exampl":[26,27,30,31,32,33,36,37,38,39,40,41],"except":1,"export":[25,38,41],"factori":[7,11],"fast":39,"featur":35,"filter":37,"first":[29,33],"fit":[30,38],"five":40,"fix":[7,23],"follow":31,"four":[26,29,31,33,40],"fourbar_symbol":39,"frame":41,"freudenstein":40,"front":37,"function":[30,39,40],"function_gener":18,"functionprofil":31,"general":18,"generat":[30,40],"geometri":[8,17],"get":[33,35],"get_constraint":32,"gif":41,"go":25,"graph":[3,9,34],"grashof":40,"grid":30,"grid_search":12,"ground":6,"group":[3,16,34],"guidelin":[24,38],"handl":33,"hierarch":34,"hierarchi":9,"hyperedg":34,"hypergraph":[9,34],"hypergraph_convers":3,"hypervolum":37,"ii":37,"iii":37,"illustr":39,"implement":32,"import":33,"includ":38,"indic":[28,37],"initi":30,"instal":[29,33,37],"interact":[36,41],"interfac":32,"introduct":[28,31],"invert":26,"isomorph":[19,34],"joint":[11,16,17,32,36,38],"kinemat":[21,36,41],"latex":41,"law":31,"length":[18,39],"linear":2,"link":[11,18,28,29,34,39],"linkag":[10,15,17,18,26,29,31,33,34,39,40,41],"loci":30,"matplotlib":[36,41],"mechan":[11,31,33,34],"mechanism_convers":[3,9],"method":39,"migrat":25,"minim":36,"mixed_vari":12,"mobil":34,"mobilityresult":25,"modul":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],"motion":[31,33,40],"motion_gener":18,"motion_law":5,"multi":[30,37],"multi_object":12,"multi_topolog":18,"multipl":41,"mutable_ag":13,"n_orientation_sampl":25,"name":[25,38],"next":[30,31,32,33,34,36,37,38,39,40,41],"nsga":37,"number":22,"numer":39,"object":[30,37,39],"oper":12,"optim":[12,13,17,29,30,31,36,37,38,39,40],"oscil":[31,32],"oscillating_cam":7,"output":[36,38,41],"overview":[18,30,34,36,38,39,40],"packag":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,28],"page":41,"paramet":30,"pareto":[13,37],"particl":30,"particle_swarm":12,"path":[30,36,40],"path_gener":[18,22],"peak":36,"penalti":38,"perform":[36,39],"perman":24,"perturb":38,"pitch":31,"pledg":24,"plot":[36,41],"plotly_viz":21,"point":40,"point_track":6,"pointarrayprofil":31,"popul":14,"pose":40,"posit":30,"pp":7,"practic":[32,38],"pre":39,"precis":40,"preserv":30,"pressur":31,"profil":[5,31,36],"progress":30,"project":29,"pso":[22,29,41],"pso_plot":21,"public":[25,36],"pylinkag":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,28,29],"qualiti":36,"queri":36,"quick":[18,28,29,35,39,40,41],"radius":31,"rank":18,"re":25,"read":39,"recommend":39,"refer":[35,38,41],"relat":29,"reload":32,"remov":23,"represent":34,"reproduc":[22,37],"requir":29,"respons":24,"result":[18,38,39,40],"right":41,"roller":31,"rrp":7,"rrr":7,"run":36,"s":[28,40],"sampl":38,"scipy_optim":12,"scope":24,"script":26,"search":30,"secant":8,"select":[37,38],"sensit":[10,38,39],"serial":[3,9,11,34],"set":36,"set_constraint":32,"setup":38,"shape":30,"show":41,"signatur":[3,34],"sim_convers":9,"simul":[15,16,33,36],"singl":37,"six_bar":18,"size":38,"slider":[32,41],"solut":[37,40],"solv":16,"solver":[16,17,22],"solver_convers":4,"specif":38,"spend":22,"stabil":29,"standard":24,"start":[18,29,33,35,39,40],"static":[21,41],"step":[30,31,32,33,34,36,37,38,39,40,41],"step_export":21,"strider":26,"stroke":26,"structuralanalysi":25,"style":41,"submodul":[1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,21],"subpackag":[1,12,19],"svg":[36,41],"swarm":30,"symbol":[17,21,29,39],"symbolicoptim":39,"symjoint":39,"synthesi":[18,22,40],"system":33,"tabl":28,"techniqu":30,"temporari":24,"ternari":34,"theori":[18,34,40],"three":[37,40],"throughput":22,"time":[22,40],"toler":[38,39],"topic":35,"topolog":[19,20,34],"topology_neighborhood":12,"topology_typ":18,"trade":37,"trajectori":39,"translat":31,"translating_cam":7,"transmiss":[10,37,38],"troubleshoot":[30,37],"tutori":[28,29,35],"type":[16,33],"typic":38,"understand":[32,33,37,38,39],"uniform":36,"unreleas":23,"usag":[37,38],"use":[29,32,34,37,38],"util":[12,18],"valu":39,"vector":36,"veloc":[16,36],"verifi":[39,40],"via":34,"visual":[21,29,30,33,36,37,38,41],"vs":[37,40],"warm_start":12,"warn":24,"web":41,"welcom":28,"whi":25,"work":[18,25,30,40],"workflow":[38,39,41]}}) \ No newline at end of file +Search.setIndex({"alltitles":{"1. Correction":[[24,"correction"]],"2. Warning":[[24,"warning"]],"2D Pareto Front":[[37,"d-pareto-front"]],"3. Temporary Ban":[[24,"temporary-ban"]],"4. Permanent Ban":[[24,"permanent-ban"]],"API Reference":[[38,"api-reference"]],"Added":[[23,"added"],[23,"id5"],[23,"id8"],[23,"id12"],[23,"id17"],[23,"id19"],[23,"id24"],[23,"id30"]],"Added in 0.0.1":[[23,"added-in-0-0-1"]],"Added in 0.2.0":[[23,"added-in-0-2-0"]],"Added in 0.2.1":[[23,"added-in-0-2-1"]],"Added in 0.2.2":[[23,"added-in-0-2-2"]],"Added in 0.3.0":[[23,"added-in-0-3-0"]],"Added in 0.4.0":[[23,"added-in-0-4-0"]],"Added in 0.4.1":[[23,"added-in-0-4-1"]],"Added in 0.5.0":[[23,"added-in-0-5-0"]],"Added in 0.5.1":[[23,"added-in-0-5-1"]],"Added in 0.5.2":[[23,"added-in-0-5-2"]],"Added in 0.5.3":[[23,"added-in-0-5-3"]],"Added in 0.6.0":[[23,"added-in-0-6-0"]],"Added in 0.7.0":[[23,"added-in-0-7-0"]],"Advanced Optimization Techniques":[[30,null]],"Advanced Topics":[[35,"advanced-topics"]],"Advanced Usage":[[37,"advanced-usage"]],"Advanced: Burmester Curve Analysis":[[40,"advanced-burmester-curve-analysis"]],"Algorithm Selection":[[37,"algorithm-selection"]],"Alternative: Links-First Builder":[[29,"alternative-links-first-builder"]],"Analysis Applications":[[34,"analysis-applications"]],"Analyzing Specific Output Joints":[[38,"analyzing-specific-output-joints"]],"Animated GIF Output":[[41,"animated-gif-output"]],"Animating a Solution":[[40,"animating-a-solution"]],"Animation with Slider":[[41,"animation-with-slider"]],"Architecture":[[29,"architecture"]],"Assur Group Theory":[[34,"assur-group-theory"]],"Assur Signatures":[[34,"assur-signatures"]],"AssurMechanism":[[34,"assurmechanism"]],"Async Optimization":[[30,"async-optimization"]],"Attaching Dimensions":[[34,"attaching-dimensions"]],"Attribution":[[24,"attribution"]],"Available Motion Laws":[[31,"available-motion-laws"]],"Basic Example":[[31,"basic-example"],[31,"id1"],[37,"basic-example"]],"Basic Fitness Function":[[30,"basic-fitness-function"]],"Basic Interactive Plot":[[41,"basic-interactive-plot"]],"Basic Path Generation":[[40,"basic-path-generation"]],"Basic SVG Output":[[41,"basic-svg-output"]],"Basic Setup":[[38,"basic-setup"]],"Basic Usage":[[38,"basic-usage"],[38,"id1"]],"Basic Visualization":[[41,"basic-visualization"]],"Benchmarks":[[22,null]],"Best Compromise":[[37,"best-compromise"]],"Best Practices":[[32,"best-practices"]],"Building Hierarchical Linkages":[[34,"building-hierarchical-linkages"]],"CAD Export":[[41,"cad-export"]],"CAD Export Workflow":[[41,"cad-export-workflow"]],"Cam Profiles":[[31,"cam-profiles"]],"Cam-Follower Mechanisms":[[31,null]],"Changed":[[23,"changed"],[23,"id9"],[23,"id13"],[23,"id20"],[23,"id27"],[23,"id32"]],"Changed in 0.2.0":[[23,"changed-in-0-2-0"]],"Changed in 0.2.1":[[23,"changed-in-0-2-1"]],"Changed in 0.3.0":[[23,"changed-in-0-3-0"]],"Changed in 0.4.0":[[23,"changed-in-0-4-0"]],"Changed in 0.4.1":[[23,"changed-in-0-4-1"]],"Changed in 0.5.0":[[23,"changed-in-0-5-0"]],"Changed in 0.5.1":[[23,"changed-in-0-5-1"]],"Changed in 0.5.2":[[23,"changed-in-0-5-2"]],"Changed in 0.5.3":[[23,"changed-in-0-5-3"]],"Changed in 0.6.0":[[23,"changed-in-0-6-0"]],"Changed in 0.7.0":[[23,"changed-in-0-7-0"]],"Changelog":[[23,null]],"Choosing the Right Backend":[[41,"choosing-the-right-backend"]],"Combined Path and Velocity Optimization":[[36,"combined-path-and-velocity-optimization"]],"Combining with Transmission Analysis":[[37,"combining-with-transmission-analysis"]],"Comparison: Single vs Multi-Objective":[[37,"comparison-single-vs-multi-objective"]],"Complete Example":[[33,"complete-example"]],"Complete Slider Implementation":[[32,"complete-slider-implementation"]],"Complete Workflow Example":[[39,"complete-workflow-example"]],"Component Types":[[33,"component-types"]],"Computing Sensitivity":[[39,"computing-sensitivity"]],"Computing Trajectories":[[39,"computing-trajectories"]],"Connecting to Downstream Linkages":[[31,"connecting-to-downstream-linkages"]],"Constraint Preservation":[[30,"constraint-preservation"]],"Contributing":[[29,"contributing"]],"Contributor Covenant Code of Conduct":[[24,null]],"Converting Back to Numeric":[[39,"converting-back-to-numeric"]],"Converting Graph to Mechanism":[[34,"converting-graph-to-mechanism"]],"Converting to a Mechanism":[[34,"converting-to-a-mechanism"]],"Core Concepts":[[33,"core-concepts"]],"Core Features":[[35,"core-features"]],"Creating Linkages from Dimensions":[[40,"creating-linkages-from-dimensions"]],"Creating Linkages from Link Lengths":[[18,"creating-linkages-from-link-lengths"]],"Creating Symbolic Linkages":[[39,"creating-symbolic-linkages"]],"Creating a Hypergraph Linkage":[[34,"creating-a-hypergraph-linkage"]],"Currently deprecated":[[25,"currently-deprecated"]],"Custom Components":[[32,null]],"Customizing DXF Output":[[41,"customizing-dxf-output"]],"Customizing Plotly Appearance":[[41,"customizing-plotly-appearance"]],"Customizing STEP Dimensions":[[41,"customizing-step-dimensions"]],"Customizing SVG Style":[[41,"customizing-svg-style"]],"DXF Export (2D CAD)":[[41,"dxf-export-2d-cad"]],"Decomposing a Linkage":[[34,"decomposing-a-linkage"]],"Define and Visualize a Four-Bar Linkage":[[29,"define-and-visualize-a-four-bar-linkage"]],"Defining a Fitness Function":[[30,"defining-a-fitness-function"]],"Deprecated":[[23,"deprecated"],[23,"id26"]],"Deprecated in 0.5.3":[[23,"deprecated-in-0-5-3"]],"Deprecated in 0.6.0":[[23,"deprecated-in-0-6-0"]],"Deprecated in 0.7.0":[[23,"deprecated-in-0-7-0"]],"Deprecations":[[25,null]],"Embedding in Web Pages":[[41,"embedding-in-web-pages"]],"Enforcement":[[24,"enforcement"]],"Enforcement Guidelines":[[24,"enforcement-guidelines"]],"Enforcement Responsibilities":[[24,"enforcement-responsibilities"]],"Environment":[[22,"environment"]],"Example Complete Workflow":[[38,"example-complete-workflow"]],"Example Objective Functions":[[39,"example-objective-functions"]],"Example Scripts":[[26,null]],"Example: Cam-Driven Four-Bar":[[31,"example-cam-driven-four-bar"]],"Example: Complete Visualization Workflow":[[41,"example-complete-visualization-workflow"]],"Example: Minimize Peak Velocity":[[36,"example-minimize-peak-velocity"]],"Example: Optimizing for Path Shape":[[30,"example-optimizing-for-path-shape"]],"Example: Oscillating Joint":[[32,"example-oscillating-joint"]],"Example: Slider Joint":[[32,"example-slider-joint"]],"Example: Three Precision Points":[[40,"example-three-precision-points"]],"Example: Uniform Velocity Profile":[[36,"example-uniform-velocity-profile"]],"Example: Velocity Direction Constraint":[[36,"example-velocity-direction-constraint"]],"Exporting Multiple Frames":[[41,"exporting-multiple-frames"]],"Exporting to DataFrame":[[38,"exporting-to-dataframe"]],"Fast Pre-Compiled Functions":[[39,"fast-pre-compiled-functions"]],"Filtering Solutions":[[37,"filtering-solutions"]],"Fixed":[[23,"fixed"],[23,"id3"],[23,"id6"],[23,"id10"],[23,"id14"],[23,"id16"],[23,"id22"],[23,"id25"],[23,"id31"]],"Fixed in 0.2.1":[[23,"fixed-in-0-2-1"]],"Fixed in 0.2.2":[[23,"fixed-in-0-2-2"]],"Fixed in 0.3.0":[[23,"fixed-in-0-3-0"]],"Fixed in 0.4.0":[[23,"fixed-in-0-4-0"]],"Fixed in 0.5.0":[[23,"fixed-in-0-5-0"]],"Fixed in 0.5.3":[[23,"fixed-in-0-5-3"]],"Fixed in 0.6.0":[[23,"fixed-in-0-6-0"]],"Fixed in 0.7.0":[[23,"fixed-in-0-7-0"]],"Four-Pose and Five-Pose Synthesis":[[40,"four-pose-and-five-pose-synthesis"]],"Four-bar Linkage":[[26,"four-bar-linkage"]],"Function Generation":[[40,"function-generation"]],"FunctionProfile":[[31,"functionprofile"]],"Generating Bounds":[[30,"generating-bounds"]],"Getting Started":[[33,null],[35,"getting-started"]],"Graph-Based Linkage Representation":[[34,null]],"Grashof Analysis":[[40,"grashof-analysis"]],"Grid Search Optimization":[[30,"grid-search-optimization"]],"Handling Errors":[[33,"handling-errors"]],"How deprecation works here":[[25,"how-deprecation-works-here"]],"Hypergraph Representation":[[34,"hypergraph-representation"]],"Hypervolume Indicator":[[37,"hypervolume-indicator"]],"Illustrated Example: Effect of Link Lengths":[[39,"illustrated-example-effect-of-link-lengths"]],"Including Transmission Angle":[[38,"including-transmission-angle"]],"Indices and tables":[[28,"indices-and-tables"]],"Installation":[[29,"installation"],[33,"installation"],[37,"installation"]],"Introduction":[[28,null],[31,"introduction"]],"Inverted Stroke Engine":[[26,"inverted-stroke-engine"]],"Isomorphism Detection":[[34,"isomorphism-detection"]],"Kinematics-Based Optimization":[[36,null]],"Linkage Synthesis":[[40,null]],"Matplotlib Backend":[[41,"matplotlib-backend"]],"Matplotlib Visualization":[[36,"matplotlib-visualization"]],"Method 1: fourbar_symbolic (Recommended)":[[39,"method-1-fourbar-symbolic-recommended"]],"Method 2: Building from SymJoint Classes":[[39,"method-2-building-from-symjoint-classes"]],"Migrating":[[25,"migrating"]],"Mobility Analysis":[[34,"mobility-analysis"]],"Module contents":[[1,"module-contents"],[2,"module-contents"],[3,"module-contents"],[4,"module-contents"],[5,"module-contents"],[6,"module-contents"],[7,"module-contents"],[8,"module-contents"],[9,"module-contents"],[10,"module-contents"],[11,"module-contents"],[12,"module-contents"],[13,"module-contents"],[14,"module-contents"],[15,"module-contents"],[16,"module-contents"],[17,"module-contents"],[18,"module-contents"],[19,"module-contents"],[20,"module-contents"],[21,"module-contents"]],"Motion Generation":[[40,"motion-generation"]],"Motion Laws":[[31,"motion-laws"]],"Multi-Objective Optimization":[[30,"multi-objective-optimization"],[37,null]],"NSGA-II (Default)":[[37,"nsga-ii-default"]],"NSGA-III":[[37,"nsga-iii"]],"Next Steps":[[30,"next-steps"],[31,"next-steps"],[32,"next-steps"],[33,"next-steps"],[34,"next-steps"],[36,"next-steps"],[37,"next-steps"],[38,"next-steps"],[39,"next-steps"],[40,"next-steps"],[41,"next-steps"]],"Numeric Evaluation":[[39,"numeric-evaluation"]],"Optimization":[[31,"optimization"]],"Optimize with PSO":[[29,"optimize-with-pso"]],"Optimizing Initial Positions":[[30,"optimizing-initial-positions"]],"Optimizing for Velocity Characteristics":[[36,"optimizing-for-velocity-characteristics"]],"Oscillating Cam Follower":[[31,"oscillating-cam-follower"]],"Our Pledge":[[24,"our-pledge"]],"Our Standards":[[24,"our-standards"]],"Overview":[[34,"overview"],[34,"id1"],[36,"overview"],[38,"overview"],[39,"overview"],[40,"overview"]],"Overview of Optimization":[[30,"overview-of-optimization"]],"PSO Visualization":[[41,"pso-visualization"]],"PSO throughput":[[22,"pso-throughput"]],"Packages":[[28,null]],"Pareto Dominance":[[37,"pareto-dominance"]],"Particle Swarm Optimization Parameters":[[30,"particle-swarm-optimization-parameters"]],"Path Generation":[[40,"path-generation"]],"Path Generation with Timing":[[40,"path-generation-with-timing"]],"Performance Characteristics":[[39,"id5"]],"Performance Comparison":[[39,"performance-comparison"]],"Performance Considerations":[[36,"performance-considerations"]],"Perturbation Size":[[38,"perturbation-size"]],"Pitch Radius":[[31,"pitch-radius"]],"Plotly Backend":[[41,"plotly-backend"]],"Plotly Interactive Visualization":[[36,"plotly-interactive-visualization"]],"PointArrayProfile":[[31,"pointarrayprofile"]],"Practical Guidelines":[[38,"practical-guidelines"]],"Pressure Angle":[[31,"pressure-angle"]],"Profile Analysis":[[31,"profile-analysis"]],"Pylinkage":[[29,null]],"Querying Joint Velocities":[[36,"querying-joint-velocities"]],"Quick Links":[[28,null]],"Quick Reference":[[35,"quick-reference"],[41,"quick-reference"]],"Quick Start":[[18,"quick-start"],[29,"quick-start"],[39,"quick-start"]],"Quick Start: Path Generation":[[40,"quick-start-path-generation"]],"Reading Back Numeric Values":[[39,"reading-back-numeric-values"]],"Related Projects":[[29,"related-projects"]],"Removed":[[23,"removed"],[23,"id21"],[23,"id28"]],"Removed in 0.4.0":[[23,"removed-in-0-4-0"]],"Removed in 0.6.0":[[23,"removed-in-0-6-0"]],"Removed in 0.7.0":[[23,"removed-in-0-7-0"]],"Reproducibility":[[37,"reproducibility"]],"Reproducing these numbers":[[22,"reproducing-these-numbers"]],"Requirements":[[29,"requirements"]],"Roller Follower":[[31,"roller-follower"]],"Running Kinematics Simulation":[[36,"running-kinematics-simulation"]],"STEP Export (3D CAD)":[[41,"step-export-3d-cad"]],"SVG Publication-Quality Output":[[36,"svg-publication-quality-output"]],"SVG for LaTeX":[[41,"svg-for-latex"]],"Sample Count":[[38,"sample-count"]],"Scope":[[24,"scope"]],"Selecting a Solution":[[37,"selecting-a-solution"]],"Selective Tolerance Analysis":[[38,"selective-tolerance-analysis"]],"Sensitivity & Tolerance Analysis":[[38,null]],"Sensitivity Analysis":[[38,"sensitivity-analysis"],[39,"sensitivity-analysis"]],"Sensitivity as Fitness Penalty":[[38,"sensitivity-as-fitness-penalty"]],"Serializing Linkage Graphs":[[34,"serializing-linkage-graphs"]],"Setting Up Angular Velocity":[[36,"setting-up-angular-velocity"]],"Showing Multiple Linkages":[[41,"showing-multiple-linkages"]],"Solver":[[22,"solver"]],"Stability":[[29,"stability"]],"Static Frame Visualization":[[41,"static-frame-visualization"]],"Step 1: Define the Class":[[32,"step-1-define-the-class"]],"Step 1: Import the building blocks":[[33,"step-1-import-the-building-blocks"]],"Step 2: Define the components":[[33,"step-2-define-the-components"]],"Step 2: Implement get_constraints":[[32,"step-2-implement-get-constraints"]],"Step 3: Create the linkage":[[33,"step-3-create-the-linkage"]],"Step 3: Implement set_constraints":[[32,"step-3-implement-set-constraints"]],"Step 4: Implement reload":[[32,"step-4-implement-reload"]],"Step 4: Simulate the motion":[[33,"step-4-simulate-the-motion"]],"Step 5: Visualize the linkage":[[33,"step-5-visualize-the-linkage"]],"Strider":[[26,"strider"]],"Submodules":[[1,"submodules"],[2,"submodules"],[3,"submodules"],[4,"submodules"],[5,"submodules"],[6,"submodules"],[7,"submodules"],[8,"submodules"],[9,"submodules"],[10,"submodules"],[11,"submodules"],[12,"submodules"],[13,"submodules"],[15,"submodules"],[16,"submodules"],[17,"submodules"],[18,"submodules"],[19,"submodules"],[21,"submodules"]],"Subpackages":[[1,"subpackages"],[12,"subpackages"],[19,"subpackages"]],"Symbolic Analysis":[[29,"symbolic-analysis"]],"Symbolic Components":[[39,"id2"]],"Symbolic Computation":[[39,null]],"Symbolic Optimization":[[39,"symbolic-optimization"]],"Synthesis":[[22,"synthesis"]],"Synthesis Theory Overview":[[18,"synthesis-theory-overview"]],"Synthesis vs Optimization":[[40,"synthesis-vs-optimization"]],"Ternary Links via Hyperedge":[[34,"ternary-links-via-hyperedge"]],"The Topology Catalog":[[34,"the-topology-catalog"]],"Theory":[[40,"theory"]],"Theory: Burmester Curves":[[40,"theory-burmester-curves"]],"Theory: Freudenstein\u2019s Equation":[[40,"theory-freudenstein-s-equation"]],"Three-Objective Example":[[37,"three-objective-example"]],"Three-Pose Synthesis":[[40,"three-pose-synthesis"]],"Tolerance Analysis":[[38,"tolerance-analysis"]],"Tolerance Analysis Example":[[39,"tolerance-analysis-example"]],"Tolerance-Based Constraints":[[38,"tolerance-based-constraints"]],"Translating Cam Follower":[[31,"translating-cam-follower"]],"Troubleshooting":[[30,"troubleshooting"],[37,"troubleshooting"]],"Tutorials":[[28,null],[29,"tutorials"],[35,null]],"Typical Workflow":[[38,"typical-workflow"]],"Understanding Constraint Names":[[38,"understanding-constraint-names"]],"Understanding SymbolicOptimizer":[[39,"understanding-symbolicoptimizer"]],"Understanding the Component Interface":[[32,"understanding-the-component-interface"]],"Understanding the Constraint System":[[33,"understanding-the-constraint-system"]],"Understanding the Pareto Front":[[37,"understanding-the-pareto-front"]],"Understanding the Results":[[38,"understanding-the-results"]],"Use in Optimization":[[38,"use-in-optimization"]],"Using the Custom Component":[[32,"using-the-custom-component"]],"Verifying Function Generation":[[40,"verifying-function-generation"]],"Verifying Results":[[39,"verifying-results"]],"Visualization Backends":[[41,null]],"Visualization with Kinematics":[[41,"visualization-with-kinematics"]],"Visualizing Optimization Progress":[[30,"visualizing-optimization-progress"]],"Visualizing Trade-Offs":[[37,"visualizing-trade-offs"]],"Visualizing Velocity Vectors":[[36,"visualizing-velocity-vectors"]],"Visualizing the Tolerance Cloud":[[38,"visualizing-the-tolerance-cloud"]],"Welcome to pylinkage\u2019s documentation!":[[28,null]],"What Else Can It Do?":[[29,"what-else-can-it-do"]],"What is not benchmarked here":[[22,"what-is-not-benchmarked-here"]],"What is public":[[25,"what-is-public"]],"When to Use Graph Representations":[[34,"when-to-use-graph-representations"]],"When to Use Multi-Objective Optimization":[[37,"when-to-use-multi-objective-optimization"]],"Where path_generation() spends its time":[[22,"where-path-generation-spends-its-time"]],"Which API should I use?":[[29,"which-api-should-i-use"]],"Why MobilityResult and StructuralAnalysis are going away":[[25,"why-mobilityresult-and-structuralanalysis-are-going-away"]],"Why n_orientation_samples is going away":[[25,"why-n-orientation-samples-is-going-away"]],"Why the Dyad names are going away":[[25,"why-the-dyad-names-are-going-away"]],"Why the dyads re-exports are going away":[[25,"why-the-dyads-re-exports-are-going-away"]],"Working with Loci Data":[[30,"working-with-loci-data"]],"Working with Results":[[18,"working-with-results"]],"Working with Synthesis Results":[[40,"working-with-synthesis-results"]],"Your First Linkage: Four-Bar Mechanism":[[33,"your-first-linkage-four-bar-mechanism"]],"[0.0.1] - 2021-06-12":[[23,"id45"]],"[0.2.0] - 2021-06-14":[[23,"id44"]],"[0.2.1] - 2021-06-16":[[23,"id43"]],"[0.2.2] - 2021-06-22":[[23,"id42"]],"[0.3.0] - 2021-07-05":[[23,"id41"]],"[0.4.0] - 2021-07-06":[[23,"id40"]],"[0.4.1] - 2021-07-11":[[23,"id39"]],"[0.5.0] - 2021-07-12":[[23,"id38"]],"[0.5.1] - 2021-07-14":[[23,"id37"]],"[0.5.2] - 2021-07-21":[[23,"id36"]],"[0.5.3] - 2023-06-23":[[23,"id35"]],"[0.6.0] - 2024-10-02":[[23,"id34"]],"[0.7.0] - 2025-12-13":[[23,"id33"]],"[0.8.0] - 2026-03-28":[[23,"id29"]],"[0.9.0] - 2026-04-14":[[23,"id23"]],"[1.0.0] - 2026-07-05":[[23,"id18"]],"[1.1.0] - 2026-08-12":[[23,"id15"]],"[1.1.1] - 2026-09-04":[[23,"id11"]],"[1.2.0] - 2026-09-12":[[23,"id7"]],"[1.2.1] - 2026-09-12":[[23,"id4"]],"[1.2.2] - 2026-09-18":[[23,"id2"]],"[1.3.0] - 2026-10-25":[[23,"id1"]],"[Unreleased]":[[23,"unreleased"]],"drawsvg Backend":[[41,"drawsvg-backend"]],"examples":[[27,null]],"pylinkage":[[0,null]],"pylinkage package":[[1,null]],"pylinkage.actuators package":[[2,null]],"pylinkage.actuators.arc_crank module":[[2,"module-pylinkage.actuators.arc_crank"]],"pylinkage.actuators.crank module":[[2,"module-pylinkage.actuators.crank"]],"pylinkage.actuators.linear module":[[2,"module-pylinkage.actuators.linear"]],"pylinkage.assur package":[[3,null]],"pylinkage.assur.analysis module":[[3,"module-pylinkage.assur.analysis"]],"pylinkage.assur.assur_mechanism module":[[3,"module-pylinkage.assur.assur_mechanism"]],"pylinkage.assur.decomposition module":[[3,"module-pylinkage.assur.decomposition"]],"pylinkage.assur.graph module":[[3,"module-pylinkage.assur.graph"]],"pylinkage.assur.groups module":[[3,"module-pylinkage.assur.groups"]],"pylinkage.assur.hypergraph_conversion module":[[3,"module-pylinkage.assur.hypergraph_conversion"]],"pylinkage.assur.mechanism_conversion module":[[3,"module-pylinkage.assur.mechanism_conversion"]],"pylinkage.assur.serialization module":[[3,"module-pylinkage.assur.serialization"]],"pylinkage.assur.signature module":[[3,"module-pylinkage.assur.signature"]],"pylinkage.bridge package":[[4,null]],"pylinkage.bridge.solver_conversion module":[[4,"module-pylinkage.bridge.solver_conversion"]],"pylinkage.cam package":[[5,null]],"pylinkage.cam.motion_laws module":[[5,"module-pylinkage.cam.motion_laws"]],"pylinkage.cam.profiles module":[[5,"module-pylinkage.cam.profiles"]],"pylinkage.components package":[[6,null]],"pylinkage.components.ground module":[[6,"module-pylinkage.components.ground"]],"pylinkage.components.point_tracker module":[[6,"module-pylinkage.components.point_tracker"]],"pylinkage.dimensions module":[[1,"module-pylinkage.dimensions"]],"pylinkage.dyads package":[[7,null]],"pylinkage.dyads.factory module":[[7,"module-pylinkage.dyads.factory"]],"pylinkage.dyads.fixed module":[[7,"module-pylinkage.dyads.fixed"]],"pylinkage.dyads.oscillating_cam module":[[7,"module-pylinkage.dyads.oscillating_cam"]],"pylinkage.dyads.pp module":[[7,"module-pylinkage.dyads.pp"]],"pylinkage.dyads.rrp module":[[7,"module-pylinkage.dyads.rrp"]],"pylinkage.dyads.rrr module":[[7,"module-pylinkage.dyads.rrr"]],"pylinkage.dyads.translating_cam module":[[7,"module-pylinkage.dyads.translating_cam"]],"pylinkage.exceptions module":[[1,"module-pylinkage.exceptions"]],"pylinkage.geometry package":[[8,null]],"pylinkage.geometry.core module":[[8,"module-pylinkage.geometry.core"]],"pylinkage.geometry.secants module":[[8,"module-pylinkage.geometry.secants"]],"pylinkage.hypergraph package":[[9,null]],"pylinkage.hypergraph.core module":[[9,"module-pylinkage.hypergraph.core"]],"pylinkage.hypergraph.graph module":[[9,"module-pylinkage.hypergraph.graph"]],"pylinkage.hypergraph.hierarchy module":[[9,"module-pylinkage.hypergraph.hierarchy"]],"pylinkage.hypergraph.mechanism_conversion module":[[9,"module-pylinkage.hypergraph.mechanism_conversion"]],"pylinkage.hypergraph.serialization module":[[9,"module-pylinkage.hypergraph.serialization"]],"pylinkage.hypergraph.sim_conversion module":[[9,"module-pylinkage.hypergraph.sim_conversion"]],"pylinkage.linkage package":[[10,null]],"pylinkage.linkage.analysis module":[[10,"module-pylinkage.linkage.analysis"]],"pylinkage.linkage.sensitivity module":[[10,"module-pylinkage.linkage.sensitivity"]],"pylinkage.linkage.transmission module":[[10,"module-pylinkage.linkage.transmission"]],"pylinkage.mechanism package":[[11,null]],"pylinkage.mechanism.builder module":[[11,"module-pylinkage.mechanism.builder"]],"pylinkage.mechanism.factories module":[[11,"module-pylinkage.mechanism.factories"]],"pylinkage.mechanism.joint module":[[11,"module-pylinkage.mechanism.joint"]],"pylinkage.mechanism.link module":[[11,"module-pylinkage.mechanism.link"]],"pylinkage.mechanism.mechanism module":[[11,"module-pylinkage.mechanism.mechanism"]],"pylinkage.mechanism.serialization module":[[11,"module-pylinkage.mechanism.serialization"]],"pylinkage.optimization package":[[12,null]],"pylinkage.optimization.async_optimization module":[[12,"module-pylinkage.optimization.async_optimization"]],"pylinkage.optimization.co_optimization_types module":[[12,"module-pylinkage.optimization.co_optimization_types"]],"pylinkage.optimization.collections package":[[13,null]],"pylinkage.optimization.collections.agent module":[[13,"module-pylinkage.optimization.collections.agent"]],"pylinkage.optimization.collections.mutable_agent module":[[13,"module-pylinkage.optimization.collections.mutable_agent"]],"pylinkage.optimization.collections.pareto module":[[13,"module-pylinkage.optimization.collections.pareto"]],"pylinkage.optimization.grid_search module":[[12,"module-pylinkage.optimization.grid_search"]],"pylinkage.optimization.mixed_variable module":[[12,"module-pylinkage.optimization.mixed_variable"]],"pylinkage.optimization.multi_objective module":[[12,"module-pylinkage.optimization.multi_objective"]],"pylinkage.optimization.operators module":[[12,"module-pylinkage.optimization.operators"]],"pylinkage.optimization.particle_swarm module":[[12,"module-pylinkage.optimization.particle_swarm"]],"pylinkage.optimization.scipy_optimize module":[[12,"module-pylinkage.optimization.scipy_optimize"]],"pylinkage.optimization.topology_neighborhood module":[[12,"module-pylinkage.optimization.topology_neighborhood"]],"pylinkage.optimization.utils module":[[12,"module-pylinkage.optimization.utils"]],"pylinkage.optimization.warm_start module":[[12,"module-pylinkage.optimization.warm_start"]],"pylinkage.population package":[[14,null]],"pylinkage.simulation package":[[15,null]],"pylinkage.simulation.linkage module":[[15,"module-pylinkage.simulation.linkage"]],"pylinkage.solver package":[[16,null]],"pylinkage.solver.acceleration module":[[16,"module-pylinkage.solver.acceleration"]],"pylinkage.solver.groups module":[[16,"module-pylinkage.solver.groups"]],"pylinkage.solver.joints module":[[16,"module-pylinkage.solver.joints"]],"pylinkage.solver.simulation module":[[16,"module-pylinkage.solver.simulation"]],"pylinkage.solver.solve module":[[16,"module-pylinkage.solver.solve"]],"pylinkage.solver.types module":[[16,"module-pylinkage.solver.types"]],"pylinkage.solver.velocity module":[[16,"module-pylinkage.solver.velocity"]],"pylinkage.symbolic package":[[17,null]],"pylinkage.symbolic.conversion module":[[17,"module-pylinkage.symbolic.conversion"]],"pylinkage.symbolic.geometry module":[[17,"module-pylinkage.symbolic.geometry"]],"pylinkage.symbolic.joints module":[[17,"module-pylinkage.symbolic.joints"]],"pylinkage.symbolic.linkage module":[[17,"module-pylinkage.symbolic.linkage"]],"pylinkage.symbolic.optimization module":[[17,"module-pylinkage.symbolic.optimization"]],"pylinkage.symbolic.solver module":[[17,"module-pylinkage.symbolic.solver"]],"pylinkage.synthesis package":[[18,null]],"pylinkage.synthesis.burmester module":[[18,"module-pylinkage.synthesis.burmester"]],"pylinkage.synthesis.conversion module":[[18,"module-pylinkage.synthesis.conversion"]],"pylinkage.synthesis.core module":[[18,"module-pylinkage.synthesis.core"]],"pylinkage.synthesis.function_generation module":[[18,"module-pylinkage.synthesis.function_generation"]],"pylinkage.synthesis.generalized module":[[18,"module-pylinkage.synthesis.generalized"]],"pylinkage.synthesis.motion_generation module":[[18,"module-pylinkage.synthesis.motion_generation"]],"pylinkage.synthesis.multi_topology module":[[18,"module-pylinkage.synthesis.multi_topology"]],"pylinkage.synthesis.path_generation module":[[18,"module-pylinkage.synthesis.path_generation"]],"pylinkage.synthesis.ranking module":[[18,"module-pylinkage.synthesis.ranking"]],"pylinkage.synthesis.six_bar module":[[18,"module-pylinkage.synthesis.six_bar"]],"pylinkage.synthesis.topology_types module":[[18,"module-pylinkage.synthesis.topology_types"]],"pylinkage.synthesis.utils module":[[18,"module-pylinkage.synthesis.utils"]],"pylinkage.topology package":[[19,null]],"pylinkage.topology.analysis module":[[19,"module-pylinkage.topology.analysis"]],"pylinkage.topology.catalog module":[[19,"module-pylinkage.topology.catalog"]],"pylinkage.topology.data package":[[20,null]],"pylinkage.topology.enumeration module":[[19,"module-pylinkage.topology.enumeration"]],"pylinkage.topology.isomorphism module":[[19,"module-pylinkage.topology.isomorphism"]],"pylinkage.visualizer package":[[21,null]],"pylinkage.visualizer.animated module":[[21,"module-pylinkage.visualizer.animated"]],"pylinkage.visualizer.core module":[[21,"module-pylinkage.visualizer.core"]],"pylinkage.visualizer.drawsvg_viz module":[[21,"module-pylinkage.visualizer.drawsvg_viz"]],"pylinkage.visualizer.dxf_export module":[[21,"module-pylinkage.visualizer.dxf_export"]],"pylinkage.visualizer.kinematics module":[[21,"module-pylinkage.visualizer.kinematics"]],"pylinkage.visualizer.plotly_viz module":[[21,"module-pylinkage.visualizer.plotly_viz"]],"pylinkage.visualizer.pso_plots module":[[21,"module-pylinkage.visualizer.pso_plots"]],"pylinkage.visualizer.static module":[[21,"module-pylinkage.visualizer.static"]],"pylinkage.visualizer.step_export module":[[21,"module-pylinkage.visualizer.step_export"]],"pylinkage.visualizer.symbols module":[[21,"module-pylinkage.visualizer.symbols"]]},"docnames":["api/modules","api/pylinkage","api/pylinkage.actuators","api/pylinkage.assur","api/pylinkage.bridge","api/pylinkage.cam","api/pylinkage.components","api/pylinkage.dyads","api/pylinkage.geometry","api/pylinkage.hypergraph","api/pylinkage.linkage","api/pylinkage.mechanism","api/pylinkage.optimization","api/pylinkage.optimization.collections","api/pylinkage.population","api/pylinkage.simulation","api/pylinkage.solver","api/pylinkage.symbolic","api/pylinkage.synthesis","api/pylinkage.topology","api/pylinkage.topology.data","api/pylinkage.visualizer","benchmarks","changeloglink","code_of_conductlink","deprecations","examples/examples","examples/modules","index","readmelink","tutorials/advanced_optimization","tutorials/cam_follower","tutorials/custom_joints","tutorials/getting_started","tutorials/graph_representation","tutorials/index","tutorials/kinematics_optimization","tutorials/multi_objective","tutorials/sensitivity_analysis","tutorials/symbolic","tutorials/synthesis","tutorials/visualization"],"envversion":{"sphinx":66,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2},"filenames":["api/modules.rst","api/pylinkage.rst","api/pylinkage.actuators.rst","api/pylinkage.assur.rst","api/pylinkage.bridge.rst","api/pylinkage.cam.rst","api/pylinkage.components.rst","api/pylinkage.dyads.rst","api/pylinkage.geometry.rst","api/pylinkage.hypergraph.rst","api/pylinkage.linkage.rst","api/pylinkage.mechanism.rst","api/pylinkage.optimization.rst","api/pylinkage.optimization.collections.rst","api/pylinkage.population.rst","api/pylinkage.simulation.rst","api/pylinkage.solver.rst","api/pylinkage.symbolic.rst","api/pylinkage.synthesis.rst","api/pylinkage.topology.rst","api/pylinkage.topology.data.rst","api/pylinkage.visualizer.rst","benchmarks.md","changeloglink.rst","code_of_conductlink.rst","deprecations.md","examples/examples.rst","examples/modules.rst","index.rst","readmelink.rst","tutorials/advanced_optimization.rst","tutorials/cam_follower.rst","tutorials/custom_joints.rst","tutorials/getting_started.rst","tutorials/graph_representation.rst","tutorials/index.rst","tutorials/kinematics_optimization.rst","tutorials/multi_objective.rst","tutorials/sensitivity_analysis.rst","tutorials/symbolic.rst","tutorials/synthesis.rst","tutorials/visualization.rst"],"indexentries":{"acceleration (pylinkage.mechanism.joint.joint attribute)":[[11,"pylinkage.mechanism.joint.Joint.acceleration",false]],"acceleration() (pylinkage.cam.motion_laws.cycloidalmotionlaw method)":[[5,"pylinkage.cam.motion_laws.CycloidalMotionLaw.acceleration",false]],"acceleration() (pylinkage.cam.motion_laws.harmonicmotionlaw method)":[[5,"pylinkage.cam.motion_laws.HarmonicMotionLaw.acceleration",false]],"acceleration() (pylinkage.cam.motion_laws.modifiedtrapezoidalmotionlaw method)":[[5,"pylinkage.cam.motion_laws.ModifiedTrapezoidalMotionLaw.acceleration",false]],"acceleration() (pylinkage.cam.motion_laws.motionlaw method)":[[5,"pylinkage.cam.motion_laws.MotionLaw.acceleration",false]],"acceleration() (pylinkage.cam.motion_laws.polynomialmotionlaw method)":[[5,"pylinkage.cam.motion_laws.PolynomialMotionLaw.acceleration",false]],"accelerations (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.accelerations",false]],"acceptable_range (pylinkage.linkage.transmission.transmissionangleanalysis property)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.acceptable_range",false]],"add_arc_driver_link() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_arc_driver_link",false]],"add_connection() (pylinkage.hypergraph.hierarchy.hierarchicallinkage method)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage.add_connection",false]],"add_driver_link() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_driver_link",false]],"add_edge() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.add_edge",false]],"add_edge() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.add_edge",false]],"add_ground_link() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_ground_link",false]],"add_hyperedge() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.add_hyperedge",false]],"add_instance() (pylinkage.hypergraph.hierarchy.hierarchicallinkage method)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage.add_instance",false]],"add_link() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_link",false]],"add_node() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.add_node",false]],"add_node() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.add_node",false]],"add_point_tracker() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_point_tracker",false]],"add_quaternary_link() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_quaternary_link",false]],"add_slide_axis() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_slide_axis",false]],"add_ternary_link() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.add_ternary_link",false]],"agent (class in pylinkage.optimization.collections.agent)":[[13,"pylinkage.optimization.collections.agent.Agent",false]],"algorithm (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.algorithm",false]],"all_graphs() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.all_graphs",false]],"all_neighbors() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.all_neighbors",false]],"all_nodes_in_order() (pylinkage.assur.decomposition.decompositionresult method)":[[3,"pylinkage.assur.decomposition.DecompositionResult.all_nodes_in_order",false]],"alpha_values (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.alpha_values",false]],"amplitude (pylinkage.linkage.transmission.strokeanalysis property)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.amplitude",false]],"analyze() (pylinkage.assur.assur_mechanism.assurmechanism method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.analyze",false]],"analyze_sensitivity() (in module pylinkage.linkage.sensitivity)":[[10,"pylinkage.linkage.sensitivity.analyze_sensitivity",false]],"analyze_sensitivity() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.analyze_sensitivity",false]],"analyze_sensitivity() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.analyze_sensitivity",false]],"analyze_stroke() (in module pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.analyze_stroke",false]],"analyze_stroke() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.analyze_stroke",false]],"analyze_stroke() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.analyze_stroke",false]],"analyze_tolerance() (in module pylinkage.linkage.sensitivity)":[[10,"pylinkage.linkage.sensitivity.analyze_tolerance",false]],"analyze_tolerance() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.analyze_tolerance",false]],"analyze_tolerance() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.analyze_tolerance",false]],"analyze_transmission() (in module pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.analyze_transmission",false]],"analyze_transmission() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.analyze_transmission",false]],"analyze_transmission() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.analyze_transmission",false]],"anchor (pylinkage.actuators.arc_crank.arccrank attribute)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.anchor",false]],"anchor (pylinkage.actuators.crank.crank attribute)":[[2,"pylinkage.actuators.crank.Crank.anchor",false]],"anchor (pylinkage.actuators.linear.linearactuator attribute)":[[2,"pylinkage.actuators.linear.LinearActuator.anchor",false]],"anchor1 (pylinkage.components.point_tracker.pointtracker attribute)":[[6,"pylinkage.components.point_tracker.PointTracker.anchor1",false]],"anchor2 (pylinkage.components.point_tracker.pointtracker attribute)":[[6,"pylinkage.components.point_tracker.PointTracker.anchor2",false]],"anchor_nodes (pylinkage.assur.groups.assurgroup attribute)":[[3,"pylinkage.assur.groups.AssurGroup.anchor_nodes",false]],"anchors (pylinkage.actuators.arc_crank.arccrank property)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.anchors",false]],"anchors (pylinkage.actuators.crank.crank property)":[[2,"pylinkage.actuators.crank.Crank.anchors",false]],"anchors (pylinkage.actuators.linear.linearactuator property)":[[2,"pylinkage.actuators.linear.LinearActuator.anchors",false]],"anchors (pylinkage.components.point_tracker.pointtracker property)":[[6,"pylinkage.components.point_tracker.PointTracker.anchors",false]],"anchors (pylinkage.dyads.oscillating_cam.oscillatingcamfollower property)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.anchors",false]],"anchors (pylinkage.dyads.pp.ppdyad property)":[[7,"pylinkage.dyads.pp.PPDyad.anchors",false]],"anchors (pylinkage.dyads.rrp.rrpdyad property)":[[7,"pylinkage.dyads.rrp.RRPDyad.anchors",false]],"anchors (pylinkage.dyads.translating_cam.translatingcamfollower property)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.anchors",false]],"angle (pylinkage.actuators.arc_crank.arccrank property)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.angle",false]],"angle (pylinkage.actuators.linear.linearactuator attribute)":[[2,"pylinkage.actuators.linear.LinearActuator.angle",false]],"angle (pylinkage.components.point_tracker.pointtracker attribute)":[[6,"pylinkage.components.point_tracker.PointTracker.angle",false]],"angle (pylinkage.dyads.fixed.fixeddyad attribute)":[[7,"pylinkage.dyads.fixed.FixedDyad.angle",false]],"angle (pylinkage.mechanism.builder.pendingtracker attribute)":[[11,"pylinkage.mechanism.builder.PendingTracker.angle",false]],"angle (pylinkage.mechanism.joint.trackerjoint attribute)":[[11,"pylinkage.mechanism.joint.TrackerJoint.angle",false]],"angle_between_points() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.angle_between_points",false]],"angle_pairs (pylinkage.synthesis.core.synthesisproblem attribute)":[[18,"pylinkage.synthesis.core.SynthesisProblem.angle_pairs",false]],"angles (pylinkage.cam.profiles.pointarrayprofile property)":[[5,"pylinkage.cam.profiles.PointArrayProfile.angles",false]],"angles (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.angles",false]],"angular_displacement (pylinkage.dyads.oscillating_cam.oscillatingcamfollower property)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.angular_displacement",false]],"angular_velocity (pylinkage.actuators.arc_crank.arccrank attribute)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.angular_velocity",false]],"angular_velocity (pylinkage.actuators.crank.crank attribute)":[[2,"pylinkage.actuators.crank.Crank.angular_velocity",false]],"angular_velocity (pylinkage.dimensions.driverangle attribute)":[[1,"pylinkage.dimensions.DriverAngle.angular_velocity",false]],"angular_velocity (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.angular_velocity",false]],"angular_velocity (pylinkage.mechanism.link.arcdriverlink attribute)":[[11,"pylinkage.mechanism.link.ArcDriverLink.angular_velocity",false]],"angular_velocity (pylinkage.mechanism.link.driverlink attribute)":[[11,"pylinkage.mechanism.link.DriverLink.angular_velocity",false]],"animate_dashboard() (in module pylinkage.visualizer.pso_plots)":[[21,"pylinkage.visualizer.pso_plots.animate_dashboard",false]],"animate_kinematics() (in module pylinkage.visualizer.kinematics)":[[21,"pylinkage.visualizer.kinematics.animate_kinematics",false]],"animate_linkage_plotly() (in module pylinkage.visualizer.plotly_viz)":[[21,"pylinkage.visualizer.plotly_viz.animate_linkage_plotly",false]],"animate_parallel_coordinates() (in module pylinkage.visualizer.pso_plots)":[[21,"pylinkage.visualizer.pso_plots.animate_parallel_coordinates",false]],"arc_end (pylinkage.actuators.arc_crank.arccrank attribute)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.arc_end",false]],"arc_end (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.arc_end",false]],"arc_end (pylinkage.mechanism.link.arcdriverlink attribute)":[[11,"pylinkage.mechanism.link.ArcDriverLink.arc_end",false]],"arc_start (pylinkage.actuators.arc_crank.arccrank attribute)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.arc_start",false]],"arc_start (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.arc_start",false]],"arc_start (pylinkage.mechanism.link.arcdriverlink attribute)":[[11,"pylinkage.mechanism.link.ArcDriverLink.arc_start",false]],"arccrank (class in pylinkage.actuators.arc_crank)":[[2,"pylinkage.actuators.arc_crank.ArcCrank",false]],"arcdriverlink (class in pylinkage.mechanism.link)":[[11,"pylinkage.mechanism.link.ArcDriverLink",false]],"are_isomorphic() (in module pylinkage.topology.isomorphism)":[[19,"pylinkage.topology.isomorphism.are_isomorphic",false]],"arm_angle (pylinkage.dyads.oscillating_cam.oscillatingcamfollower property)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.arm_angle",false]],"arm_length (pylinkage.dyads.oscillating_cam.oscillatingcamfollower attribute)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.arm_length",false]],"assur_groups (pylinkage.assur.assur_mechanism.assurmechanism property)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.assur_groups",false]],"assur_groups (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.assur_groups",false]],"assurgroup (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.AssurGroup",false]],"assurgroupclass (class in pylinkage.assur.signature)":[[3,"pylinkage.assur.signature.AssurGroupClass",false]],"assurmechanism (class in pylinkage.assur.assur_mechanism)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism",false]],"assursignature (class in pylinkage.assur.signature)":[[3,"pylinkage.assur.signature.AssurSignature",false]],"axis (pylinkage.mechanism.joint.prismaticjoint attribute)":[[11,"pylinkage.mechanism.joint.PrismaticJoint.axis",false]],"axis_id (pylinkage.mechanism.builder.prismaticconnection attribute)":[[11,"pylinkage.mechanism.builder.PrismaticConnection.axis_id",false]],"bar (pylinkage.visualizer.symbols.linkstyle attribute)":[[21,"pylinkage.visualizer.symbols.LinkStyle.BAR",false]],"base_radius (pylinkage.cam.profiles.camprofile attribute)":[[5,"pylinkage.cam.profiles.CamProfile.base_radius",false]],"base_radius (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.base_radius",false]],"base_radius (pylinkage.cam.profiles.pointarrayprofile attribute)":[[5,"pylinkage.cam.profiles.PointArrayProfile.base_radius",false]],"baseline_path_metric (pylinkage.linkage.sensitivity.sensitivityanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.baseline_path_metric",false]],"baseline_transmission (pylinkage.linkage.sensitivity.sensitivityanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.baseline_transmission",false]],"best_compromise() (pylinkage.optimization.collections.pareto.paretofront method)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.best_compromise",false]],"best_score (pylinkage.optimization.async_optimization.optimizationprogress attribute)":[[12,"pylinkage.optimization.async_optimization.OptimizationProgress.best_score",false]],"binary (pylinkage.mechanism.link.linktype attribute)":[[11,"pylinkage.mechanism.link.LinkType.BINARY",false]],"body_id (pylinkage.assur.graph.edge attribute)":[[3,"pylinkage.assur.graph.Edge.body_id",false]],"bone (pylinkage.visualizer.symbols.linkstyle attribute)":[[21,"pylinkage.visualizer.symbols.LinkStyle.BONE",false]],"bounding_box() (in module pylinkage.geometry.secants)":[[8,"pylinkage.geometry.secants.bounding_box",false]],"bounding_box() (in module pylinkage.linkage.analysis)":[[10,"pylinkage.linkage.analysis.bounding_box",false]],"branch (pylinkage.symbolic.joints.symrevolute attribute)":[[17,"pylinkage.symbolic.joints.SymRevolute.branch",false]],"branch_info (pylinkage.synthesis.core.synthesisresult attribute)":[[18,"pylinkage.synthesis.core.SynthesisResult.branch_info",false]],"build() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.build",false]],"build_connections() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.build_connections",false]],"build_linkage_3d() (in module pylinkage.visualizer.step_export)":[[21,"pylinkage.visualizer.step_export.build_linkage_3d",false]],"build_neighborhood_graph() (in module pylinkage.optimization.topology_neighborhood)":[[12,"pylinkage.optimization.topology_neighborhood.build_neighborhood_graph",false]],"build_rails() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.build_rails",false]],"burmestercurves (class in pylinkage.synthesis.core)":[[18,"pylinkage.synthesis.core.BurmesterCurves",false]],"burmesterdyad (class in pylinkage.synthesis.core)":[[18,"pylinkage.synthesis.core.BurmesterDyad",false]],"by_family() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.by_family",false]],"by_num_links() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.by_num_links",false]],"cache_distances() (pylinkage.mechanism.link.link method)":[[11,"pylinkage.mechanism.link.Link.cache_distances",false]],"cam_angle (pylinkage.dyads.oscillating_cam.oscillatingcamfollower property)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.cam_angle",false]],"cam_angle (pylinkage.dyads.translating_cam.translatingcamfollower property)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.cam_angle",false]],"cam_driver (pylinkage.dyads.oscillating_cam.oscillatingcamfollower attribute)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.cam_driver",false]],"cam_driver (pylinkage.dyads.translating_cam.translatingcamfollower attribute)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.cam_driver",false]],"camprofile (class in pylinkage.cam.profiles)":[[5,"pylinkage.cam.profiles.CamProfile",false]],"can_form() (pylinkage.assur.groups.assurgroup class method)":[[3,"pylinkage.assur.groups.AssurGroup.can_form",false]],"can_form() (pylinkage.assur.groups.dyad class method)":[[3,"pylinkage.assur.groups.Dyad.can_form",false]],"can_form() (pylinkage.assur.groups.triad class method)":[[3,"pylinkage.assur.groups.Triad.can_form",false]],"canonical_form (pylinkage.assur.signature.assursignature property)":[[3,"pylinkage.assur.signature.AssurSignature.canonical_form",false]],"canonical_form() (in module pylinkage.topology.isomorphism)":[[19,"pylinkage.topology.isomorphism.canonical_form",false]],"canonical_hash() (in module pylinkage.topology.isomorphism)":[[19,"pylinkage.topology.isomorphism.canonical_hash",false]],"catalogentry (class in pylinkage.topology.catalog)":[[19,"pylinkage.topology.catalog.CatalogEntry",false]],"center_curve (pylinkage.synthesis.core.burmestercurves attribute)":[[18,"pylinkage.synthesis.core.BurmesterCurves.center_curve",false]],"center_point (pylinkage.synthesis.core.burmesterdyad attribute)":[[18,"pylinkage.synthesis.core.BurmesterDyad.center_point",false]],"center_position (pylinkage.linkage.transmission.strokeanalysis property)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.center_position",false]],"chain_optimizers() (in module pylinkage.optimization.scipy_optimize)":[[12,"pylinkage.optimization.scipy_optimize.chain_optimizers",false]],"change_point (pylinkage.synthesis.utils.grashoftype attribute)":[[18,"pylinkage.synthesis.utils.GrashofType.CHANGE_POINT",false]],"check_buildability() (in module pylinkage.symbolic.solver)":[[17,"pylinkage.symbolic.solver.check_buildability",false]],"check_condition_number() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.check_condition_number",false]],"chromosome (pylinkage.optimization.co_optimization_types.cooptsolution attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptSolution.chromosome",false]],"circle_curve (pylinkage.synthesis.core.burmestercurves attribute)":[[18,"pylinkage.synthesis.core.BurmesterCurves.circle_curve",false]],"circle_intersect() (in module pylinkage.geometry.secants)":[[8,"pylinkage.geometry.secants.circle_intersect",false]],"circle_line_from_points_intersection() (in module pylinkage.geometry.secants)":[[8,"pylinkage.geometry.secants.circle_line_from_points_intersection",false]],"circle_line_intersection() (in module pylinkage.geometry.secants)":[[8,"pylinkage.geometry.secants.circle_line_intersection",false]],"circle_point (pylinkage.synthesis.core.burmesterdyad attribute)":[[18,"pylinkage.synthesis.core.BurmesterDyad.circle_point",false]],"close() (pylinkage.optimization.multi_objective.linkageproblem method)":[[12,"pylinkage.optimization.multi_objective.LinkageProblem.close",false]],"co_optimize() (in module pylinkage.optimization.mixed_variable)":[[12,"pylinkage.optimization.mixed_variable.co_optimize",false]],"coefficients (pylinkage.cam.motion_laws.polynomialmotionlaw property)":[[5,"pylinkage.cam.motion_laws.PolynomialMotionLaw.coefficients",false]],"coefficients_to_link_lengths() (in module pylinkage.synthesis.function_generation)":[[18,"pylinkage.synthesis.function_generation.coefficients_to_link_lengths",false]],"color (pylinkage.visualizer.symbols.symbolspec attribute)":[[21,"pylinkage.visualizer.symbols.SymbolSpec.color",false]],"compactness (pylinkage.synthesis.topology_types.qualitymetrics attribute)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics.compactness",false]],"compatible_topologies() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.compatible_topologies",false]],"compile() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.compile",false]],"compile() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.compile",false]],"complex_to_point() (in module pylinkage.synthesis.burmester)":[[18,"pylinkage.synthesis.burmester.complex_to_point",false]],"complex_to_point() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.complex_to_point",false]],"component_instance_from_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.component_instance_from_dict",false]],"component_instance_to_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.component_instance_to_dict",false]],"componentinstance (class in pylinkage.hypergraph.hierarchy)":[[9,"pylinkage.hypergraph.hierarchy.ComponentInstance",false]],"components (pylinkage.simulation.linkage.linkage attribute)":[[15,"pylinkage.simulation.linkage.Linkage.components",false]],"compute_all_poles() (in module pylinkage.synthesis.burmester)":[[18,"pylinkage.synthesis.burmester.compute_all_poles",false]],"compute_circle_point_curve() (in module pylinkage.synthesis.burmester)":[[18,"pylinkage.synthesis.burmester.compute_circle_point_curve",false]],"compute_compactness() (in module pylinkage.synthesis.ranking)":[[18,"pylinkage.synthesis.ranking.compute_compactness",false]],"compute_dof() (in module pylinkage.topology.analysis)":[[19,"pylinkage.topology.analysis.compute_dof",false]],"compute_link_ratio() (in module pylinkage.synthesis.ranking)":[[18,"pylinkage.synthesis.ranking.compute_link_ratio",false]],"compute_metrics() (in module pylinkage.synthesis.ranking)":[[18,"pylinkage.synthesis.ranking.compute_metrics",false]],"compute_mobility() (in module pylinkage.topology.analysis)":[[19,"pylinkage.topology.analysis.compute_mobility",false]],"compute_path_accuracy() (in module pylinkage.synthesis.ranking)":[[18,"pylinkage.synthesis.ranking.compute_path_accuracy",false]],"compute_pole() (in module pylinkage.synthesis.burmester)":[[18,"pylinkage.synthesis.burmester.compute_pole",false]],"compute_relative_pole() (in module pylinkage.synthesis.burmester)":[[18,"pylinkage.synthesis.burmester.compute_relative_pole",false]],"compute_slide_position() (in module pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.compute_slide_position",false]],"compute_trajectory_numeric() (in module pylinkage.symbolic.solver)":[[17,"pylinkage.symbolic.solver.compute_trajectory_numeric",false]],"compute_transmission_angle() (in module pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.compute_transmission_angle",false]],"compute_transmission_angle() (in module pylinkage.synthesis.ranking)":[[18,"pylinkage.synthesis.ranking.compute_transmission_angle",false]],"config (pylinkage.optimization.co_optimization_types.cooptimizationresult attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationResult.config",false]],"connect() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.connect",false]],"connect_prismatic() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.connect_prismatic",false]],"connection (class in pylinkage.hypergraph.hierarchy)":[[9,"pylinkage.hypergraph.hierarchy.Connection",false]],"connection (class in pylinkage.mechanism.builder)":[[11,"pylinkage.mechanism.builder.Connection",false]],"connection_from_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.connection_from_dict",false]],"connection_to_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.connection_to_dict",false]],"connections (pylinkage.hypergraph.hierarchy.hierarchicallinkage attribute)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage.connections",false]],"connects() (pylinkage.assur.graph.edge method)":[[3,"pylinkage.assur.graph.Edge.connects",false]],"connects() (pylinkage.hypergraph.core.edge method)":[[9,"pylinkage.hypergraph.core.Edge.connects",false]],"constraint_counts (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.constraint_counts",false]],"constraint_equations() (pylinkage.symbolic.joints.symcrank method)":[[17,"pylinkage.symbolic.joints.SymCrank.constraint_equations",false]],"constraint_equations() (pylinkage.symbolic.joints.symjoint method)":[[17,"pylinkage.symbolic.joints.SymJoint.constraint_equations",false]],"constraint_equations() (pylinkage.symbolic.joints.symrevolute method)":[[17,"pylinkage.symbolic.joints.SymRevolute.constraint_equations",false]],"constraint_equations() (pylinkage.symbolic.joints.symstatic method)":[[17,"pylinkage.symbolic.joints.SymStatic.constraint_equations",false]],"constraint_names (pylinkage.linkage.sensitivity.sensitivityanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.constraint_names",false]],"constraint_offsets (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.constraint_offsets",false]],"constraints (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.constraints",false]],"convergence_history (pylinkage.optimization.co_optimization_types.cooptimizationresult attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationResult.convergence_history",false]],"cooptimizationconfig (class in pylinkage.optimization.co_optimization_types)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig",false]],"cooptimizationresult (class in pylinkage.optimization.co_optimization_types)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationResult",false]],"cooptsolution (class in pylinkage.optimization.co_optimization_types)":[[12,"pylinkage.optimization.co_optimization_types.CoOptSolution",false]],"coord() (pylinkage.mechanism.joint.joint method)":[[11,"pylinkage.mechanism.joint.Joint.coord",false]],"copy() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.copy",false]],"copy() (pylinkage.dimensions.dimensions method)":[[1,"pylinkage.dimensions.Dimensions.copy",false]],"copy() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.copy",false]],"copy() (pylinkage.optimization.co_optimization_types.mixedchromosome method)":[[12,"pylinkage.optimization.co_optimization_types.MixedChromosome.copy",false]],"copy() (pylinkage.solver.types.solverdata method)":[[16,"pylinkage.solver.types.SolverData.copy",false]],"coupler_curve() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.coupler_curve",false]],"coupler_node (pylinkage.synthesis.topology_types.nbarsolution attribute)":[[18,"pylinkage.synthesis.topology_types.NBarSolution.coupler_node",false]],"coupler_point (pylinkage.synthesis.topology_types.nbarsolution attribute)":[[18,"pylinkage.synthesis.topology_types.NBarSolution.coupler_point",false]],"crank (class in pylinkage.actuators.crank)":[[2,"pylinkage.actuators.crank.Crank",false]],"crank (pylinkage.visualizer.symbols.symboltype attribute)":[[21,"pylinkage.visualizer.symbols.SymbolType.CRANK",false]],"crank_angle_limits() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.crank_angle_limits",false]],"crank_indices (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.crank_indices",false]],"create_dyad() (in module pylinkage.dyads.factory)":[[7,"pylinkage.dyads.factory.create_dyad",false]],"create_trajectory_functions() (in module pylinkage.symbolic.solver)":[[17,"pylinkage.symbolic.solver.create_trajectory_functions",false]],"crossover_prob (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.crossover_prob",false]],"current_angle (pylinkage.mechanism.link.arcdriverlink attribute)":[[11,"pylinkage.mechanism.link.ArcDriverLink.current_angle",false]],"current_angle (pylinkage.mechanism.link.driverlink attribute)":[[11,"pylinkage.mechanism.link.DriverLink.current_angle",false]],"current_iteration (pylinkage.optimization.async_optimization.optimizationprogress attribute)":[[12,"pylinkage.optimization.async_optimization.OptimizationProgress.current_iteration",false]],"cycloidalmotionlaw (class in pylinkage.cam.motion_laws)":[[5,"pylinkage.cam.motion_laws.CycloidalMotionLaw",false]],"cyl_to_cart() (in module pylinkage.geometry.core)":[[8,"pylinkage.geometry.core.cyl_to_cart",false]],"dashboard_layout() (in module pylinkage.visualizer.pso_plots)":[[21,"pylinkage.visualizer.pso_plots.dashboard_layout",false]],"decompose_assur_groups() (in module pylinkage.assur.decomposition)":[[3,"pylinkage.assur.decomposition.decompose_assur_groups",false]],"decomposition (pylinkage.assur.assur_mechanism.assurmechanism property)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.decomposition",false]],"decompositionresult (class in pylinkage.assur.decomposition)":[[3,"pylinkage.assur.decomposition.DecompositionResult",false]],"default_angular_velocity (in module pylinkage.actuators.crank)":[[2,"pylinkage.actuators.crank.DEFAULT_ANGULAR_VELOCITY",false]],"default_orientation_resolution (in module pylinkage.synthesis.path_generation)":[[18,"pylinkage.synthesis.path_generation.DEFAULT_ORIENTATION_RESOLUTION",false]],"degree() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.degree",false]],"degree() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.degree",false]],"degree_of_freedom (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.degree_of_freedom",false]],"degree_of_freedom (pylinkage.assur.assur_mechanism.assurmechanism property)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.degree_of_freedom",false]],"description (pylinkage.optimization.topology_neighborhood.topologyneighbor attribute)":[[12,"pylinkage.optimization.topology_neighborhood.TopologyNeighbor.description",false]],"differential_evolution_optimization() (in module pylinkage.optimization.scipy_optimize)":[[12,"pylinkage.optimization.scipy_optimize.differential_evolution_optimization",false]],"differential_evolution_optimization_async() (in module pylinkage.optimization.async_optimization)":[[12,"pylinkage.optimization.async_optimization.differential_evolution_optimization_async",false]],"dimension_bounds_factor (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.dimension_bounds_factor",false]],"dimension_mutation_sigma (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.dimension_mutation_sigma",false]],"dimensions (class in pylinkage.dimensions)":[[1,"pylinkage.dimensions.Dimensions",false]],"dimensions (pylinkage.optimization.co_optimization_types.mixedchromosome attribute)":[[12,"pylinkage.optimization.co_optimization_types.MixedChromosome.dimensions",false]],"dimensions (pylinkage.optimization.collections.mutable_agent.mutableagent attribute)":[[13,"pylinkage.optimization.collections.mutable_agent.MutableAgent.dimensions",false]],"dimensions (pylinkage.optimization.collections.pareto.paretosolution attribute)":[[13,"pylinkage.optimization.collections.pareto.ParetoSolution.dimensions",false]],"direction (pylinkage.mechanism.builder.slideaxis attribute)":[[11,"pylinkage.mechanism.builder.SlideAxis.direction",false]],"displacement (pylinkage.dyads.translating_cam.translatingcamfollower property)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.displacement",false]],"displacement() (pylinkage.cam.motion_laws.cycloidalmotionlaw method)":[[5,"pylinkage.cam.motion_laws.CycloidalMotionLaw.displacement",false]],"displacement() (pylinkage.cam.motion_laws.harmonicmotionlaw method)":[[5,"pylinkage.cam.motion_laws.HarmonicMotionLaw.displacement",false]],"displacement() (pylinkage.cam.motion_laws.modifiedtrapezoidalmotionlaw method)":[[5,"pylinkage.cam.motion_laws.ModifiedTrapezoidalMotionLaw.displacement",false]],"displacement() (pylinkage.cam.motion_laws.motionlaw method)":[[5,"pylinkage.cam.motion_laws.MotionLaw.displacement",false]],"displacement() (pylinkage.cam.motion_laws.polynomialmotionlaw method)":[[5,"pylinkage.cam.motion_laws.PolynomialMotionLaw.displacement",false]],"dist() (in module pylinkage.geometry.core)":[[8,"pylinkage.geometry.core.dist",false]],"distance (pylinkage.components.point_tracker.pointtracker attribute)":[[6,"pylinkage.components.point_tracker.PointTracker.distance",false]],"distance (pylinkage.dyads.fixed.fixeddyad attribute)":[[7,"pylinkage.dyads.fixed.FixedDyad.distance",false]],"distance (pylinkage.dyads.rrp.rrpdyad attribute)":[[7,"pylinkage.dyads.rrp.RRPDyad.distance",false]],"distance (pylinkage.mechanism.builder.pendingtracker attribute)":[[11,"pylinkage.mechanism.builder.PendingTracker.distance",false]],"distance (pylinkage.mechanism.joint.trackerjoint attribute)":[[11,"pylinkage.mechanism.joint.TrackerJoint.distance",false]],"distance() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.distance",false]],"distance1 (pylinkage.dyads.rrr.rrrdyad attribute)":[[7,"pylinkage.dyads.rrr.RRRDyad.distance1",false]],"distance2 (pylinkage.dyads.rrr.rrrdyad attribute)":[[7,"pylinkage.dyads.rrr.RRRDyad.distance2",false]],"dof (pylinkage.topology.analysis.mobilityinfo attribute)":[[19,"pylinkage.topology.analysis.MobilityInfo.dof",false]],"dof (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.dof",false]],"dominates() (pylinkage.optimization.collections.pareto.paretosolution method)":[[13,"pylinkage.optimization.collections.pareto.ParetoSolution.dominates",false]],"driven_nodes() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.driven_nodes",false]],"driven_nodes() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.driven_nodes",false]],"driver (pylinkage.mechanism.link.linktype attribute)":[[11,"pylinkage.mechanism.link.LinkType.DRIVER",false]],"driver_angles (pylinkage.dimensions.dimensions attribute)":[[1,"pylinkage.dimensions.Dimensions.driver_angles",false]],"driver_nodes() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.driver_nodes",false]],"driver_nodes() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.driver_nodes",false]],"driverangle (class in pylinkage.dimensions)":[[1,"pylinkage.dimensions.DriverAngle",false]],"driverlink (class in pylinkage.mechanism.link)":[[11,"pylinkage.mechanism.link.DriverLink",false]],"drivers (pylinkage.assur.decomposition.decompositionresult attribute)":[[3,"pylinkage.assur.decomposition.DecompositionResult.drivers",false]],"dual_annealing_optimization() (in module pylinkage.optimization.scipy_optimize)":[[12,"pylinkage.optimization.scipy_optimize.dual_annealing_optimization",false]],"dwell_high_end (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.dwell_high_end",false]],"dyad (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.Dyad",false]],"dyad (pylinkage.assur.signature.assurgroupclass attribute)":[[3,"pylinkage.assur.signature.AssurGroupClass.DYAD",false]],"dyadpp (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.DyadPP",false]],"dyadprr (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.DyadPRR",false]],"dyadrpr (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.DyadRPR",false]],"dyadrrp (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.DyadRRP",false]],"dyadrrr (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.DyadRRR",false]],"dyads (pylinkage.simulation.linkage.linkage property)":[[15,"pylinkage.simulation.linkage.Linkage.dyads",false]],"dyads (pylinkage.synthesis.topology_types.groupsynthesisresult attribute)":[[18,"pylinkage.synthesis.topology_types.GroupSynthesisResult.dyads",false]],"edge (class in pylinkage.assur.graph)":[[3,"pylinkage.assur.graph.Edge",false]],"edge (class in pylinkage.hypergraph.core)":[[9,"pylinkage.hypergraph.core.Edge",false]],"edge_distances (pylinkage.dimensions.dimensions attribute)":[[1,"pylinkage.dimensions.Dimensions.edge_distances",false]],"edge_from_dict() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.edge_from_dict",false]],"edge_from_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.edge_from_dict",false]],"edge_map (pylinkage.assur.groups.triad attribute)":[[3,"pylinkage.assur.groups.Triad.edge_map",false]],"edge_to_dict() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.edge_to_dict",false]],"edge_to_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.edge_to_dict",false]],"edges (pylinkage.assur.graph.linkagegraph attribute)":[[3,"pylinkage.assur.graph.LinkageGraph.edges",false]],"edges (pylinkage.hypergraph.graph.hypergraphlinkage attribute)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.edges",false]],"eliminate_theta() (in module pylinkage.symbolic.solver)":[[17,"pylinkage.symbolic.solver.eliminate_theta",false]],"ensemble (pylinkage.synthesis.core.synthesisresult property)":[[18,"pylinkage.synthesis.core.SynthesisResult.ensemble",false]],"entries (pylinkage.topology.catalog.topologycatalog attribute)":[[19,"pylinkage.topology.catalog.TopologyCatalog.entries",false]],"enumerate_all() (in module pylinkage.topology.enumeration)":[[19,"pylinkage.topology.enumeration.enumerate_all",false]],"enumerate_topologies() (in module pylinkage.topology.enumeration)":[[19,"pylinkage.topology.enumeration.enumerate_topologies",false]],"evaluate() (pylinkage.cam.profiles.camprofile method)":[[5,"pylinkage.cam.profiles.CamProfile.evaluate",false]],"evaluate() (pylinkage.cam.profiles.functionprofile method)":[[5,"pylinkage.cam.profiles.FunctionProfile.evaluate",false]],"evaluate() (pylinkage.cam.profiles.pointarrayprofile method)":[[5,"pylinkage.cam.profiles.PointArrayProfile.evaluate",false]],"evaluate() (pylinkage.symbolic.optimization.symbolicoptimizer method)":[[17,"pylinkage.symbolic.optimization.SymbolicOptimizer.evaluate",false]],"evaluate_derivative() (pylinkage.cam.profiles.camprofile method)":[[5,"pylinkage.cam.profiles.CamProfile.evaluate_derivative",false]],"evaluate_derivative() (pylinkage.cam.profiles.functionprofile method)":[[5,"pylinkage.cam.profiles.FunctionProfile.evaluate_derivative",false]],"evaluate_derivative() (pylinkage.cam.profiles.pointarrayprofile method)":[[5,"pylinkage.cam.profiles.PointArrayProfile.evaluate_derivative",false]],"extension (pylinkage.actuators.linear.linearactuator property)":[[2,"pylinkage.actuators.linear.LinearActuator.extension",false]],"extract_trajectories() (in module pylinkage.linkage.analysis)":[[10,"pylinkage.linkage.analysis.extract_trajectories",false]],"extract_trajectory() (in module pylinkage.linkage.analysis)":[[10,"pylinkage.linkage.analysis.extract_trajectory",false]],"fall_end (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.fall_end",false]],"family (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.family",false]],"fast_variator() (in module pylinkage.optimization.grid_search)":[[12,"pylinkage.optimization.grid_search.fast_variator",false]],"fillet_radius (pylinkage.visualizer.step_export.linkprofile attribute)":[[21,"pylinkage.visualizer.step_export.LinkProfile.fillet_radius",false]],"filter() (pylinkage.optimization.collections.pareto.paretofront method)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.filter",false]],"filter_finite() (pylinkage.synthesis.core.burmestercurves method)":[[18,"pylinkage.synthesis.core.BurmesterCurves.filter_finite",false]],"first_nan_step() (in module pylinkage.solver.simulation)":[[16,"pylinkage.solver.simulation.first_nan_step",false]],"fixed (pylinkage.visualizer.symbols.symboltype attribute)":[[21,"pylinkage.visualizer.symbols.SymbolType.FIXED",false]],"fixeddyad (class in pylinkage.dyads.fixed)":[[7,"pylinkage.dyads.fixed.FixedDyad",false]],"flatten() (pylinkage.hypergraph.hierarchy.hierarchicallinkage method)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage.flatten",false]],"fourbar() (in module pylinkage.mechanism.factories)":[[11,"pylinkage.mechanism.factories.fourbar",false]],"fourbar_from_lengths() (in module pylinkage.synthesis.conversion)":[[18,"pylinkage.synthesis.conversion.fourbar_from_lengths",false]],"fourbar_symbolic() (in module pylinkage.symbolic.conversion)":[[17,"pylinkage.symbolic.conversion.fourbar_symbolic",false]],"freudenstein_equation() (in module pylinkage.synthesis.function_generation)":[[18,"pylinkage.synthesis.function_generation.freudenstein_equation",false]],"from_dict() (pylinkage.dimensions.dimensions class method)":[[1,"pylinkage.dimensions.Dimensions.from_dict",false]],"from_dict() (pylinkage.dimensions.driverangle class method)":[[1,"pylinkage.dimensions.DriverAngle.from_dict",false]],"from_edges() (pylinkage.hypergraph.core.hyperedge class method)":[[9,"pylinkage.hypergraph.core.Hyperedge.from_edges",false]],"from_graph() (pylinkage.assur.assur_mechanism.assurmechanism class method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.from_graph",false]],"from_hypergraph() (in module pylinkage.assur.hypergraph_conversion)":[[3,"pylinkage.assur.hypergraph_conversion.from_hypergraph",false]],"from_instance (pylinkage.hypergraph.hierarchy.connection attribute)":[[9,"pylinkage.hypergraph.hierarchy.Connection.from_instance",false]],"from_json() (pylinkage.topology.catalog.topologycatalog class method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.from_json",false]],"from_mechanism() (in module pylinkage.hypergraph.mechanism_conversion)":[[9,"pylinkage.hypergraph.mechanism_conversion.from_mechanism",false]],"from_mechanism() (pylinkage.assur.assur_mechanism.assurmechanism class method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.from_mechanism",false]],"from_port (pylinkage.hypergraph.hierarchy.connection attribute)":[[9,"pylinkage.hypergraph.hierarchy.Connection.from_port",false]],"from_sim_linkage() (in module pylinkage.hypergraph.sim_conversion)":[[9,"pylinkage.hypergraph.sim_conversion.from_sim_linkage",false]],"function_generation() (in module pylinkage.synthesis.function_generation)":[[18,"pylinkage.synthesis.function_generation.function_generation",false]],"functionprofile (class in pylinkage.cam.profiles)":[[5,"pylinkage.cam.profiles.FunctionProfile",false]],"generalized_synthesis() (in module pylinkage.synthesis.generalized)":[[18,"pylinkage.synthesis.generalized.generalized_synthesis",false]],"generate_bounds() (in module pylinkage.optimization.utils)":[[12,"pylinkage.optimization.utils.generate_bounds",false]],"generate_catalog() (in module pylinkage.topology.catalog)":[[19,"pylinkage.topology.catalog.generate_catalog",false]],"generate_symbolic_bounds() (in module pylinkage.symbolic.optimization)":[[17,"pylinkage.symbolic.optimization.generate_symbolic_bounds",false]],"get() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.get",false]],"get_accelerations() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_accelerations",false]],"get_accelerations() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.get_accelerations",false]],"get_all_dyads() (pylinkage.synthesis.core.burmestercurves method)":[[18,"pylinkage.synthesis.core.BurmesterCurves.get_all_dyads",false]],"get_all_port_nodes() (pylinkage.hypergraph.hierarchy.hierarchicallinkage method)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage.get_all_port_nodes",false]],"get_axis_normalized() (pylinkage.mechanism.joint.prismaticjoint method)":[[11,"pylinkage.mechanism.joint.PrismaticJoint.get_axis_normalized",false]],"get_components() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.get_components",false]],"get_constraint_equations() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.get_constraint_equations",false]],"get_constraints() (pylinkage.actuators.arc_crank.arccrank method)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.get_constraints",false]],"get_constraints() (pylinkage.actuators.crank.crank method)":[[2,"pylinkage.actuators.crank.Crank.get_constraints",false]],"get_constraints() (pylinkage.actuators.linear.linearactuator method)":[[2,"pylinkage.actuators.linear.LinearActuator.get_constraints",false]],"get_constraints() (pylinkage.cam.profiles.camprofile method)":[[5,"pylinkage.cam.profiles.CamProfile.get_constraints",false]],"get_constraints() (pylinkage.cam.profiles.functionprofile method)":[[5,"pylinkage.cam.profiles.FunctionProfile.get_constraints",false]],"get_constraints() (pylinkage.cam.profiles.pointarrayprofile method)":[[5,"pylinkage.cam.profiles.PointArrayProfile.get_constraints",false]],"get_constraints() (pylinkage.components.ground.ground method)":[[6,"pylinkage.components.ground.Ground.get_constraints",false]],"get_constraints() (pylinkage.components.point_tracker.pointtracker method)":[[6,"pylinkage.components.point_tracker.PointTracker.get_constraints",false]],"get_constraints() (pylinkage.dyads.fixed.fixeddyad method)":[[7,"pylinkage.dyads.fixed.FixedDyad.get_constraints",false]],"get_constraints() (pylinkage.dyads.oscillating_cam.oscillatingcamfollower method)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.get_constraints",false]],"get_constraints() (pylinkage.dyads.pp.ppdyad method)":[[7,"pylinkage.dyads.pp.PPDyad.get_constraints",false]],"get_constraints() (pylinkage.dyads.rrp.rrpdyad method)":[[7,"pylinkage.dyads.rrp.RRPDyad.get_constraints",false]],"get_constraints() (pylinkage.dyads.rrr.rrrdyad method)":[[7,"pylinkage.dyads.rrr.RRRDyad.get_constraints",false]],"get_constraints() (pylinkage.dyads.translating_cam.translatingcamfollower method)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.get_constraints",false]],"get_constraints() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_constraints",false]],"get_constraints() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.get_constraints",false]],"get_coords() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_coords",false]],"get_coords() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.get_coords",false]],"get_distance() (pylinkage.mechanism.link.link method)":[[11,"pylinkage.mechanism.link.Link.get_distance",false]],"get_driver_angle() (pylinkage.dimensions.dimensions method)":[[1,"pylinkage.dimensions.Dimensions.get_driver_angle",false]],"get_dyad() (pylinkage.synthesis.core.burmestercurves method)":[[18,"pylinkage.synthesis.core.BurmesterCurves.get_dyad",false]],"get_edge_between() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.get_edge_between",false]],"get_edge_between() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.get_edge_between",false]],"get_edge_distance() (pylinkage.dimensions.dimensions method)":[[1,"pylinkage.dimensions.Dimensions.get_edge_distance",false]],"get_edges_for_node() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.get_edges_for_node",false]],"get_edges_for_node() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.get_edges_for_node",false]],"get_hyperedge_distance() (pylinkage.dimensions.dimensions method)":[[1,"pylinkage.dimensions.Dimensions.get_hyperedge_distance",false]],"get_hyperedges_for_node() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.get_hyperedges_for_node",false]],"get_isomer_geometry() (in module pylinkage.dyads.factory)":[[7,"pylinkage.dyads.factory.get_isomer_geometry",false]],"get_joint() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_joint",false]],"get_joint() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.get_joint",false]],"get_joint_positions() (pylinkage.assur.assur_mechanism.assurmechanism method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.get_joint_positions",false]],"get_joint_positions() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_joint_positions",false]],"get_line_points() (pylinkage.mechanism.builder.slideaxis method)":[[11,"pylinkage.mechanism.builder.SlideAxis.get_line_points",false]],"get_link() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_link",false]],"get_link_color() (in module pylinkage.visualizer.symbols)":[[21,"pylinkage.visualizer.symbols.get_link_color",false]],"get_nearest_point() (in module pylinkage.geometry.core)":[[8,"pylinkage.geometry.core.get_nearest_point",false]],"get_node_position() (pylinkage.dimensions.dimensions method)":[[1,"pylinkage.dimensions.Dimensions.get_node_position",false]],"get_normalized_direction() (pylinkage.mechanism.builder.slideaxis method)":[[11,"pylinkage.mechanism.builder.SlideAxis.get_normalized_direction",false]],"get_numeric_parameters() (in module pylinkage.symbolic.conversion)":[[17,"pylinkage.symbolic.conversion.get_numeric_parameters",false]],"get_parent_pairs() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.get_parent_pairs",false]],"get_port_distance() (pylinkage.mechanism.builder.pendinglink method)":[[11,"pylinkage.mechanism.builder.PendingLink.get_port_distance",false]],"get_port_qualified_node() (pylinkage.hypergraph.hierarchy.componentinstance method)":[[9,"pylinkage.hypergraph.hierarchy.ComponentInstance.get_port_qualified_node",false]],"get_qualified_node_id() (pylinkage.hypergraph.hierarchy.componentinstance method)":[[9,"pylinkage.hypergraph.hierarchy.ComponentInstance.get_qualified_node_id",false]],"get_rail_pairs() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.get_rail_pairs",false]],"get_required_anchors() (in module pylinkage.dyads.factory)":[[7,"pylinkage.dyads.factory.get_required_anchors",false]],"get_required_constraints() (in module pylinkage.dyads.factory)":[[7,"pylinkage.dyads.factory.get_required_constraints",false]],"get_rotation_period() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_rotation_period",false]],"get_rotation_period() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.get_rotation_period",false]],"get_symbol_spec() (in module pylinkage.visualizer.symbols)":[[21,"pylinkage.visualizer.symbols.get_symbol_spec",false]],"get_trajectory_expressions() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.get_trajectory_expressions",false]],"get_velocities() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.get_velocities",false]],"get_velocities() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.get_velocities",false]],"gradient() (pylinkage.symbolic.optimization.symbolicoptimizer method)":[[17,"pylinkage.symbolic.optimization.SymbolicOptimizer.gradient",false]],"graph (pylinkage.assur.assur_mechanism.assurmechanism property)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.graph",false]],"graph (pylinkage.assur.decomposition.decompositionresult attribute)":[[3,"pylinkage.assur.decomposition.DecompositionResult.graph",false]],"graph_from_dict() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.graph_from_dict",false]],"graph_from_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.graph_from_dict",false]],"graph_from_json() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.graph_from_json",false]],"graph_from_json() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.graph_from_json",false]],"graph_to_dict() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.graph_to_dict",false]],"graph_to_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.graph_to_dict",false]],"graph_to_json() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.graph_to_json",false]],"graph_to_json() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.graph_to_json",false]],"graph_to_mechanism() (in module pylinkage.assur.mechanism_conversion)":[[3,"pylinkage.assur.mechanism_conversion.graph_to_mechanism",false]],"grashof_check() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.grashof_check",false]],"grashof_crank_rocker (pylinkage.synthesis.utils.grashoftype attribute)":[[18,"pylinkage.synthesis.utils.GrashofType.GRASHOF_CRANK_ROCKER",false]],"grashof_double_crank (pylinkage.synthesis.utils.grashoftype attribute)":[[18,"pylinkage.synthesis.utils.GrashofType.GRASHOF_DOUBLE_CRANK",false]],"grashof_double_rocker (pylinkage.synthesis.utils.grashoftype attribute)":[[18,"pylinkage.synthesis.utils.GrashofType.GRASHOF_DOUBLE_ROCKER",false]],"grashof_rocker_crank (pylinkage.synthesis.utils.grashoftype attribute)":[[18,"pylinkage.synthesis.utils.GrashofType.GRASHOF_ROCKER_CRANK",false]],"grashoftype (class in pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.GrashofType",false]],"ground (class in pylinkage.components.ground)":[[6,"pylinkage.components.ground.Ground",false]],"ground (pylinkage.assur.decomposition.decompositionresult attribute)":[[3,"pylinkage.assur.decomposition.DecompositionResult.ground",false]],"ground (pylinkage.mechanism.joint.jointtype attribute)":[[11,"pylinkage.mechanism.joint.JointType.GROUND",false]],"ground (pylinkage.mechanism.link.linktype attribute)":[[11,"pylinkage.mechanism.link.LinkType.GROUND",false]],"ground (pylinkage.mechanism.mechanism.mechanism attribute)":[[11,"pylinkage.mechanism.mechanism.Mechanism.ground",false]],"ground (pylinkage.visualizer.symbols.symboltype attribute)":[[21,"pylinkage.visualizer.symbols.SymbolType.GROUND",false]],"ground_length (pylinkage.synthesis.core.synthesisproblem attribute)":[[18,"pylinkage.synthesis.core.SynthesisProblem.ground_length",false]],"ground_nodes() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.ground_nodes",false]],"ground_nodes() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.ground_nodes",false]],"ground_pivot_a (pylinkage.synthesis.core.synthesisproblem attribute)":[[18,"pylinkage.synthesis.core.SynthesisProblem.ground_pivot_a",false]],"ground_pivot_d (pylinkage.synthesis.core.synthesisproblem attribute)":[[18,"pylinkage.synthesis.core.SynthesisProblem.ground_pivot_d",false]],"groundjoint (class in pylinkage.mechanism.joint)":[[11,"pylinkage.mechanism.joint.GroundJoint",false]],"groundlink (class in pylinkage.mechanism.link)":[[11,"pylinkage.mechanism.link.GroundLink",false]],"group_class (pylinkage.assur.groups.assurgroup property)":[[3,"pylinkage.assur.groups.AssurGroup.group_class",false]],"group_class (pylinkage.assur.groups.dyad property)":[[3,"pylinkage.assur.groups.Dyad.group_class",false]],"group_class (pylinkage.assur.groups.triad property)":[[3,"pylinkage.assur.groups.Triad.group_class",false]],"group_class (pylinkage.assur.signature.assursignature attribute)":[[3,"pylinkage.assur.signature.AssurSignature.group_class",false]],"group_index (pylinkage.synthesis.topology_types.groupsynthesisresult attribute)":[[18,"pylinkage.synthesis.topology_types.GroupSynthesisResult.group_index",false]],"group_results (pylinkage.synthesis.topology_types.nbarsolution attribute)":[[18,"pylinkage.synthesis.topology_types.NBarSolution.group_results",false]],"group_signature (pylinkage.synthesis.topology_types.groupsynthesisresult attribute)":[[18,"pylinkage.synthesis.topology_types.GroupSynthesisResult.group_signature",false]],"group_signatures (pylinkage.assur.analysis.structuralanalysis attribute)":[[3,"pylinkage.assur.analysis.StructuralAnalysis.group_signatures",false]],"groups (pylinkage.assur.decomposition.decompositionresult attribute)":[[3,"pylinkage.assur.decomposition.DecompositionResult.groups",false]],"groupsynthesisresult (class in pylinkage.synthesis.topology_types)":[[18,"pylinkage.synthesis.topology_types.GroupSynthesisResult",false]],"guide (pylinkage.dyads.translating_cam.translatingcamfollower attribute)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.guide",false]],"guide_angle (pylinkage.dyads.translating_cam.translatingcamfollower attribute)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.guide_angle",false]],"harmonicmotionlaw (class in pylinkage.cam.motion_laws)":[[5,"pylinkage.cam.motion_laws.HarmonicMotionLaw",false]],"has_nan_positions() (in module pylinkage.solver.simulation)":[[16,"pylinkage.solver.simulation.has_nan_positions",false]],"hierarchical_from_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.hierarchical_from_dict",false]],"hierarchical_from_json() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.hierarchical_from_json",false]],"hierarchical_to_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.hierarchical_to_dict",false]],"hierarchical_to_json() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.hierarchical_to_json",false]],"hierarchicallinkage (class in pylinkage.hypergraph.hierarchy)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage",false]],"hyperdegree() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.hyperdegree",false]],"hyperedge (class in pylinkage.hypergraph.core)":[[9,"pylinkage.hypergraph.core.Hyperedge",false]],"hyperedge_constraints (pylinkage.dimensions.dimensions attribute)":[[1,"pylinkage.dimensions.Dimensions.hyperedge_constraints",false]],"hyperedge_from_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.hyperedge_from_dict",false]],"hyperedge_neighbors() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.hyperedge_neighbors",false]],"hyperedge_to_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.hyperedge_to_dict",false]],"hyperedges (pylinkage.hypergraph.graph.hypergraphlinkage attribute)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.hyperedges",false]],"hypergraphlinkage (class in pylinkage.hypergraph.graph)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage",false]],"hypervolume() (pylinkage.optimization.collections.pareto.paretofront method)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.hypervolume",false]],"id (pylinkage.assur.graph.edge attribute)":[[3,"pylinkage.assur.graph.Edge.id",false]],"id (pylinkage.assur.graph.node attribute)":[[3,"pylinkage.assur.graph.Node.id",false]],"id (pylinkage.hypergraph.core.edge attribute)":[[9,"pylinkage.hypergraph.core.Edge.id",false]],"id (pylinkage.hypergraph.core.hyperedge attribute)":[[9,"pylinkage.hypergraph.core.Hyperedge.id",false]],"id (pylinkage.hypergraph.core.node attribute)":[[9,"pylinkage.hypergraph.core.Node.id",false]],"id (pylinkage.hypergraph.hierarchy.componentinstance attribute)":[[9,"pylinkage.hypergraph.hierarchy.ComponentInstance.id",false]],"id (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.id",false]],"id (pylinkage.mechanism.builder.pendingtracker attribute)":[[11,"pylinkage.mechanism.builder.PendingTracker.id",false]],"id (pylinkage.mechanism.builder.port attribute)":[[11,"pylinkage.mechanism.builder.Port.id",false]],"id (pylinkage.mechanism.builder.slideaxis attribute)":[[11,"pylinkage.mechanism.builder.SlideAxis.id",false]],"id (pylinkage.mechanism.joint.joint attribute)":[[11,"pylinkage.mechanism.joint.Joint.id",false]],"id (pylinkage.mechanism.link.link attribute)":[[11,"pylinkage.mechanism.link.Link.id",false]],"id (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.id",false]],"identify_dyad_type() (in module pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.identify_dyad_type",false]],"identify_group_type() (in module pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.identify_group_type",false]],"indeterminacy() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.indeterminacy",false]],"indeterminacy() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.indeterminacy",false]],"init_positions (pylinkage.optimization.collections.agent.agent property)":[[13,"pylinkage.optimization.collections.agent.Agent.init_positions",false]],"init_positions (pylinkage.optimization.collections.mutable_agent.mutableagent property)":[[13,"pylinkage.optimization.collections.mutable_agent.MutableAgent.init_positions",false]],"init_positions (pylinkage.optimization.collections.pareto.paretosolution property)":[[13,"pylinkage.optimization.collections.pareto.ParetoSolution.init_positions",false]],"initial_angle (pylinkage.actuators.arc_crank.arccrank attribute)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.initial_angle",false]],"initial_angle (pylinkage.actuators.crank.crank attribute)":[[2,"pylinkage.actuators.crank.Crank.initial_angle",false]],"initial_angle (pylinkage.dimensions.driverangle attribute)":[[1,"pylinkage.dimensions.DriverAngle.initial_angle",false]],"initial_angle (pylinkage.dyads.oscillating_cam.oscillatingcamfollower attribute)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.initial_angle",false]],"initial_angle (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.initial_angle",false]],"initial_angle (pylinkage.mechanism.link.arcdriverlink attribute)":[[11,"pylinkage.mechanism.link.ArcDriverLink.initial_angle",false]],"initial_angle (pylinkage.mechanism.link.driverlink attribute)":[[11,"pylinkage.mechanism.link.DriverLink.initial_angle",false]],"initial_extension (pylinkage.actuators.linear.linearactuator attribute)":[[2,"pylinkage.actuators.linear.LinearActuator.initial_extension",false]],"initial_positions (pylinkage.optimization.collections.mutable_agent.mutableagent attribute)":[[13,"pylinkage.optimization.collections.mutable_agent.MutableAgent.initial_positions",false]],"initial_positions (pylinkage.optimization.collections.pareto.paretosolution attribute)":[[13,"pylinkage.optimization.collections.pareto.ParetoSolution.initial_positions",false]],"instances (pylinkage.hypergraph.hierarchy.hierarchicallinkage attribute)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage.instances",false]],"interactive_linkage_plotly() (in module pylinkage.visualizer.plotly_viz)":[[21,"pylinkage.visualizer.plotly_viz.interactive_linkage_plotly",false]],"internal_edges (pylinkage.assur.groups.assurgroup attribute)":[[3,"pylinkage.assur.groups.AssurGroup.internal_edges",false]],"internal_nodes (pylinkage.assur.groups.assurgroup attribute)":[[3,"pylinkage.assur.groups.AssurGroup.internal_nodes",false]],"intersection() (in module pylinkage.geometry.secants)":[[8,"pylinkage.geometry.secants.intersection",false]],"is_acceptable (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.is_acceptable",false]],"is_arc_driver (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.is_arc_driver",false]],"is_complete (pylinkage.optimization.async_optimization.optimizationprogress attribute)":[[12,"pylinkage.optimization.async_optimization.OptimizationProgress.is_complete",false]],"is_crank_rocker() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.is_crank_rocker",false]],"is_defined() (pylinkage.mechanism.joint.joint method)":[[11,"pylinkage.mechanism.joint.Joint.is_defined",false]],"is_determinate (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.is_determinate",false]],"is_discrete (pylinkage.synthesis.core.burmestercurves attribute)":[[18,"pylinkage.synthesis.core.BurmesterCurves.is_discrete",false]],"is_driver (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.is_driver",false]],"is_grashof (pylinkage.synthesis.topology_types.qualitymetrics attribute)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics.is_grashof",false]],"is_grashof() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.is_grashof",false]],"is_ground (pylinkage.mechanism.joint.groundjoint attribute)":[[11,"pylinkage.mechanism.joint.GroundJoint.is_ground",false]],"is_ground (pylinkage.mechanism.link.groundlink attribute)":[[11,"pylinkage.mechanism.link.GroundLink.is_ground",false]],"is_ground_joint() (in module pylinkage.visualizer.symbols)":[[21,"pylinkage.visualizer.symbols.is_ground_joint",false]],"is_legacy_format() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.is_legacy_format",false]],"is_overconstrained (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.is_overconstrained",false]],"is_prismatic_like() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.is_prismatic_like",false]],"is_revolute_like() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.is_revolute_like",false]],"is_static_like() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.is_static_like",false]],"is_underconstrained (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.is_underconstrained",false]],"is_valid (pylinkage.assur.analysis.structuralanalysis property)":[[3,"pylinkage.assur.analysis.StructuralAnalysis.is_valid",false]],"is_valid() (pylinkage.assur.assur_mechanism.assurmechanism method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.is_valid",false]],"is_valid_mechanism (pylinkage.assur.analysis.mobilityresult property)":[[3,"pylinkage.assur.analysis.MobilityResult.is_valid_mechanism",false]],"isomer_to_canonical() (in module pylinkage.assur.signature)":[[3,"pylinkage.assur.signature.isomer_to_canonical",false]],"iterations (pylinkage.symbolic.optimization.optimizationresult attribute)":[[17,"pylinkage.symbolic.optimization.OptimizationResult.iterations",false]],"jacobian() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.jacobian",false]],"jacobian_theta() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.jacobian_theta",false]],"joint (class in pylinkage.mechanism.joint)":[[11,"pylinkage.mechanism.joint.Joint",false]],"joint_from_dict() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.joint_from_dict",false]],"joint_positions (pylinkage.synthesis.topology_types.groupsynthesisresult attribute)":[[18,"pylinkage.synthesis.topology_types.GroupSynthesisResult.joint_positions",false]],"joint_positions (pylinkage.synthesis.topology_types.nbarsolution attribute)":[[18,"pylinkage.synthesis.topology_types.NBarSolution.joint_positions",false]],"joint_signature (pylinkage.assur.groups.assurgroup property)":[[3,"pylinkage.assur.groups.AssurGroup.joint_signature",false]],"joint_signature (pylinkage.assur.groups.dyad property)":[[3,"pylinkage.assur.groups.Dyad.joint_signature",false]],"joint_signature (pylinkage.assur.groups.triad property)":[[3,"pylinkage.assur.groups.Triad.joint_signature",false]],"joint_to_dict() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.joint_to_dict",false]],"joint_type (pylinkage.assur.graph.node attribute)":[[3,"pylinkage.assur.graph.Node.joint_type",false]],"joint_type (pylinkage.hypergraph.core.node attribute)":[[9,"pylinkage.hypergraph.core.Node.joint_type",false]],"joint_type (pylinkage.mechanism.builder.connection attribute)":[[11,"pylinkage.mechanism.builder.Connection.joint_type",false]],"joint_type (pylinkage.mechanism.joint.groundjoint property)":[[11,"pylinkage.mechanism.joint.GroundJoint.joint_type",false]],"joint_type (pylinkage.mechanism.joint.joint property)":[[11,"pylinkage.mechanism.joint.Joint.joint_type",false]],"joint_type (pylinkage.mechanism.joint.prismaticjoint property)":[[11,"pylinkage.mechanism.joint.PrismaticJoint.joint_type",false]],"joint_type (pylinkage.mechanism.joint.revolutejoint property)":[[11,"pylinkage.mechanism.joint.RevoluteJoint.joint_type",false]],"joint_type (pylinkage.mechanism.joint.trackerjoint property)":[[11,"pylinkage.mechanism.joint.TrackerJoint.joint_type",false]],"joint_types (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.joint_types",false]],"jointprofile (class in pylinkage.visualizer.step_export)":[[21,"pylinkage.visualizer.step_export.JointProfile",false]],"joints (pylinkage.assur.signature.assursignature attribute)":[[3,"pylinkage.assur.signature.AssurSignature.joints",false]],"joints (pylinkage.mechanism.link.link attribute)":[[11,"pylinkage.mechanism.link.Link.joints",false]],"joints (pylinkage.mechanism.mechanism.mechanism attribute)":[[11,"pylinkage.mechanism.mechanism.Mechanism.joints",false]],"joints (pylinkage.symbolic.linkage.symboliclinkage attribute)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.joints",false]],"jointtype (class in pylinkage.mechanism.joint)":[[11,"pylinkage.mechanism.joint.JointType",false]],"kinematic_default_test() (in module pylinkage.linkage.analysis)":[[10,"pylinkage.linkage.analysis.kinematic_default_test",false]],"kinematic_maximization() (in module pylinkage.optimization.utils)":[[12,"pylinkage.optimization.utils.kinematic_maximization",false]],"kinematic_minimization() (in module pylinkage.optimization.utils)":[[12,"pylinkage.optimization.utils.kinematic_minimization",false]],"label_offset (pylinkage.visualizer.symbols.symbolspec attribute)":[[21,"pylinkage.visualizer.symbols.SymbolSpec.label_offset",false]],"length (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.length",false]],"length (pylinkage.mechanism.link.link property)":[[11,"pylinkage.mechanism.link.Link.length",false]],"length (pylinkage.visualizer.step_export.jointprofile attribute)":[[21,"pylinkage.visualizer.step_export.JointProfile.length",false]],"line (pylinkage.visualizer.symbols.linkstyle attribute)":[[21,"pylinkage.visualizer.symbols.LinkStyle.LINE",false]],"line1_anchor1 (pylinkage.dyads.pp.ppdyad attribute)":[[7,"pylinkage.dyads.pp.PPDyad.line1_anchor1",false]],"line1_anchor2 (pylinkage.dyads.pp.ppdyad attribute)":[[7,"pylinkage.dyads.pp.PPDyad.line1_anchor2",false]],"line2_anchor1 (pylinkage.dyads.pp.ppdyad attribute)":[[7,"pylinkage.dyads.pp.PPDyad.line2_anchor1",false]],"line2_anchor2 (pylinkage.dyads.pp.ppdyad attribute)":[[7,"pylinkage.dyads.pp.PPDyad.line2_anchor2",false]],"line2_node1 (pylinkage.assur.groups.dyad attribute)":[[3,"pylinkage.assur.groups.Dyad.line2_node1",false]],"line2_node2 (pylinkage.assur.groups.dyad attribute)":[[3,"pylinkage.assur.groups.Dyad.line2_node2",false]],"line_anchor1 (pylinkage.dyads.rrp.rrpdyad attribute)":[[7,"pylinkage.dyads.rrp.RRPDyad.line_anchor1",false]],"line_anchor2 (pylinkage.dyads.rrp.rrpdyad attribute)":[[7,"pylinkage.dyads.rrp.RRPDyad.line_anchor2",false]],"line_from_points() (in module pylinkage.geometry.core)":[[8,"pylinkage.geometry.core.line_from_points",false]],"line_line_intersection() (in module pylinkage.geometry.secants)":[[8,"pylinkage.geometry.secants.line_line_intersection",false]],"line_node1 (pylinkage.assur.groups.dyad attribute)":[[3,"pylinkage.assur.groups.Dyad.line_node1",false]],"line_node2 (pylinkage.assur.groups.dyad attribute)":[[3,"pylinkage.assur.groups.Dyad.line_node2",false]],"line_point (pylinkage.mechanism.joint.prismaticjoint attribute)":[[11,"pylinkage.mechanism.joint.PrismaticJoint.line_point",false]],"linear (pylinkage.visualizer.symbols.symboltype attribute)":[[21,"pylinkage.visualizer.symbols.SymbolType.LINEAR",false]],"linearactuator (class in pylinkage.actuators.linear)":[[2,"pylinkage.actuators.linear.LinearActuator",false]],"link (class in pylinkage.mechanism.link)":[[11,"pylinkage.mechanism.link.Link",false]],"link_assortment (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.link_assortment",false]],"link_from_dict() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.link_from_dict",false]],"link_length (pylinkage.synthesis.core.burmesterdyad property)":[[18,"pylinkage.synthesis.core.BurmesterDyad.link_length",false]],"link_lengths (pylinkage.synthesis.topology_types.nbarsolution attribute)":[[18,"pylinkage.synthesis.topology_types.NBarSolution.link_lengths",false]],"link_ratio (pylinkage.synthesis.topology_types.qualitymetrics attribute)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics.link_ratio",false]],"link_to_dict() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.link_to_dict",false]],"link_type (pylinkage.mechanism.link.arcdriverlink property)":[[11,"pylinkage.mechanism.link.ArcDriverLink.link_type",false]],"link_type (pylinkage.mechanism.link.driverlink property)":[[11,"pylinkage.mechanism.link.DriverLink.link_type",false]],"link_type (pylinkage.mechanism.link.groundlink property)":[[11,"pylinkage.mechanism.link.GroundLink.link_type",false]],"link_type (pylinkage.mechanism.link.link property)":[[11,"pylinkage.mechanism.link.Link.link_type",false]],"linkage (class in pylinkage.simulation.linkage)":[[15,"pylinkage.simulation.linkage.Linkage",false]],"linkage (pylinkage.optimization.co_optimization_types.cooptsolution attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptSolution.linkage",false]],"linkage (pylinkage.synthesis.topology_types.topologysolution attribute)":[[18,"pylinkage.synthesis.topology_types.TopologySolution.linkage",false]],"linkage_to_solver_data() (in module pylinkage.bridge.solver_conversion)":[[4,"pylinkage.bridge.solver_conversion.linkage_to_solver_data",false]],"linkage_to_synthesis_params() (in module pylinkage.synthesis.conversion)":[[18,"pylinkage.synthesis.conversion.linkage_to_synthesis_params",false]],"linkagegraph (class in pylinkage.assur.graph)":[[3,"pylinkage.assur.graph.LinkageGraph",false]],"linkageproblem (class in pylinkage.optimization.multi_objective)":[[12,"pylinkage.optimization.multi_objective.LinkageProblem",false]],"linkprofile (class in pylinkage.visualizer.step_export)":[[21,"pylinkage.visualizer.step_export.LinkProfile",false]],"links (pylinkage.mechanism.joint.joint property)":[[11,"pylinkage.mechanism.joint.Joint.links",false]],"links (pylinkage.mechanism.mechanism.mechanism attribute)":[[11,"pylinkage.mechanism.mechanism.Mechanism.links",false]],"linkstyle (class in pylinkage.visualizer.symbols)":[[21,"pylinkage.visualizer.symbols.LinkStyle",false]],"linktype (class in pylinkage.mechanism.link)":[[11,"pylinkage.mechanism.link.LinkType",false]],"load_builtin() (pylinkage.topology.catalog.topologycatalog class method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.load_builtin",false]],"load_catalog() (in module pylinkage.topology.catalog)":[[19,"pylinkage.topology.catalog.load_catalog",false]],"local_position (pylinkage.mechanism.builder.port attribute)":[[11,"pylinkage.mechanism.builder.Port.local_position",false]],"max_angle (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.max_angle",false]],"max_angle_step (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.max_angle_step",false]],"max_deviation (pylinkage.linkage.sensitivity.toleranceanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.max_deviation",false]],"max_deviation (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.max_deviation",false]],"max_links (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.max_links",false]],"max_orientation_candidates (in module pylinkage.synthesis.path_generation)":[[18,"pylinkage.synthesis.path_generation.MAX_ORIENTATION_CANDIDATES",false]],"max_position (pylinkage.linkage.transmission.strokeanalysis attribute)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.max_position",false]],"max_position_step (pylinkage.linkage.transmission.strokeanalysis attribute)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.max_position_step",false]],"mean_angle (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.mean_angle",false]],"mean_deviation (pylinkage.linkage.sensitivity.toleranceanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.mean_deviation",false]],"mean_position (pylinkage.linkage.transmission.strokeanalysis attribute)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.mean_position",false]],"mechanism (class in pylinkage.mechanism.mechanism)":[[11,"pylinkage.mechanism.mechanism.Mechanism",false]],"mechanism (pylinkage.assur.assur_mechanism.assurmechanism attribute)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.mechanism",false]],"mechanism_from_dict() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.mechanism_from_dict",false]],"mechanism_from_json() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.mechanism_from_json",false]],"mechanism_to_dict() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.mechanism_to_dict",false]],"mechanism_to_graph() (in module pylinkage.assur.mechanism_conversion)":[[3,"pylinkage.assur.mechanism_conversion.mechanism_to_graph",false]],"mechanism_to_json() (in module pylinkage.mechanism.serialization)":[[11,"pylinkage.mechanism.serialization.mechanism_to_json",false]],"mechanismbuilder (class in pylinkage.mechanism.builder)":[[11,"pylinkage.mechanism.builder.MechanismBuilder",false]],"message (pylinkage.symbolic.optimization.optimizationresult attribute)":[[17,"pylinkage.symbolic.optimization.OptimizationResult.message",false]],"metrics (pylinkage.synthesis.topology_types.topologysolution attribute)":[[18,"pylinkage.synthesis.topology_types.TopologySolution.metrics",false]],"min_angle (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.min_angle",false]],"min_angle_step (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.min_angle_step",false]],"min_deviation (pylinkage.linkage.transmission.transmissionangleanalysis attribute)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.min_deviation",false]],"min_position (pylinkage.linkage.transmission.strokeanalysis attribute)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.min_position",false]],"min_position_step (pylinkage.linkage.transmission.strokeanalysis attribute)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.min_position_step",false]],"min_transmission_angle (pylinkage.synthesis.topology_types.qualitymetrics attribute)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics.min_transmission_angle",false]],"minimize_linkage() (in module pylinkage.optimization.scipy_optimize)":[[12,"pylinkage.optimization.scipy_optimize.minimize_linkage",false]],"minimize_linkage_async() (in module pylinkage.optimization.async_optimization)":[[12,"pylinkage.optimization.async_optimization.minimize_linkage_async",false]],"mixedchromosome (class in pylinkage.optimization.co_optimization_types)":[[12,"pylinkage.optimization.co_optimization_types.MixedChromosome",false]],"mixedcrossover (class in pylinkage.optimization.operators)":[[12,"pylinkage.optimization.operators.MixedCrossover",false]],"mixedmutation (class in pylinkage.optimization.operators)":[[12,"pylinkage.optimization.operators.MixedMutation",false]],"mobility (pylinkage.assur.analysis.structuralanalysis attribute)":[[3,"pylinkage.assur.analysis.StructuralAnalysis.mobility",false]],"mobility_status (pylinkage.assur.analysis.mobilityresult property)":[[3,"pylinkage.assur.analysis.MobilityResult.mobility_status",false]],"mobilityinfo (class in pylinkage.topology.analysis)":[[19,"pylinkage.topology.analysis.MobilityInfo",false]],"mobilityresult (class in pylinkage.assur.analysis)":[[3,"pylinkage.assur.analysis.MobilityResult",false]],"modifiedtrapezoidalmotionlaw (class in pylinkage.cam.motion_laws)":[[5,"pylinkage.cam.motion_laws.ModifiedTrapezoidalMotionLaw",false]],"module":[[1,"module-pylinkage.dimensions",false],[1,"module-pylinkage.exceptions",false],[2,"module-pylinkage.actuators.arc_crank",false],[2,"module-pylinkage.actuators.crank",false],[2,"module-pylinkage.actuators.linear",false],[3,"module-pylinkage.assur.analysis",false],[3,"module-pylinkage.assur.assur_mechanism",false],[3,"module-pylinkage.assur.decomposition",false],[3,"module-pylinkage.assur.graph",false],[3,"module-pylinkage.assur.groups",false],[3,"module-pylinkage.assur.hypergraph_conversion",false],[3,"module-pylinkage.assur.mechanism_conversion",false],[3,"module-pylinkage.assur.serialization",false],[3,"module-pylinkage.assur.signature",false],[4,"module-pylinkage.bridge.solver_conversion",false],[5,"module-pylinkage.cam.motion_laws",false],[5,"module-pylinkage.cam.profiles",false],[6,"module-pylinkage.components.ground",false],[6,"module-pylinkage.components.point_tracker",false],[7,"module-pylinkage.dyads.factory",false],[7,"module-pylinkage.dyads.fixed",false],[7,"module-pylinkage.dyads.oscillating_cam",false],[7,"module-pylinkage.dyads.pp",false],[7,"module-pylinkage.dyads.rrp",false],[7,"module-pylinkage.dyads.rrr",false],[7,"module-pylinkage.dyads.translating_cam",false],[8,"module-pylinkage.geometry.core",false],[8,"module-pylinkage.geometry.secants",false],[9,"module-pylinkage.hypergraph.core",false],[9,"module-pylinkage.hypergraph.graph",false],[9,"module-pylinkage.hypergraph.hierarchy",false],[9,"module-pylinkage.hypergraph.mechanism_conversion",false],[9,"module-pylinkage.hypergraph.serialization",false],[9,"module-pylinkage.hypergraph.sim_conversion",false],[10,"module-pylinkage.linkage.analysis",false],[10,"module-pylinkage.linkage.sensitivity",false],[10,"module-pylinkage.linkage.transmission",false],[11,"module-pylinkage.mechanism.builder",false],[11,"module-pylinkage.mechanism.factories",false],[11,"module-pylinkage.mechanism.joint",false],[11,"module-pylinkage.mechanism.link",false],[11,"module-pylinkage.mechanism.mechanism",false],[11,"module-pylinkage.mechanism.serialization",false],[12,"module-pylinkage.optimization.async_optimization",false],[12,"module-pylinkage.optimization.co_optimization_types",false],[12,"module-pylinkage.optimization.grid_search",false],[12,"module-pylinkage.optimization.mixed_variable",false],[12,"module-pylinkage.optimization.multi_objective",false],[12,"module-pylinkage.optimization.operators",false],[12,"module-pylinkage.optimization.particle_swarm",false],[12,"module-pylinkage.optimization.scipy_optimize",false],[12,"module-pylinkage.optimization.topology_neighborhood",false],[12,"module-pylinkage.optimization.utils",false],[12,"module-pylinkage.optimization.warm_start",false],[13,"module-pylinkage.optimization.collections.agent",false],[13,"module-pylinkage.optimization.collections.mutable_agent",false],[13,"module-pylinkage.optimization.collections.pareto",false],[15,"module-pylinkage.simulation.linkage",false],[16,"module-pylinkage.solver.acceleration",false],[16,"module-pylinkage.solver.groups",false],[16,"module-pylinkage.solver.joints",false],[16,"module-pylinkage.solver.simulation",false],[16,"module-pylinkage.solver.solve",false],[16,"module-pylinkage.solver.types",false],[16,"module-pylinkage.solver.velocity",false],[17,"module-pylinkage.symbolic.conversion",false],[17,"module-pylinkage.symbolic.geometry",false],[17,"module-pylinkage.symbolic.joints",false],[17,"module-pylinkage.symbolic.linkage",false],[17,"module-pylinkage.symbolic.optimization",false],[17,"module-pylinkage.symbolic.solver",false],[18,"module-pylinkage.synthesis.burmester",false],[18,"module-pylinkage.synthesis.conversion",false],[18,"module-pylinkage.synthesis.core",false],[18,"module-pylinkage.synthesis.function_generation",false],[18,"module-pylinkage.synthesis.generalized",false],[18,"module-pylinkage.synthesis.motion_generation",false],[18,"module-pylinkage.synthesis.multi_topology",false],[18,"module-pylinkage.synthesis.path_generation",false],[18,"module-pylinkage.synthesis.ranking",false],[18,"module-pylinkage.synthesis.six_bar",false],[18,"module-pylinkage.synthesis.topology_types",false],[18,"module-pylinkage.synthesis.utils",false],[19,"module-pylinkage.topology.analysis",false],[19,"module-pylinkage.topology.catalog",false],[19,"module-pylinkage.topology.enumeration",false],[19,"module-pylinkage.topology.isomorphism",false],[21,"module-pylinkage.visualizer.animated",false],[21,"module-pylinkage.visualizer.core",false],[21,"module-pylinkage.visualizer.drawsvg_viz",false],[21,"module-pylinkage.visualizer.dxf_export",false],[21,"module-pylinkage.visualizer.kinematics",false],[21,"module-pylinkage.visualizer.plotly_viz",false],[21,"module-pylinkage.visualizer.pso_plots",false],[21,"module-pylinkage.visualizer.static",false],[21,"module-pylinkage.visualizer.step_export",false],[21,"module-pylinkage.visualizer.symbols",false]],"most_sensitive (pylinkage.linkage.sensitivity.sensitivityanalysis property)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.most_sensitive",false]],"motion_generation() (in module pylinkage.synthesis.motion_generation)":[[18,"pylinkage.synthesis.motion_generation.motion_generation",false]],"motion_generation_3_poses() (in module pylinkage.synthesis.motion_generation)":[[18,"pylinkage.synthesis.motion_generation.motion_generation_3_poses",false]],"motion_law (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.motion_law",false]],"motionlaw (class in pylinkage.cam.motion_laws)":[[5,"pylinkage.cam.motion_laws.MotionLaw",false]],"motor_joint (pylinkage.mechanism.link.arcdriverlink attribute)":[[11,"pylinkage.mechanism.link.ArcDriverLink.motor_joint",false]],"motor_joint (pylinkage.mechanism.link.driverlink attribute)":[[11,"pylinkage.mechanism.link.DriverLink.motor_joint",false]],"motor_port (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.motor_port",false]],"movement_bounding_box() (in module pylinkage.linkage.analysis)":[[10,"pylinkage.linkage.analysis.movement_bounding_box",false]],"multi_objective_optimization() (in module pylinkage.optimization.multi_objective)":[[12,"pylinkage.optimization.multi_objective.multi_objective_optimization",false]],"mutableagent (class in pylinkage.optimization.collections.mutable_agent)":[[13,"pylinkage.optimization.collections.mutable_agent.MutableAgent",false]],"n_constraints (pylinkage.solver.types.solverdata property)":[[16,"pylinkage.solver.types.SolverData.n_constraints",false]],"n_evaluations (pylinkage.optimization.co_optimization_types.cooptimizationresult attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationResult.n_evaluations",false]],"n_generations (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.n_generations",false]],"n_joints (pylinkage.solver.types.solverdata property)":[[16,"pylinkage.solver.types.SolverData.n_joints",false]],"n_objectives (pylinkage.optimization.collections.pareto.paretofront property)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.n_objectives",false]],"name (pylinkage.assur.graph.linkagegraph attribute)":[[3,"pylinkage.assur.graph.LinkageGraph.name",false]],"name (pylinkage.assur.graph.node attribute)":[[3,"pylinkage.assur.graph.Node.name",false]],"name (pylinkage.cam.profiles.camprofile attribute)":[[5,"pylinkage.cam.profiles.CamProfile.name",false]],"name (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.name",false]],"name (pylinkage.cam.profiles.pointarrayprofile attribute)":[[5,"pylinkage.cam.profiles.PointArrayProfile.name",false]],"name (pylinkage.dimensions.dimensions attribute)":[[1,"pylinkage.dimensions.Dimensions.name",false]],"name (pylinkage.hypergraph.core.hyperedge attribute)":[[9,"pylinkage.hypergraph.core.Hyperedge.name",false]],"name (pylinkage.hypergraph.core.node attribute)":[[9,"pylinkage.hypergraph.core.Node.name",false]],"name (pylinkage.hypergraph.graph.hypergraphlinkage attribute)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.name",false]],"name (pylinkage.hypergraph.hierarchy.componentinstance attribute)":[[9,"pylinkage.hypergraph.hierarchy.ComponentInstance.name",false]],"name (pylinkage.hypergraph.hierarchy.hierarchicallinkage attribute)":[[9,"pylinkage.hypergraph.hierarchy.HierarchicalLinkage.name",false]],"name (pylinkage.mechanism.builder.mechanismbuilder attribute)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.name",false]],"name (pylinkage.mechanism.joint.joint attribute)":[[11,"pylinkage.mechanism.joint.Joint.name",false]],"name (pylinkage.mechanism.link.link attribute)":[[11,"pylinkage.mechanism.link.Link.name",false]],"name (pylinkage.mechanism.mechanism.mechanism attribute)":[[11,"pylinkage.mechanism.mechanism.Mechanism.name",false]],"name (pylinkage.simulation.linkage.linkage attribute)":[[15,"pylinkage.simulation.linkage.Linkage.name",false]],"name (pylinkage.symbolic.joints.symjoint attribute)":[[17,"pylinkage.symbolic.joints.SymJoint.name",false]],"name (pylinkage.symbolic.linkage.symboliclinkage attribute)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.name",false]],"name (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.name",false]],"nbar_solution_to_linkage() (in module pylinkage.synthesis.conversion)":[[18,"pylinkage.synthesis.conversion.nbar_solution_to_linkage",false]],"nbarsolution (class in pylinkage.synthesis.topology_types)":[[18,"pylinkage.synthesis.topology_types.NBarSolution",false]],"neighbors() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.neighbors",false]],"neighbors() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.neighbors",false]],"node (class in pylinkage.assur.graph)":[[3,"pylinkage.assur.graph.Node",false]],"node (class in pylinkage.hypergraph.core)":[[9,"pylinkage.hypergraph.core.Node",false]],"node_from_dict() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.node_from_dict",false]],"node_from_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.node_from_dict",false]],"node_positions (pylinkage.dimensions.dimensions attribute)":[[1,"pylinkage.dimensions.Dimensions.node_positions",false]],"node_to_dict() (in module pylinkage.assur.serialization)":[[3,"pylinkage.assur.serialization.node_to_dict",false]],"node_to_dict() (in module pylinkage.hypergraph.serialization)":[[9,"pylinkage.hypergraph.serialization.node_to_dict",false]],"nodes (pylinkage.assur.graph.linkagegraph attribute)":[[3,"pylinkage.assur.graph.LinkageGraph.nodes",false]],"nodes (pylinkage.hypergraph.core.hyperedge attribute)":[[9,"pylinkage.hypergraph.core.Hyperedge.nodes",false]],"nodes (pylinkage.hypergraph.graph.hypergraphlinkage attribute)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.nodes",false]],"nominal_path (pylinkage.linkage.sensitivity.toleranceanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.nominal_path",false]],"non_grashof (pylinkage.synthesis.utils.grashoftype attribute)":[[18,"pylinkage.synthesis.utils.GrashofType.NON_GRASHOF",false]],"norm() (in module pylinkage.geometry.core)":[[8,"pylinkage.geometry.core.norm",false]],"normalize_angle() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.normalize_angle",false]],"normalize_data() (in module pylinkage.visualizer.pso_plots)":[[21,"pylinkage.visualizer.pso_plots.normalize_data",false]],"notcompletelydefinederror":[[1,"pylinkage.exceptions.NotCompletelyDefinedError",false]],"num_1dof_joints (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.num_1dof_joints",false]],"num_2dof_joints (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.num_2dof_joints",false]],"num_anchor_nodes (pylinkage.assur.signature.assursignature property)":[[3,"pylinkage.assur.signature.AssurSignature.num_anchor_nodes",false]],"num_assur_groups (pylinkage.assur.analysis.structuralanalysis attribute)":[[3,"pylinkage.assur.analysis.StructuralAnalysis.num_assur_groups",false]],"num_assur_groups (pylinkage.assur.assur_mechanism.assurmechanism property)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.num_assur_groups",false]],"num_driver_joints (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.num_driver_joints",false]],"num_driver_nodes (pylinkage.assur.assur_mechanism.assurmechanism property)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.num_driver_nodes",false]],"num_full_joints (pylinkage.topology.analysis.mobilityinfo attribute)":[[19,"pylinkage.topology.analysis.MobilityInfo.num_full_joints",false]],"num_ground_joints (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.num_ground_joints",false]],"num_ground_nodes (pylinkage.assur.assur_mechanism.assurmechanism property)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.num_ground_nodes",false]],"num_half_joints (pylinkage.topology.analysis.mobilityinfo attribute)":[[19,"pylinkage.topology.analysis.MobilityInfo.num_half_joints",false]],"num_internal_nodes (pylinkage.assur.signature.assursignature property)":[[3,"pylinkage.assur.signature.AssurSignature.num_internal_nodes",false]],"num_joints (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.num_joints",false]],"num_joints (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.num_joints",false]],"num_links (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.num_links",false]],"num_links (pylinkage.assur.signature.assursignature property)":[[3,"pylinkage.assur.signature.AssurSignature.num_links",false]],"num_links (pylinkage.synthesis.topology_types.qualitymetrics attribute)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics.num_links",false]],"num_links (pylinkage.topology.analysis.mobilityinfo attribute)":[[19,"pylinkage.topology.analysis.MobilityInfo.num_links",false]],"num_links (pylinkage.topology.catalog.catalogentry attribute)":[[19,"pylinkage.topology.catalog.CatalogEntry.num_links",false]],"num_precision_positions (pylinkage.synthesis.core.synthesisproblem property)":[[18,"pylinkage.synthesis.core.SynthesisProblem.num_precision_positions",false]],"objective_names (pylinkage.optimization.collections.pareto.paretofront attribute)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.objective_names",false]],"objective_value (pylinkage.symbolic.optimization.optimizationresult attribute)":[[17,"pylinkage.symbolic.optimization.OptimizationResult.objective_value",false]],"omega_values (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.omega_values",false]],"operation (pylinkage.optimization.topology_neighborhood.topologyneighbor attribute)":[[12,"pylinkage.optimization.topology_neighborhood.TopologyNeighbor.operation",false]],"optimizationerror":[[1,"pylinkage.exceptions.OptimizationError",false]],"optimizationprogress (class in pylinkage.optimization.async_optimization)":[[12,"pylinkage.optimization.async_optimization.OptimizationProgress",false]],"optimizationresult (class in pylinkage.symbolic.optimization)":[[17,"pylinkage.symbolic.optimization.OptimizationResult",false]],"optimize() (pylinkage.symbolic.optimization.symbolicoptimizer method)":[[17,"pylinkage.symbolic.optimization.SymbolicOptimizer.optimize",false]],"order (pylinkage.mechanism.link.link property)":[[11,"pylinkage.mechanism.link.Link.order",false]],"oscillatingcamfollower (class in pylinkage.dyads.oscillating_cam)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower",false]],"other_joint() (pylinkage.mechanism.link.link method)":[[11,"pylinkage.mechanism.link.Link.other_joint",false]],"other_node() (pylinkage.assur.graph.edge method)":[[3,"pylinkage.assur.graph.Edge.other_node",false]],"other_node() (pylinkage.hypergraph.core.edge method)":[[9,"pylinkage.hypergraph.core.Edge.other_node",false]],"output (pylinkage.actuators.arc_crank.arccrank property)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.output",false]],"output (pylinkage.actuators.crank.crank property)":[[2,"pylinkage.actuators.crank.Crank.output",false]],"output (pylinkage.actuators.linear.linearactuator property)":[[2,"pylinkage.actuators.linear.LinearActuator.output",false]],"output (pylinkage.dyads.oscillating_cam.oscillatingcamfollower property)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.output",false]],"output (pylinkage.dyads.translating_cam.translatingcamfollower property)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.output",false]],"output_cloud (pylinkage.linkage.sensitivity.toleranceanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.output_cloud",false]],"output_joint (pylinkage.mechanism.link.arcdriverlink property)":[[11,"pylinkage.mechanism.link.ArcDriverLink.output_joint",false]],"output_joint (pylinkage.mechanism.link.driverlink property)":[[11,"pylinkage.mechanism.link.DriverLink.output_joint",false]],"overall_score (pylinkage.synthesis.topology_types.qualitymetrics attribute)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics.overall_score",false]],"parallel_coordinates_plot() (in module pylinkage.visualizer.pso_plots)":[[21,"pylinkage.visualizer.pso_plots.parallel_coordinates_plot",false]],"parameter (pylinkage.synthesis.core.burmestercurves attribute)":[[18,"pylinkage.synthesis.core.BurmesterCurves.parameter",false]],"parameters (pylinkage.symbolic.joints.symcrank property)":[[17,"pylinkage.symbolic.joints.SymCrank.parameters",false]],"parameters (pylinkage.symbolic.joints.symjoint property)":[[17,"pylinkage.symbolic.joints.SymJoint.parameters",false]],"parameters (pylinkage.symbolic.joints.symrevolute property)":[[17,"pylinkage.symbolic.joints.SymRevolute.parameters",false]],"parameters (pylinkage.symbolic.linkage.symboliclinkage property)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.parameters",false]],"params (pylinkage.symbolic.optimization.optimizationresult attribute)":[[17,"pylinkage.symbolic.optimization.OptimizationResult.params",false]],"parent0 (pylinkage.symbolic.joints.symjoint attribute)":[[17,"pylinkage.symbolic.joints.SymJoint.parent0",false]],"parent1 (pylinkage.symbolic.joints.symjoint attribute)":[[17,"pylinkage.symbolic.joints.SymJoint.parent1",false]],"parent_indices (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.parent_indices",false]],"pareto_front (pylinkage.optimization.co_optimization_types.cooptimizationresult attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationResult.pareto_front",false]],"paretofront (class in pylinkage.optimization.collections.pareto)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront",false]],"paretosolution (class in pylinkage.optimization.collections.pareto)":[[13,"pylinkage.optimization.collections.pareto.ParetoSolution",false]],"parse_isomer_signature() (in module pylinkage.assur.signature)":[[3,"pylinkage.assur.signature.parse_isomer_signature",false]],"parse_signature() (in module pylinkage.assur.signature)":[[3,"pylinkage.assur.signature.parse_signature",false]],"particle_swarm_optimization() (in module pylinkage.optimization.particle_swarm)":[[12,"pylinkage.optimization.particle_swarm.particle_swarm_optimization",false]],"particle_swarm_optimization_async() (in module pylinkage.optimization.async_optimization)":[[12,"pylinkage.optimization.async_optimization.particle_swarm_optimization_async",false]],"path_accuracy (pylinkage.synthesis.topology_types.qualitymetrics attribute)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics.path_accuracy",false]],"path_generation() (in module pylinkage.synthesis.path_generation)":[[18,"pylinkage.synthesis.path_generation.path_generation",false]],"path_generation_with_timing() (in module pylinkage.synthesis.path_generation)":[[18,"pylinkage.synthesis.path_generation.path_generation_with_timing",false]],"pendinglink (class in pylinkage.mechanism.builder)":[[11,"pylinkage.mechanism.builder.PendingLink",false]],"pendingtracker (class in pylinkage.mechanism.builder)":[[11,"pylinkage.mechanism.builder.PendingTracker",false]],"perturbation_delta (pylinkage.linkage.sensitivity.sensitivityanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.perturbation_delta",false]],"perturbed_path_metrics (pylinkage.linkage.sensitivity.sensitivityanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.perturbed_path_metrics",false]],"perturbed_transmission (pylinkage.linkage.sensitivity.sensitivityanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.perturbed_transmission",false]],"pitch_radius() (pylinkage.cam.profiles.camprofile method)":[[5,"pylinkage.cam.profiles.CamProfile.pitch_radius",false]],"pivot_anchor (pylinkage.dyads.oscillating_cam.oscillatingcamfollower attribute)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.pivot_anchor",false]],"plot() (pylinkage.linkage.transmission.transmissionangleanalysis method)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.plot",false]],"plot() (pylinkage.optimization.collections.pareto.paretofront method)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.plot",false]],"plot_acceleration_vectors() (in module pylinkage.visualizer.kinematics)":[[21,"pylinkage.visualizer.kinematics.plot_acceleration_vectors",false]],"plot_cloud() (pylinkage.linkage.sensitivity.toleranceanalysis method)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.plot_cloud",false]],"plot_kinematic_linkage() (in module pylinkage.visualizer.animated)":[[21,"pylinkage.visualizer.animated.plot_kinematic_linkage",false]],"plot_kinematics_frame() (in module pylinkage.visualizer.kinematics)":[[21,"pylinkage.visualizer.kinematics.plot_kinematics_frame",false]],"plot_linkage_dxf() (in module pylinkage.visualizer.dxf_export)":[[21,"pylinkage.visualizer.dxf_export.plot_linkage_dxf",false]],"plot_linkage_plotly() (in module pylinkage.visualizer.plotly_viz)":[[21,"pylinkage.visualizer.plotly_viz.plot_linkage_plotly",false]],"plot_linkage_plotly_with_velocity() (in module pylinkage.visualizer.plotly_viz)":[[21,"pylinkage.visualizer.plotly_viz.plot_linkage_plotly_with_velocity",false]],"plot_linkage_svg() (in module pylinkage.visualizer.drawsvg_viz)":[[21,"pylinkage.visualizer.drawsvg_viz.plot_linkage_svg",false]],"plot_linkage_svg_with_velocity() (in module pylinkage.visualizer.drawsvg_viz)":[[21,"pylinkage.visualizer.drawsvg_viz.plot_linkage_svg_with_velocity",false]],"plot_static_linkage() (in module pylinkage.visualizer.static)":[[21,"pylinkage.visualizer.static.plot_static_linkage",false]],"plot_velocity_vectors() (in module pylinkage.visualizer.kinematics)":[[21,"pylinkage.visualizer.kinematics.plot_velocity_vectors",false]],"point (pylinkage.mechanism.builder.slideaxis attribute)":[[11,"pylinkage.mechanism.builder.SlideAxis.point",false]],"point_to_complex() (in module pylinkage.synthesis.burmester)":[[18,"pylinkage.synthesis.burmester.point_to_complex",false]],"point_to_complex() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.point_to_complex",false]],"pointarrayprofile (class in pylinkage.cam.profiles)":[[5,"pylinkage.cam.profiles.PointArrayProfile",false]],"pointtracker (class in pylinkage.components.point_tracker)":[[6,"pylinkage.components.point_tracker.PointTracker",false]],"polynomial_345() (in module pylinkage.cam.motion_laws)":[[5,"pylinkage.cam.motion_laws.polynomial_345",false]],"polynomial_4567() (in module pylinkage.cam.motion_laws)":[[5,"pylinkage.cam.motion_laws.polynomial_4567",false]],"polynomialmotionlaw (class in pylinkage.cam.motion_laws)":[[5,"pylinkage.cam.motion_laws.PolynomialMotionLaw",false]],"pop_size (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.pop_size",false]],"port (class in pylinkage.mechanism.builder)":[[11,"pylinkage.mechanism.builder.Port",false]],"port (pylinkage.mechanism.builder.prismaticconnection attribute)":[[11,"pylinkage.mechanism.builder.PrismaticConnection.port",false]],"port1 (pylinkage.mechanism.builder.connection attribute)":[[11,"pylinkage.mechanism.builder.Connection.port1",false]],"port2 (pylinkage.mechanism.builder.connection attribute)":[[11,"pylinkage.mechanism.builder.Connection.port2",false]],"port_geometry (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.port_geometry",false]],"ports (pylinkage.hypergraph.hierarchy.componentinstance attribute)":[[9,"pylinkage.hypergraph.hierarchy.ComponentInstance.ports",false]],"ports (pylinkage.mechanism.builder.pendinglink attribute)":[[11,"pylinkage.mechanism.builder.PendingLink.ports",false]],"poses (pylinkage.synthesis.core.synthesisproblem attribute)":[[18,"pylinkage.synthesis.core.SynthesisProblem.poses",false]],"position (pylinkage.mechanism.joint.joint attribute)":[[11,"pylinkage.mechanism.joint.Joint.position",false]],"position_expr() (pylinkage.symbolic.joints.symcrank method)":[[17,"pylinkage.symbolic.joints.SymCrank.position_expr",false]],"position_expr() (pylinkage.symbolic.joints.symjoint method)":[[17,"pylinkage.symbolic.joints.SymJoint.position_expr",false]],"position_expr() (pylinkage.symbolic.joints.symrevolute method)":[[17,"pylinkage.symbolic.joints.SymRevolute.position_expr",false]],"position_expr() (pylinkage.symbolic.joints.symstatic method)":[[17,"pylinkage.symbolic.joints.SymStatic.position_expr",false]],"position_std (pylinkage.linkage.sensitivity.toleranceanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.position_std",false]],"positions (pylinkage.linkage.transmission.strokeanalysis attribute)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.positions",false]],"positions (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.positions",false]],"ppdyad (class in pylinkage.dyads.pp)":[[7,"pylinkage.dyads.pp.PPDyad",false]],"precision_indices (pylinkage.synthesis.topology_types.groupsynthesisresult attribute)":[[18,"pylinkage.synthesis.topology_types.GroupSynthesisResult.precision_indices",false]],"precision_points (pylinkage.synthesis.core.synthesisproblem attribute)":[[18,"pylinkage.synthesis.core.SynthesisProblem.precision_points",false]],"pressure_angle() (pylinkage.cam.profiles.camprofile method)":[[5,"pylinkage.cam.profiles.CamProfile.pressure_angle",false]],"prismatic (pylinkage.mechanism.joint.jointtype attribute)":[[11,"pylinkage.mechanism.joint.JointType.PRISMATIC",false]],"prismaticconnection (class in pylinkage.mechanism.builder)":[[11,"pylinkage.mechanism.builder.PrismaticConnection",false]],"prismaticjoint (class in pylinkage.mechanism.joint)":[[11,"pylinkage.mechanism.joint.PrismaticJoint",false]],"problem (pylinkage.optimization.multi_objective.linkageproblem property)":[[12,"pylinkage.optimization.multi_objective.LinkageProblem.problem",false]],"problem (pylinkage.synthesis.core.synthesisresult attribute)":[[18,"pylinkage.synthesis.core.SynthesisResult.problem",false]],"profile (pylinkage.dyads.oscillating_cam.oscillatingcamfollower attribute)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.profile",false]],"profile (pylinkage.dyads.translating_cam.translatingcamfollower attribute)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.profile",false]],"profile_type (pylinkage.cam.motion_laws.cycloidalmotionlaw property)":[[5,"pylinkage.cam.motion_laws.CycloidalMotionLaw.profile_type",false]],"profile_type (pylinkage.cam.motion_laws.harmonicmotionlaw property)":[[5,"pylinkage.cam.motion_laws.HarmonicMotionLaw.profile_type",false]],"profile_type (pylinkage.cam.motion_laws.modifiedtrapezoidalmotionlaw property)":[[5,"pylinkage.cam.motion_laws.ModifiedTrapezoidalMotionLaw.profile_type",false]],"profile_type (pylinkage.cam.motion_laws.motionlaw property)":[[5,"pylinkage.cam.motion_laws.MotionLaw.profile_type",false]],"profile_type (pylinkage.cam.motion_laws.polynomialmotionlaw property)":[[5,"pylinkage.cam.motion_laws.PolynomialMotionLaw.profile_type",false]],"progress_fraction (pylinkage.optimization.async_optimization.optimizationprogress property)":[[12,"pylinkage.optimization.async_optimization.OptimizationProgress.progress_fraction",false]],"progresscallback (in module pylinkage.optimization.async_optimization)":[[12,"pylinkage.optimization.async_optimization.ProgressCallback",false]],"pylinkage.actuators.arc_crank":[[2,"module-pylinkage.actuators.arc_crank",false]],"pylinkage.actuators.crank":[[2,"module-pylinkage.actuators.crank",false]],"pylinkage.actuators.linear":[[2,"module-pylinkage.actuators.linear",false]],"pylinkage.assur.analysis":[[3,"module-pylinkage.assur.analysis",false]],"pylinkage.assur.assur_mechanism":[[3,"module-pylinkage.assur.assur_mechanism",false]],"pylinkage.assur.decomposition":[[3,"module-pylinkage.assur.decomposition",false]],"pylinkage.assur.graph":[[3,"module-pylinkage.assur.graph",false]],"pylinkage.assur.groups":[[3,"module-pylinkage.assur.groups",false]],"pylinkage.assur.hypergraph_conversion":[[3,"module-pylinkage.assur.hypergraph_conversion",false]],"pylinkage.assur.mechanism_conversion":[[3,"module-pylinkage.assur.mechanism_conversion",false]],"pylinkage.assur.serialization":[[3,"module-pylinkage.assur.serialization",false]],"pylinkage.assur.signature":[[3,"module-pylinkage.assur.signature",false]],"pylinkage.bridge.solver_conversion":[[4,"module-pylinkage.bridge.solver_conversion",false]],"pylinkage.cam.motion_laws":[[5,"module-pylinkage.cam.motion_laws",false]],"pylinkage.cam.profiles":[[5,"module-pylinkage.cam.profiles",false]],"pylinkage.components.ground":[[6,"module-pylinkage.components.ground",false]],"pylinkage.components.point_tracker":[[6,"module-pylinkage.components.point_tracker",false]],"pylinkage.dimensions":[[1,"module-pylinkage.dimensions",false]],"pylinkage.dyads.factory":[[7,"module-pylinkage.dyads.factory",false]],"pylinkage.dyads.fixed":[[7,"module-pylinkage.dyads.fixed",false]],"pylinkage.dyads.oscillating_cam":[[7,"module-pylinkage.dyads.oscillating_cam",false]],"pylinkage.dyads.pp":[[7,"module-pylinkage.dyads.pp",false]],"pylinkage.dyads.rrp":[[7,"module-pylinkage.dyads.rrp",false]],"pylinkage.dyads.rrr":[[7,"module-pylinkage.dyads.rrr",false]],"pylinkage.dyads.translating_cam":[[7,"module-pylinkage.dyads.translating_cam",false]],"pylinkage.exceptions":[[1,"module-pylinkage.exceptions",false]],"pylinkage.geometry.core":[[8,"module-pylinkage.geometry.core",false]],"pylinkage.geometry.secants":[[8,"module-pylinkage.geometry.secants",false]],"pylinkage.hypergraph.core":[[9,"module-pylinkage.hypergraph.core",false]],"pylinkage.hypergraph.graph":[[9,"module-pylinkage.hypergraph.graph",false]],"pylinkage.hypergraph.hierarchy":[[9,"module-pylinkage.hypergraph.hierarchy",false]],"pylinkage.hypergraph.mechanism_conversion":[[9,"module-pylinkage.hypergraph.mechanism_conversion",false]],"pylinkage.hypergraph.serialization":[[9,"module-pylinkage.hypergraph.serialization",false]],"pylinkage.hypergraph.sim_conversion":[[9,"module-pylinkage.hypergraph.sim_conversion",false]],"pylinkage.linkage.analysis":[[10,"module-pylinkage.linkage.analysis",false]],"pylinkage.linkage.sensitivity":[[10,"module-pylinkage.linkage.sensitivity",false]],"pylinkage.linkage.transmission":[[10,"module-pylinkage.linkage.transmission",false]],"pylinkage.mechanism.builder":[[11,"module-pylinkage.mechanism.builder",false]],"pylinkage.mechanism.factories":[[11,"module-pylinkage.mechanism.factories",false]],"pylinkage.mechanism.joint":[[11,"module-pylinkage.mechanism.joint",false]],"pylinkage.mechanism.link":[[11,"module-pylinkage.mechanism.link",false]],"pylinkage.mechanism.mechanism":[[11,"module-pylinkage.mechanism.mechanism",false]],"pylinkage.mechanism.serialization":[[11,"module-pylinkage.mechanism.serialization",false]],"pylinkage.optimization.async_optimization":[[12,"module-pylinkage.optimization.async_optimization",false]],"pylinkage.optimization.co_optimization_types":[[12,"module-pylinkage.optimization.co_optimization_types",false]],"pylinkage.optimization.collections.agent":[[13,"module-pylinkage.optimization.collections.agent",false]],"pylinkage.optimization.collections.mutable_agent":[[13,"module-pylinkage.optimization.collections.mutable_agent",false]],"pylinkage.optimization.collections.pareto":[[13,"module-pylinkage.optimization.collections.pareto",false]],"pylinkage.optimization.grid_search":[[12,"module-pylinkage.optimization.grid_search",false]],"pylinkage.optimization.mixed_variable":[[12,"module-pylinkage.optimization.mixed_variable",false]],"pylinkage.optimization.multi_objective":[[12,"module-pylinkage.optimization.multi_objective",false]],"pylinkage.optimization.operators":[[12,"module-pylinkage.optimization.operators",false]],"pylinkage.optimization.particle_swarm":[[12,"module-pylinkage.optimization.particle_swarm",false]],"pylinkage.optimization.scipy_optimize":[[12,"module-pylinkage.optimization.scipy_optimize",false]],"pylinkage.optimization.topology_neighborhood":[[12,"module-pylinkage.optimization.topology_neighborhood",false]],"pylinkage.optimization.utils":[[12,"module-pylinkage.optimization.utils",false]],"pylinkage.optimization.warm_start":[[12,"module-pylinkage.optimization.warm_start",false]],"pylinkage.simulation.linkage":[[15,"module-pylinkage.simulation.linkage",false]],"pylinkage.solver.acceleration":[[16,"module-pylinkage.solver.acceleration",false]],"pylinkage.solver.groups":[[16,"module-pylinkage.solver.groups",false]],"pylinkage.solver.joints":[[16,"module-pylinkage.solver.joints",false]],"pylinkage.solver.simulation":[[16,"module-pylinkage.solver.simulation",false]],"pylinkage.solver.solve":[[16,"module-pylinkage.solver.solve",false]],"pylinkage.solver.types":[[16,"module-pylinkage.solver.types",false]],"pylinkage.solver.velocity":[[16,"module-pylinkage.solver.velocity",false]],"pylinkage.symbolic.conversion":[[17,"module-pylinkage.symbolic.conversion",false]],"pylinkage.symbolic.geometry":[[17,"module-pylinkage.symbolic.geometry",false]],"pylinkage.symbolic.joints":[[17,"module-pylinkage.symbolic.joints",false]],"pylinkage.symbolic.linkage":[[17,"module-pylinkage.symbolic.linkage",false]],"pylinkage.symbolic.optimization":[[17,"module-pylinkage.symbolic.optimization",false]],"pylinkage.symbolic.solver":[[17,"module-pylinkage.symbolic.solver",false]],"pylinkage.synthesis.burmester":[[18,"module-pylinkage.synthesis.burmester",false]],"pylinkage.synthesis.conversion":[[18,"module-pylinkage.synthesis.conversion",false]],"pylinkage.synthesis.core":[[18,"module-pylinkage.synthesis.core",false]],"pylinkage.synthesis.function_generation":[[18,"module-pylinkage.synthesis.function_generation",false]],"pylinkage.synthesis.generalized":[[18,"module-pylinkage.synthesis.generalized",false]],"pylinkage.synthesis.motion_generation":[[18,"module-pylinkage.synthesis.motion_generation",false]],"pylinkage.synthesis.multi_topology":[[18,"module-pylinkage.synthesis.multi_topology",false]],"pylinkage.synthesis.path_generation":[[18,"module-pylinkage.synthesis.path_generation",false]],"pylinkage.synthesis.ranking":[[18,"module-pylinkage.synthesis.ranking",false]],"pylinkage.synthesis.six_bar":[[18,"module-pylinkage.synthesis.six_bar",false]],"pylinkage.synthesis.topology_types":[[18,"module-pylinkage.synthesis.topology_types",false]],"pylinkage.synthesis.utils":[[18,"module-pylinkage.synthesis.utils",false]],"pylinkage.topology.analysis":[[19,"module-pylinkage.topology.analysis",false]],"pylinkage.topology.catalog":[[19,"module-pylinkage.topology.catalog",false]],"pylinkage.topology.enumeration":[[19,"module-pylinkage.topology.enumeration",false]],"pylinkage.topology.isomorphism":[[19,"module-pylinkage.topology.isomorphism",false]],"pylinkage.visualizer.animated":[[21,"module-pylinkage.visualizer.animated",false]],"pylinkage.visualizer.core":[[21,"module-pylinkage.visualizer.core",false]],"pylinkage.visualizer.drawsvg_viz":[[21,"module-pylinkage.visualizer.drawsvg_viz",false]],"pylinkage.visualizer.dxf_export":[[21,"module-pylinkage.visualizer.dxf_export",false]],"pylinkage.visualizer.kinematics":[[21,"module-pylinkage.visualizer.kinematics",false]],"pylinkage.visualizer.plotly_viz":[[21,"module-pylinkage.visualizer.plotly_viz",false]],"pylinkage.visualizer.pso_plots":[[21,"module-pylinkage.visualizer.pso_plots",false]],"pylinkage.visualizer.static":[[21,"module-pylinkage.visualizer.static",false]],"pylinkage.visualizer.step_export":[[21,"module-pylinkage.visualizer.step_export",false]],"pylinkage.visualizer.symbols":[[21,"module-pylinkage.visualizer.symbols",false]],"qualitymetrics (class in pylinkage.synthesis.topology_types)":[[18,"pylinkage.synthesis.topology_types.QualityMetrics",false]],"quaternary (pylinkage.mechanism.link.linktype attribute)":[[11,"pylinkage.mechanism.link.LinkType.QUATERNARY",false]],"r (pylinkage.symbolic.joints.symcrank attribute)":[[17,"pylinkage.symbolic.joints.SymCrank.r",false]],"r0 (pylinkage.symbolic.joints.symrevolute attribute)":[[17,"pylinkage.symbolic.joints.SymRevolute.r0",false]],"r1 (pylinkage.symbolic.joints.symrevolute attribute)":[[17,"pylinkage.symbolic.joints.SymRevolute.r1",false]],"radii (pylinkage.cam.profiles.pointarrayprofile property)":[[5,"pylinkage.cam.profiles.PointArrayProfile.radii",false]],"radius (pylinkage.actuators.arc_crank.arccrank attribute)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.radius",false]],"radius (pylinkage.actuators.crank.crank attribute)":[[2,"pylinkage.actuators.crank.Crank.radius",false]],"radius (pylinkage.mechanism.link.arcdriverlink property)":[[11,"pylinkage.mechanism.link.ArcDriverLink.radius",false]],"radius (pylinkage.mechanism.link.driverlink property)":[[11,"pylinkage.mechanism.link.DriverLink.radius",false]],"radius (pylinkage.visualizer.step_export.jointprofile attribute)":[[21,"pylinkage.visualizer.step_export.JointProfile.radius",false]],"rank_solutions() (in module pylinkage.synthesis.multi_topology)":[[18,"pylinkage.synthesis.multi_topology.rank_solutions",false]],"raw_solutions (pylinkage.synthesis.core.synthesisresult attribute)":[[18,"pylinkage.synthesis.core.SynthesisResult.raw_solutions",false]],"raw_string (pylinkage.assur.signature.assursignature attribute)":[[3,"pylinkage.assur.signature.AssurSignature.raw_string",false]],"read_angle() (pylinkage.mechanism.link.arcdriverlink method)":[[11,"pylinkage.mechanism.link.ArcDriverLink.read_angle",false]],"read_angle() (pylinkage.mechanism.link.driverlink method)":[[11,"pylinkage.mechanism.link.DriverLink.read_angle",false]],"rebuild() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.rebuild",false]],"rebuild() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.rebuild",false]],"ref_joint1_id (pylinkage.mechanism.joint.trackerjoint attribute)":[[11,"pylinkage.mechanism.joint.TrackerJoint.ref_joint1_id",false]],"ref_joint2_id (pylinkage.mechanism.joint.trackerjoint attribute)":[[11,"pylinkage.mechanism.joint.TrackerJoint.ref_joint2_id",false]],"ref_port1 (pylinkage.mechanism.builder.pendingtracker attribute)":[[11,"pylinkage.mechanism.builder.PendingTracker.ref_port1",false]],"ref_port2 (pylinkage.mechanism.builder.pendingtracker attribute)":[[11,"pylinkage.mechanism.builder.PendingTracker.ref_port2",false]],"reload() (pylinkage.actuators.arc_crank.arccrank method)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.reload",false]],"reload() (pylinkage.actuators.crank.crank method)":[[2,"pylinkage.actuators.crank.Crank.reload",false]],"reload() (pylinkage.actuators.linear.linearactuator method)":[[2,"pylinkage.actuators.linear.LinearActuator.reload",false]],"reload() (pylinkage.components.ground.ground method)":[[6,"pylinkage.components.ground.Ground.reload",false]],"reload() (pylinkage.components.point_tracker.pointtracker method)":[[6,"pylinkage.components.point_tracker.PointTracker.reload",false]],"reload() (pylinkage.dyads.fixed.fixeddyad method)":[[7,"pylinkage.dyads.fixed.FixedDyad.reload",false]],"reload() (pylinkage.dyads.oscillating_cam.oscillatingcamfollower method)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.reload",false]],"reload() (pylinkage.dyads.pp.ppdyad method)":[[7,"pylinkage.dyads.pp.PPDyad.reload",false]],"reload() (pylinkage.dyads.rrp.rrpdyad method)":[[7,"pylinkage.dyads.rrp.RRPDyad.reload",false]],"reload() (pylinkage.dyads.rrr.rrrdyad method)":[[7,"pylinkage.dyads.rrr.RRRDyad.reload",false]],"reload() (pylinkage.dyads.translating_cam.translatingcamfollower method)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.reload",false]],"remove_edge() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.remove_edge",false]],"remove_edge() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.remove_edge",false]],"remove_hyperedge() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.remove_hyperedge",false]],"remove_node() (pylinkage.assur.graph.linkagegraph method)":[[3,"pylinkage.assur.graph.LinkageGraph.remove_node",false]],"remove_node() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.remove_node",false]],"reset() (pylinkage.assur.assur_mechanism.assurmechanism method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.reset",false]],"reset() (pylinkage.mechanism.link.arcdriverlink method)":[[11,"pylinkage.mechanism.link.ArcDriverLink.reset",false]],"reset() (pylinkage.mechanism.link.driverlink method)":[[11,"pylinkage.mechanism.link.DriverLink.reset",false]],"reset() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.reset",false]],"residual (pylinkage.synthesis.topology_types.groupsynthesisresult attribute)":[[18,"pylinkage.synthesis.topology_types.GroupSynthesisResult.residual",false]],"resolve_component() (in module pylinkage.visualizer.core)":[[21,"pylinkage.visualizer.core.resolve_component",false]],"revolute (pylinkage.mechanism.joint.jointtype attribute)":[[11,"pylinkage.mechanism.joint.JointType.REVOLUTE",false]],"revolute (pylinkage.visualizer.symbols.symboltype attribute)":[[21,"pylinkage.visualizer.symbols.SymbolType.REVOLUTE",false]],"revolute_anchor (pylinkage.dyads.rrp.rrpdyad attribute)":[[7,"pylinkage.dyads.rrp.RRPDyad.revolute_anchor",false]],"revolutejoint (class in pylinkage.mechanism.joint)":[[11,"pylinkage.mechanism.joint.RevoluteJoint",false]],"rise_end (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.rise_end",false]],"rise_start (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.rise_start",false]],"role (pylinkage.assur.graph.node attribute)":[[3,"pylinkage.assur.graph.Node.role",false]],"role (pylinkage.hypergraph.core.node attribute)":[[9,"pylinkage.hypergraph.core.Node.role",false]],"roller_radius (pylinkage.dyads.oscillating_cam.oscillatingcamfollower attribute)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.roller_radius",false]],"roller_radius (pylinkage.dyads.translating_cam.translatingcamfollower attribute)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.roller_radius",false]],"rotate_point() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.rotate_point",false]],"rotation_matrix_2d() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.rotation_matrix_2d",false]],"rrpdyad (class in pylinkage.dyads.rrp)":[[7,"pylinkage.dyads.rrp.RRPDyad",false]],"rrrdyad (class in pylinkage.dyads.rrr)":[[7,"pylinkage.dyads.rrr.RRRDyad",false]],"sample() (pylinkage.synthesis.core.burmestercurves method)":[[18,"pylinkage.synthesis.core.BurmesterCurves.sample",false]],"save_linkage_dxf() (in module pylinkage.visualizer.dxf_export)":[[21,"pylinkage.visualizer.dxf_export.save_linkage_dxf",false]],"save_linkage_step() (in module pylinkage.visualizer.step_export)":[[21,"pylinkage.visualizer.step_export.save_linkage_step",false]],"save_linkage_svg() (in module pylinkage.visualizer.drawsvg_viz)":[[21,"pylinkage.visualizer.drawsvg_viz.save_linkage_svg",false]],"save_linkage_svg_with_velocity() (in module pylinkage.visualizer.drawsvg_viz)":[[21,"pylinkage.visualizer.drawsvg_viz.save_linkage_svg_with_velocity",false]],"score (pylinkage.optimization.collections.mutable_agent.mutableagent attribute)":[[13,"pylinkage.optimization.collections.mutable_agent.MutableAgent.score",false]],"score_solution() (in module pylinkage.synthesis.ranking)":[[18,"pylinkage.synthesis.ranking.score_solution",false]],"scores (pylinkage.optimization.co_optimization_types.cooptsolution attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptSolution.scores",false]],"scores (pylinkage.optimization.collections.pareto.paretosolution attribute)":[[13,"pylinkage.optimization.collections.pareto.ParetoSolution.scores",false]],"scores_array() (pylinkage.optimization.collections.pareto.paretofront method)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.scores_array",false]],"seed (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.seed",false]],"select_compatible_dyads() (in module pylinkage.synthesis.burmester)":[[18,"pylinkage.synthesis.burmester.select_compatible_dyads",false]],"sensitivities (pylinkage.linkage.sensitivity.sensitivityanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.sensitivities",false]],"sensitivity_ranking (pylinkage.linkage.sensitivity.sensitivityanalysis property)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.sensitivity_ranking",false]],"sensitivityanalysis (class in pylinkage.linkage.sensitivity)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis",false]],"sequential_variator() (in module pylinkage.optimization.grid_search)":[[12,"pylinkage.optimization.grid_search.sequential_variator",false]],"set_branch() (pylinkage.mechanism.builder.mechanismbuilder method)":[[11,"pylinkage.mechanism.builder.MechanismBuilder.set_branch",false]],"set_completely() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.set_completely",false]],"set_completely() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.set_completely",false]],"set_constraints() (pylinkage.actuators.arc_crank.arccrank method)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.set_constraints",false]],"set_constraints() (pylinkage.actuators.crank.crank method)":[[2,"pylinkage.actuators.crank.Crank.set_constraints",false]],"set_constraints() (pylinkage.actuators.linear.linearactuator method)":[[2,"pylinkage.actuators.linear.LinearActuator.set_constraints",false]],"set_constraints() (pylinkage.cam.profiles.camprofile method)":[[5,"pylinkage.cam.profiles.CamProfile.set_constraints",false]],"set_constraints() (pylinkage.cam.profiles.functionprofile method)":[[5,"pylinkage.cam.profiles.FunctionProfile.set_constraints",false]],"set_constraints() (pylinkage.cam.profiles.pointarrayprofile method)":[[5,"pylinkage.cam.profiles.PointArrayProfile.set_constraints",false]],"set_constraints() (pylinkage.components.ground.ground method)":[[6,"pylinkage.components.ground.Ground.set_constraints",false]],"set_constraints() (pylinkage.components.point_tracker.pointtracker method)":[[6,"pylinkage.components.point_tracker.PointTracker.set_constraints",false]],"set_constraints() (pylinkage.dyads.fixed.fixeddyad method)":[[7,"pylinkage.dyads.fixed.FixedDyad.set_constraints",false]],"set_constraints() (pylinkage.dyads.oscillating_cam.oscillatingcamfollower method)":[[7,"pylinkage.dyads.oscillating_cam.OscillatingCamFollower.set_constraints",false]],"set_constraints() (pylinkage.dyads.pp.ppdyad method)":[[7,"pylinkage.dyads.pp.PPDyad.set_constraints",false]],"set_constraints() (pylinkage.dyads.rrp.rrpdyad method)":[[7,"pylinkage.dyads.rrp.RRPDyad.set_constraints",false]],"set_constraints() (pylinkage.dyads.rrr.rrrdyad method)":[[7,"pylinkage.dyads.rrr.RRRDyad.set_constraints",false]],"set_constraints() (pylinkage.dyads.translating_cam.translatingcamfollower method)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower.set_constraints",false]],"set_constraints() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.set_constraints",false]],"set_constraints() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.set_constraints",false]],"set_coord() (pylinkage.actuators.arc_crank.arccrank method)":[[2,"pylinkage.actuators.arc_crank.ArcCrank.set_coord",false]],"set_coord() (pylinkage.actuators.linear.linearactuator method)":[[2,"pylinkage.actuators.linear.LinearActuator.set_coord",false]],"set_coord() (pylinkage.mechanism.joint.joint method)":[[11,"pylinkage.mechanism.joint.Joint.set_coord",false]],"set_coords() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.set_coords",false]],"set_coords() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.set_coords",false]],"set_distance() (pylinkage.mechanism.link.link method)":[[11,"pylinkage.mechanism.link.Link.set_distance",false]],"set_input_velocity() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.set_input_velocity",false]],"set_input_velocity() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.set_input_velocity",false]],"set_joint_positions() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.set_joint_positions",false]],"show_kinematics() (in module pylinkage.visualizer.kinematics)":[[21,"pylinkage.visualizer.kinematics.show_kinematics",false]],"show_linkage() (in module pylinkage.visualizer.animated)":[[21,"pylinkage.visualizer.animated.show_linkage",false]],"signature_to_group_class() (in module pylinkage.assur.signature)":[[3,"pylinkage.assur.signature.signature_to_group_class",false]],"signature_to_hypergraph() (in module pylinkage.assur.signature)":[[3,"pylinkage.assur.signature.signature_to_hypergraph",false]],"simplify() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.simplify",false]],"simulate() (in module pylinkage.solver.simulation)":[[16,"pylinkage.solver.simulation.simulate",false]],"simulate_with_kinematics() (in module pylinkage.solver.simulation)":[[16,"pylinkage.solver.simulation.simulate_with_kinematics",false]],"simulation() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.simulation",false]],"simulation() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.simulation",false]],"six_bar_path_generation() (in module pylinkage.synthesis.six_bar)":[[18,"pylinkage.synthesis.six_bar.six_bar_path_generation",false]],"size (pylinkage.visualizer.symbols.symbolspec attribute)":[[21,"pylinkage.visualizer.symbols.SymbolSpec.size",false]],"slide_distance (pylinkage.mechanism.joint.prismaticjoint attribute)":[[11,"pylinkage.mechanism.joint.PrismaticJoint.slide_distance",false]],"slideaxis (class in pylinkage.mechanism.builder)":[[11,"pylinkage.mechanism.builder.SlideAxis",false]],"slider (pylinkage.visualizer.symbols.symboltype attribute)":[[21,"pylinkage.visualizer.symbols.SymbolType.SLIDER",false]],"slider_crank() (in module pylinkage.mechanism.factories)":[[11,"pylinkage.mechanism.factories.slider_crank",false]],"solution (pylinkage.synthesis.topology_types.topologysolution attribute)":[[18,"pylinkage.synthesis.topology_types.TopologySolution.solution",false]],"solution_to_linkage() (in module pylinkage.synthesis.conversion)":[[18,"pylinkage.synthesis.conversion.solution_to_linkage",false]],"solutions (pylinkage.optimization.co_optimization_types.cooptimizationresult attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationResult.solutions",false]],"solutions (pylinkage.optimization.collections.pareto.paretofront attribute)":[[13,"pylinkage.optimization.collections.pareto.ParetoFront.solutions",false]],"solutions (pylinkage.synthesis.core.synthesisresult attribute)":[[18,"pylinkage.synthesis.core.SynthesisResult.solutions",false]],"solutions_to_linkages() (in module pylinkage.synthesis.conversion)":[[18,"pylinkage.synthesis.conversion.solutions_to_linkages",false]],"solve_arc_crank() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_arc_crank",false]],"solve_crank() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_crank",false]],"solve_crank_acceleration() (in module pylinkage.solver.acceleration)":[[16,"pylinkage.solver.acceleration.solve_crank_acceleration",false]],"solve_crank_velocity() (in module pylinkage.solver.velocity)":[[16,"pylinkage.solver.velocity.solve_crank_velocity",false]],"solve_decomposition() (in module pylinkage.solver.solve)":[[16,"pylinkage.solver.solve.solve_decomposition",false]],"solve_fixed() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_fixed",false]],"solve_fixed_acceleration() (in module pylinkage.solver.acceleration)":[[16,"pylinkage.solver.acceleration.solve_fixed_acceleration",false]],"solve_fixed_velocity() (in module pylinkage.solver.velocity)":[[16,"pylinkage.solver.velocity.solve_fixed_velocity",false]],"solve_freudenstein_3_positions() (in module pylinkage.synthesis.function_generation)":[[18,"pylinkage.synthesis.function_generation.solve_freudenstein_3_positions",false]],"solve_freudenstein_least_squares() (in module pylinkage.synthesis.function_generation)":[[18,"pylinkage.synthesis.function_generation.solve_freudenstein_least_squares",false]],"solve_group() (in module pylinkage.solver.solve)":[[16,"pylinkage.solver.solve.solve_group",false]],"solve_line_line() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_line_line",false]],"solve_linear() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_linear",false]],"solve_linear_actuator() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_linear_actuator",false]],"solve_linkage_symbolically() (in module pylinkage.symbolic.solver)":[[17,"pylinkage.symbolic.solver.solve_linkage_symbolically",false]],"solve_order (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.solve_order",false]],"solve_order() (pylinkage.assur.decomposition.decompositionresult method)":[[3,"pylinkage.assur.decomposition.DecompositionResult.solve_order",false]],"solve_oscillating_cam_follower() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_oscillating_cam_follower",false]],"solve_pp_dyad() (in module pylinkage.solver.groups)":[[16,"pylinkage.solver.groups.solve_pp_dyad",false]],"solve_prismatic_acceleration() (in module pylinkage.solver.acceleration)":[[16,"pylinkage.solver.acceleration.solve_prismatic_acceleration",false]],"solve_prismatic_velocity() (in module pylinkage.solver.velocity)":[[16,"pylinkage.solver.velocity.solve_prismatic_velocity",false]],"solve_revolute() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_revolute",false]],"solve_revolute_acceleration() (in module pylinkage.solver.acceleration)":[[16,"pylinkage.solver.acceleration.solve_revolute_acceleration",false]],"solve_revolute_velocity() (in module pylinkage.solver.velocity)":[[16,"pylinkage.solver.velocity.solve_revolute_velocity",false]],"solve_rigid_body_acceleration() (in module pylinkage.solver.acceleration)":[[16,"pylinkage.solver.acceleration.solve_rigid_body_acceleration",false]],"solve_rigid_body_velocity() (in module pylinkage.solver.velocity)":[[16,"pylinkage.solver.velocity.solve_rigid_body_velocity",false]],"solve_rrp_dyad() (in module pylinkage.solver.groups)":[[16,"pylinkage.solver.groups.solve_rrp_dyad",false]],"solve_rrr_dyad() (in module pylinkage.solver.groups)":[[16,"pylinkage.solver.groups.solve_rrr_dyad",false]],"solve_translating_cam_follower() (in module pylinkage.solver.joints)":[[16,"pylinkage.solver.joints.solve_translating_cam_follower",false]],"solve_triad() (in module pylinkage.solver.groups)":[[16,"pylinkage.solver.groups.solve_triad",false]],"solver_category (pylinkage.assur.groups.assurgroup property)":[[3,"pylinkage.assur.groups.AssurGroup.solver_category",false]],"solver_data_to_linkage() (in module pylinkage.bridge.solver_conversion)":[[4,"pylinkage.bridge.solver_conversion.solver_data_to_linkage",false]],"solverdata (class in pylinkage.solver.types)":[[16,"pylinkage.solver.types.SolverData",false]],"source (pylinkage.assur.graph.edge attribute)":[[3,"pylinkage.assur.graph.Edge.source",false]],"source (pylinkage.hypergraph.core.edge attribute)":[[9,"pylinkage.hypergraph.core.Edge.source",false]],"speed (pylinkage.actuators.linear.linearactuator attribute)":[[2,"pylinkage.actuators.linear.LinearActuator.speed",false]],"sqr_dist() (in module pylinkage.geometry.core)":[[8,"pylinkage.geometry.core.sqr_dist",false]],"std_deviation (pylinkage.linkage.sensitivity.toleranceanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.std_deviation",false]],"step() (pylinkage.assur.assur_mechanism.assurmechanism method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.step",false]],"step() (pylinkage.mechanism.link.arcdriverlink method)":[[11,"pylinkage.mechanism.link.ArcDriverLink.step",false]],"step() (pylinkage.mechanism.link.driverlink method)":[[11,"pylinkage.mechanism.link.DriverLink.step",false]],"step() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.step",false]],"step() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.step",false]],"step_fast() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.step_fast",false]],"step_fast() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.step_fast",false]],"step_fast_with_kinematics() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.step_fast_with_kinematics",false]],"step_fast_with_kinematics() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.step_fast_with_kinematics",false]],"step_single() (in module pylinkage.solver.simulation)":[[16,"pylinkage.solver.simulation.step_single",false]],"step_single_acceleration() (in module pylinkage.solver.simulation)":[[16,"pylinkage.solver.simulation.step_single_acceleration",false]],"step_single_velocity() (in module pylinkage.solver.simulation)":[[16,"pylinkage.solver.simulation.step_single_velocity",false]],"step_with_derivatives() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.step_with_derivatives",false]],"step_with_derivatives() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.step_with_derivatives",false]],"stephenson_from_lengths() (in module pylinkage.synthesis.conversion)":[[18,"pylinkage.synthesis.conversion.stephenson_from_lengths",false]],"stroke (pylinkage.actuators.linear.linearactuator attribute)":[[2,"pylinkage.actuators.linear.LinearActuator.stroke",false]],"stroke_at_position() (in module pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.stroke_at_position",false]],"stroke_position() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.stroke_position",false]],"stroke_position() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.stroke_position",false]],"stroke_range (pylinkage.linkage.transmission.strokeanalysis attribute)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis.stroke_range",false]],"strokeanalysis (class in pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.StrokeAnalysis",false]],"structuralanalysis (class in pylinkage.assur.analysis)":[[3,"pylinkage.assur.analysis.StructuralAnalysis",false]],"substitute() (pylinkage.symbolic.linkage.symboliclinkage method)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.substitute",false]],"success (pylinkage.symbolic.optimization.optimizationresult attribute)":[[17,"pylinkage.symbolic.optimization.OptimizationResult.success",false]],"swarm_tiled_repr() (in module pylinkage.visualizer.animated)":[[21,"pylinkage.visualizer.animated.swarm_tiled_repr",false]],"symbol_type (pylinkage.visualizer.symbols.symbolspec attribute)":[[21,"pylinkage.visualizer.symbols.SymbolSpec.symbol_type",false]],"symbolic_circle_intersect() (in module pylinkage.symbolic.geometry)":[[17,"pylinkage.symbolic.geometry.symbolic_circle_intersect",false]],"symbolic_circle_line_intersect() (in module pylinkage.symbolic.geometry)":[[17,"pylinkage.symbolic.geometry.symbolic_circle_line_intersect",false]],"symbolic_cyl_to_cart() (in module pylinkage.symbolic.geometry)":[[17,"pylinkage.symbolic.geometry.symbolic_cyl_to_cart",false]],"symbolic_dist() (in module pylinkage.symbolic.geometry)":[[17,"pylinkage.symbolic.geometry.symbolic_dist",false]],"symbolic_gradient() (in module pylinkage.symbolic.optimization)":[[17,"pylinkage.symbolic.optimization.symbolic_gradient",false]],"symbolic_hessian() (in module pylinkage.symbolic.optimization)":[[17,"pylinkage.symbolic.optimization.symbolic_hessian",false]],"symbolic_sqr_dist() (in module pylinkage.symbolic.geometry)":[[17,"pylinkage.symbolic.geometry.symbolic_sqr_dist",false]],"symboliclinkage (class in pylinkage.symbolic.linkage)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage",false]],"symbolicoptimizer (class in pylinkage.symbolic.optimization)":[[17,"pylinkage.symbolic.optimization.SymbolicOptimizer",false]],"symbolspec (class in pylinkage.visualizer.symbols)":[[21,"pylinkage.visualizer.symbols.SymbolSpec",false]],"symboltype (class in pylinkage.visualizer.symbols)":[[21,"pylinkage.visualizer.symbols.SymbolType",false]],"symcrank (class in pylinkage.symbolic.joints)":[[17,"pylinkage.symbolic.joints.SymCrank",false]],"symjoint (class in pylinkage.symbolic.joints)":[[17,"pylinkage.symbolic.joints.SymJoint",false]],"symrevolute (class in pylinkage.symbolic.joints)":[[17,"pylinkage.symbolic.joints.SymRevolute",false]],"symstatic (class in pylinkage.symbolic.joints)":[[17,"pylinkage.symbolic.joints.SymStatic",false]],"synthesis_to_chromosomes() (in module pylinkage.optimization.warm_start)":[[12,"pylinkage.optimization.warm_start.synthesis_to_chromosomes",false]],"synthesis_type (pylinkage.synthesis.core.synthesisproblem attribute)":[[18,"pylinkage.synthesis.core.SynthesisProblem.synthesis_type",false]],"synthesisproblem (class in pylinkage.synthesis.core)":[[18,"pylinkage.synthesis.core.SynthesisProblem",false]],"synthesisresult (class in pylinkage.synthesis.core)":[[18,"pylinkage.synthesis.core.SynthesisResult",false]],"synthesize() (in module pylinkage.synthesis.multi_topology)":[[18,"pylinkage.synthesis.multi_topology.synthesize",false]],"target (pylinkage.assur.graph.edge attribute)":[[3,"pylinkage.assur.graph.Edge.target",false]],"target (pylinkage.hypergraph.core.edge attribute)":[[9,"pylinkage.hypergraph.core.Edge.target",false]],"target_id (pylinkage.optimization.topology_neighborhood.topologyneighbor attribute)":[[12,"pylinkage.optimization.topology_neighborhood.TopologyNeighbor.target_id",false]],"ternary (pylinkage.mechanism.link.linktype attribute)":[[11,"pylinkage.mechanism.link.LinkType.TERNARY",false]],"tetrad (pylinkage.assur.signature.assurgroupclass attribute)":[[3,"pylinkage.assur.signature.AssurGroupClass.TETRAD",false]],"theta (pylinkage.symbolic.joints.symcrank attribute)":[[17,"pylinkage.symbolic.joints.SymCrank.theta",false]],"theta (pylinkage.symbolic.linkage.symboliclinkage attribute)":[[17,"pylinkage.symbolic.linkage.SymbolicLinkage.theta",false]],"thickness (pylinkage.visualizer.step_export.linkprofile attribute)":[[21,"pylinkage.visualizer.step_export.LinkProfile.thickness",false]],"to_cartesian() (pylinkage.synthesis.core.burmesterdyad method)":[[18,"pylinkage.synthesis.core.BurmesterDyad.to_cartesian",false]],"to_dataframe() (pylinkage.linkage.sensitivity.sensitivityanalysis method)":[[10,"pylinkage.linkage.sensitivity.SensitivityAnalysis.to_dataframe",false]],"to_dataframe() (pylinkage.linkage.sensitivity.toleranceanalysis method)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.to_dataframe",false]],"to_dict() (pylinkage.dimensions.dimensions method)":[[1,"pylinkage.dimensions.Dimensions.to_dict",false]],"to_dict() (pylinkage.dimensions.driverangle method)":[[1,"pylinkage.dimensions.DriverAngle.to_dict",false]],"to_dyad_solution() (pylinkage.synthesis.core.burmesterdyad method)":[[18,"pylinkage.synthesis.core.BurmesterDyad.to_dyad_solution",false]],"to_edges() (pylinkage.hypergraph.core.hyperedge method)":[[9,"pylinkage.hypergraph.core.Hyperedge.to_edges",false]],"to_graph() (pylinkage.topology.catalog.catalogentry method)":[[19,"pylinkage.topology.catalog.CatalogEntry.to_graph",false]],"to_hypergraph() (in module pylinkage.assur.hypergraph_conversion)":[[3,"pylinkage.assur.hypergraph_conversion.to_hypergraph",false]],"to_hypergraph() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.to_hypergraph",false]],"to_instance (pylinkage.hypergraph.hierarchy.connection attribute)":[[9,"pylinkage.hypergraph.hierarchy.Connection.to_instance",false]],"to_json() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.to_json",false]],"to_mechanism() (in module pylinkage.hypergraph.mechanism_conversion)":[[9,"pylinkage.hypergraph.mechanism_conversion.to_mechanism",false]],"to_numba_coefficients() (pylinkage.cam.motion_laws.motionlaw method)":[[5,"pylinkage.cam.motion_laws.MotionLaw.to_numba_coefficients",false]],"to_numba_coefficients() (pylinkage.cam.motion_laws.polynomialmotionlaw method)":[[5,"pylinkage.cam.motion_laws.PolynomialMotionLaw.to_numba_coefficients",false]],"to_numba_data() (pylinkage.cam.profiles.camprofile method)":[[5,"pylinkage.cam.profiles.CamProfile.to_numba_data",false]],"to_numba_data() (pylinkage.cam.profiles.functionprofile method)":[[5,"pylinkage.cam.profiles.FunctionProfile.to_numba_data",false]],"to_numba_data() (pylinkage.cam.profiles.pointarrayprofile method)":[[5,"pylinkage.cam.profiles.PointArrayProfile.to_numba_data",false]],"to_port (pylinkage.hypergraph.hierarchy.connection attribute)":[[9,"pylinkage.hypergraph.hierarchy.Connection.to_port",false]],"to_simple_graph() (pylinkage.hypergraph.graph.hypergraphlinkage method)":[[9,"pylinkage.hypergraph.graph.HypergraphLinkage.to_simple_graph",false]],"toleranceanalysis (class in pylinkage.linkage.sensitivity)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis",false]],"tolerances (pylinkage.linkage.sensitivity.toleranceanalysis attribute)":[[10,"pylinkage.linkage.sensitivity.ToleranceAnalysis.tolerances",false]],"topology (pylinkage.hypergraph.hierarchy.componentinstance attribute)":[[9,"pylinkage.hypergraph.hierarchy.ComponentInstance.topology",false]],"topology_by_index() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.topology_by_index",false]],"topology_distance() (in module pylinkage.optimization.topology_neighborhood)":[[12,"pylinkage.optimization.topology_neighborhood.topology_distance",false]],"topology_entry (pylinkage.optimization.co_optimization_types.cooptsolution attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptSolution.topology_entry",false]],"topology_entry (pylinkage.synthesis.topology_types.topologysolution attribute)":[[18,"pylinkage.synthesis.topology_types.TopologySolution.topology_entry",false]],"topology_id (pylinkage.synthesis.topology_types.nbarsolution attribute)":[[18,"pylinkage.synthesis.topology_types.NBarSolution.topology_id",false]],"topology_idx (pylinkage.optimization.co_optimization_types.mixedchromosome attribute)":[[12,"pylinkage.optimization.co_optimization_types.MixedChromosome.topology_idx",false]],"topology_index() (pylinkage.topology.catalog.topologycatalog method)":[[19,"pylinkage.topology.catalog.TopologyCatalog.topology_index",false]],"topology_mutation_rate (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.topology_mutation_rate",false]],"topology_neighbors() (in module pylinkage.optimization.topology_neighborhood)":[[12,"pylinkage.optimization.topology_neighborhood.topology_neighbors",false]],"topologycatalog (class in pylinkage.topology.catalog)":[[19,"pylinkage.topology.catalog.TopologyCatalog",false]],"topologyneighbor (class in pylinkage.optimization.topology_neighborhood)":[[12,"pylinkage.optimization.topology_neighborhood.TopologyNeighbor",false]],"topologysolution (class in pylinkage.synthesis.topology_types)":[[18,"pylinkage.synthesis.topology_types.TopologySolution",false]],"total_iterations (pylinkage.optimization.async_optimization.optimizationprogress attribute)":[[12,"pylinkage.optimization.async_optimization.OptimizationProgress.total_iterations",false]],"total_lift (pylinkage.cam.profiles.functionprofile attribute)":[[5,"pylinkage.cam.profiles.FunctionProfile.total_lift",false]],"tracker (pylinkage.mechanism.joint.jointtype attribute)":[[11,"pylinkage.mechanism.joint.JointType.TRACKER",false]],"trackerjoint (class in pylinkage.mechanism.joint)":[[11,"pylinkage.mechanism.joint.TrackerJoint",false]],"translatingcamfollower (class in pylinkage.dyads.translating_cam)":[[7,"pylinkage.dyads.translating_cam.TranslatingCamFollower",false]],"transmission_angle() (pylinkage.mechanism.mechanism.mechanism method)":[[11,"pylinkage.mechanism.mechanism.Mechanism.transmission_angle",false]],"transmission_angle() (pylinkage.simulation.linkage.linkage method)":[[15,"pylinkage.simulation.linkage.Linkage.transmission_angle",false]],"transmission_angle_at_position() (in module pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.transmission_angle_at_position",false]],"transmissionangleanalysis (class in pylinkage.linkage.transmission)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis",false]],"triad (class in pylinkage.assur.groups)":[[3,"pylinkage.assur.groups.Triad",false]],"triad (pylinkage.assur.signature.assurgroupclass attribute)":[[3,"pylinkage.assur.signature.AssurGroupClass.TRIAD",false]],"trials_and_errors_optimization() (in module pylinkage.optimization.grid_search)":[[12,"pylinkage.optimization.grid_search.trials_and_errors_optimization",false]],"trials_and_errors_optimization_async() (in module pylinkage.optimization.async_optimization)":[[12,"pylinkage.optimization.async_optimization.trials_and_errors_optimization_async",false]],"unbuildableerror":[[1,"pylinkage.exceptions.UnbuildableError",false]],"underconstrainederror":[[1,"pylinkage.exceptions.UnderconstrainedError",false]],"update_animated_plot() (in module pylinkage.visualizer.animated)":[[21,"pylinkage.visualizer.animated.update_animated_plot",false]],"update_position() (pylinkage.mechanism.joint.trackerjoint method)":[[11,"pylinkage.mechanism.joint.TrackerJoint.update_position",false]],"update_solver_constraints() (in module pylinkage.bridge.solver_conversion)":[[4,"pylinkage.bridge.solver_conversion.update_solver_constraints",false]],"update_solver_positions() (in module pylinkage.bridge.solver_conversion)":[[4,"pylinkage.bridge.solver_conversion.update_solver_positions",false]],"validate() (pylinkage.assur.assur_mechanism.assurmechanism method)":[[3,"pylinkage.assur.assur_mechanism.AssurMechanism.validate",false]],"validate_against() (pylinkage.dimensions.dimensions method)":[[1,"pylinkage.dimensions.Dimensions.validate_against",false]],"validate_decomposition() (in module pylinkage.assur.decomposition)":[[3,"pylinkage.assur.decomposition.validate_decomposition",false]],"validate_fourbar() (in module pylinkage.synthesis.utils)":[[18,"pylinkage.synthesis.utils.validate_fourbar",false]],"validation_messages (pylinkage.assur.analysis.structuralanalysis attribute)":[[3,"pylinkage.assur.analysis.StructuralAnalysis.validation_messages",false]],"velocities (pylinkage.solver.types.solverdata attribute)":[[16,"pylinkage.solver.types.SolverData.velocities",false]],"velocity (pylinkage.mechanism.joint.joint attribute)":[[11,"pylinkage.mechanism.joint.Joint.velocity",false]],"velocity() (pylinkage.cam.motion_laws.cycloidalmotionlaw method)":[[5,"pylinkage.cam.motion_laws.CycloidalMotionLaw.velocity",false]],"velocity() (pylinkage.cam.motion_laws.harmonicmotionlaw method)":[[5,"pylinkage.cam.motion_laws.HarmonicMotionLaw.velocity",false]],"velocity() (pylinkage.cam.motion_laws.modifiedtrapezoidalmotionlaw method)":[[5,"pylinkage.cam.motion_laws.ModifiedTrapezoidalMotionLaw.velocity",false]],"velocity() (pylinkage.cam.motion_laws.motionlaw method)":[[5,"pylinkage.cam.motion_laws.MotionLaw.velocity",false]],"velocity() (pylinkage.cam.motion_laws.polynomialmotionlaw method)":[[5,"pylinkage.cam.motion_laws.PolynomialMotionLaw.velocity",false]],"verbose (pylinkage.optimization.co_optimization_types.cooptimizationconfig attribute)":[[12,"pylinkage.optimization.co_optimization_types.CoOptimizationConfig.verbose",false]],"verify_function_generation() (in module pylinkage.synthesis.function_generation)":[[18,"pylinkage.synthesis.function_generation.verify_function_generation",false]],"verify_path_generation() (in module pylinkage.synthesis.path_generation)":[[18,"pylinkage.synthesis.path_generation.verify_path_generation",false]],"warm_start_co_optimization() (in module pylinkage.optimization.warm_start)":[[12,"pylinkage.optimization.warm_start.warm_start_co_optimization",false]],"warm_start_sampling() (in module pylinkage.optimization.operators)":[[12,"pylinkage.optimization.operators.warm_start_sampling",false]],"warnings (pylinkage.assur.analysis.mobilityresult attribute)":[[3,"pylinkage.assur.analysis.MobilityResult.warnings",false]],"warnings (pylinkage.synthesis.core.synthesisresult attribute)":[[18,"pylinkage.synthesis.core.SynthesisResult.warnings",false]],"watt_from_lengths() (in module pylinkage.synthesis.conversion)":[[18,"pylinkage.synthesis.conversion.watt_from_lengths",false]],"width (pylinkage.visualizer.step_export.linkprofile attribute)":[[21,"pylinkage.visualizer.step_export.LinkProfile.width",false]],"worst_angle() (pylinkage.linkage.transmission.transmissionangleanalysis method)":[[10,"pylinkage.linkage.transmission.TransmissionAngleAnalysis.worst_angle",false]],"x (pylinkage.mechanism.joint.joint property)":[[11,"pylinkage.mechanism.joint.Joint.x",false]],"y (pylinkage.mechanism.joint.joint property)":[[11,"pylinkage.mechanism.joint.Joint.y",false]]},"objects":{"pylinkage":[[1,0,0,"-","dimensions"],[1,0,0,"-","exceptions"]],"pylinkage.actuators":[[2,0,0,"-","arc_crank"],[2,0,0,"-","crank"],[2,0,0,"-","linear"]],"pylinkage.actuators.arc_crank":[[2,1,1,"","ArcCrank"]],"pylinkage.actuators.arc_crank.ArcCrank":[[2,2,1,"","anchor"],[2,3,1,"","anchors"],[2,3,1,"","angle"],[2,2,1,"","angular_velocity"],[2,2,1,"","arc_end"],[2,2,1,"","arc_start"],[2,4,1,"","get_constraints"],[2,2,1,"","initial_angle"],[2,3,1,"","output"],[2,2,1,"","radius"],[2,4,1,"","reload"],[2,4,1,"","set_constraints"],[2,4,1,"","set_coord"]],"pylinkage.actuators.crank":[[2,1,1,"","Crank"],[2,5,1,"","DEFAULT_ANGULAR_VELOCITY"]],"pylinkage.actuators.crank.Crank":[[2,2,1,"","anchor"],[2,3,1,"","anchors"],[2,2,1,"","angular_velocity"],[2,4,1,"","get_constraints"],[2,2,1,"","initial_angle"],[2,3,1,"","output"],[2,2,1,"","radius"],[2,4,1,"","reload"],[2,4,1,"","set_constraints"]],"pylinkage.actuators.linear":[[2,1,1,"","LinearActuator"]],"pylinkage.actuators.linear.LinearActuator":[[2,2,1,"","anchor"],[2,3,1,"","anchors"],[2,2,1,"","angle"],[2,3,1,"","extension"],[2,4,1,"","get_constraints"],[2,2,1,"","initial_extension"],[2,3,1,"","output"],[2,4,1,"","reload"],[2,4,1,"","set_constraints"],[2,4,1,"","set_coord"],[2,2,1,"","speed"],[2,2,1,"","stroke"]],"pylinkage.assur":[[3,0,0,"-","analysis"],[3,0,0,"-","assur_mechanism"],[3,0,0,"-","decomposition"],[3,0,0,"-","graph"],[3,0,0,"-","groups"],[3,0,0,"-","hypergraph_conversion"],[3,0,0,"-","mechanism_conversion"],[3,0,0,"-","serialization"],[3,0,0,"-","signature"]],"pylinkage.assur.analysis":[[3,1,1,"","MobilityResult"],[3,1,1,"","StructuralAnalysis"]],"pylinkage.assur.analysis.MobilityResult":[[3,2,1,"","degree_of_freedom"],[3,2,1,"","is_determinate"],[3,2,1,"","is_overconstrained"],[3,2,1,"","is_underconstrained"],[3,3,1,"","is_valid_mechanism"],[3,3,1,"","mobility_status"],[3,2,1,"","num_1dof_joints"],[3,2,1,"","num_2dof_joints"],[3,2,1,"","num_driver_joints"],[3,2,1,"","num_ground_joints"],[3,2,1,"","num_joints"],[3,2,1,"","num_links"],[3,2,1,"","warnings"]],"pylinkage.assur.analysis.StructuralAnalysis":[[3,2,1,"","group_signatures"],[3,3,1,"","is_valid"],[3,2,1,"","mobility"],[3,2,1,"","num_assur_groups"],[3,2,1,"","validation_messages"]],"pylinkage.assur.assur_mechanism":[[3,1,1,"","AssurMechanism"]],"pylinkage.assur.assur_mechanism.AssurMechanism":[[3,4,1,"","analyze"],[3,3,1,"","assur_groups"],[3,3,1,"","decomposition"],[3,3,1,"","degree_of_freedom"],[3,4,1,"","from_graph"],[3,4,1,"","from_mechanism"],[3,4,1,"","get_joint_positions"],[3,3,1,"","graph"],[3,4,1,"","is_valid"],[3,2,1,"","mechanism"],[3,3,1,"","num_assur_groups"],[3,3,1,"","num_driver_nodes"],[3,3,1,"","num_ground_nodes"],[3,4,1,"","reset"],[3,4,1,"","step"],[3,4,1,"","validate"]],"pylinkage.assur.decomposition":[[3,1,1,"","DecompositionResult"],[3,6,1,"","decompose_assur_groups"],[3,6,1,"","validate_decomposition"]],"pylinkage.assur.decomposition.DecompositionResult":[[3,4,1,"","all_nodes_in_order"],[3,2,1,"","drivers"],[3,2,1,"","graph"],[3,2,1,"","ground"],[3,2,1,"","groups"],[3,4,1,"","solve_order"]],"pylinkage.assur.graph":[[3,1,1,"","Edge"],[3,1,1,"","LinkageGraph"],[3,1,1,"","Node"]],"pylinkage.assur.graph.Edge":[[3,2,1,"","body_id"],[3,4,1,"","connects"],[3,2,1,"","id"],[3,4,1,"","other_node"],[3,2,1,"","source"],[3,2,1,"","target"]],"pylinkage.assur.graph.LinkageGraph":[[3,4,1,"","add_edge"],[3,4,1,"","add_node"],[3,4,1,"","copy"],[3,4,1,"","degree"],[3,4,1,"","driven_nodes"],[3,4,1,"","driver_nodes"],[3,2,1,"","edges"],[3,4,1,"","get_edge_between"],[3,4,1,"","get_edges_for_node"],[3,4,1,"","ground_nodes"],[3,2,1,"","name"],[3,4,1,"","neighbors"],[3,2,1,"","nodes"],[3,4,1,"","remove_edge"],[3,4,1,"","remove_node"]],"pylinkage.assur.graph.Node":[[3,2,1,"","id"],[3,2,1,"","joint_type"],[3,2,1,"","name"],[3,2,1,"","role"]],"pylinkage.assur.groups":[[3,1,1,"","AssurGroup"],[3,1,1,"","Dyad"],[3,1,1,"","DyadPP"],[3,1,1,"","DyadPRR"],[3,1,1,"","DyadRPR"],[3,1,1,"","DyadRRP"],[3,1,1,"","DyadRRR"],[3,1,1,"","Triad"],[3,6,1,"","identify_dyad_type"],[3,6,1,"","identify_group_type"]],"pylinkage.assur.groups.AssurGroup":[[3,2,1,"","anchor_nodes"],[3,4,1,"","can_form"],[3,3,1,"","group_class"],[3,2,1,"","internal_edges"],[3,2,1,"","internal_nodes"],[3,3,1,"","joint_signature"],[3,3,1,"","solver_category"]],"pylinkage.assur.groups.Dyad":[[3,4,1,"","can_form"],[3,3,1,"","group_class"],[3,3,1,"","joint_signature"],[3,2,1,"","line2_node1"],[3,2,1,"","line2_node2"],[3,2,1,"","line_node1"],[3,2,1,"","line_node2"]],"pylinkage.assur.groups.Triad":[[3,4,1,"","can_form"],[3,2,1,"","edge_map"],[3,3,1,"","group_class"],[3,3,1,"","joint_signature"]],"pylinkage.assur.hypergraph_conversion":[[3,6,1,"","from_hypergraph"],[3,6,1,"","to_hypergraph"]],"pylinkage.assur.mechanism_conversion":[[3,6,1,"","graph_to_mechanism"],[3,6,1,"","mechanism_to_graph"]],"pylinkage.assur.serialization":[[3,6,1,"","edge_from_dict"],[3,6,1,"","edge_to_dict"],[3,6,1,"","graph_from_dict"],[3,6,1,"","graph_from_json"],[3,6,1,"","graph_to_dict"],[3,6,1,"","graph_to_json"],[3,6,1,"","node_from_dict"],[3,6,1,"","node_to_dict"]],"pylinkage.assur.signature":[[3,1,1,"","AssurGroupClass"],[3,1,1,"","AssurSignature"],[3,6,1,"","isomer_to_canonical"],[3,6,1,"","parse_isomer_signature"],[3,6,1,"","parse_signature"],[3,6,1,"","signature_to_group_class"],[3,6,1,"","signature_to_hypergraph"]],"pylinkage.assur.signature.AssurGroupClass":[[3,2,1,"","DYAD"],[3,2,1,"","TETRAD"],[3,2,1,"","TRIAD"]],"pylinkage.assur.signature.AssurSignature":[[3,3,1,"","canonical_form"],[3,2,1,"","group_class"],[3,2,1,"","joints"],[3,3,1,"","num_anchor_nodes"],[3,3,1,"","num_internal_nodes"],[3,3,1,"","num_links"],[3,2,1,"","raw_string"]],"pylinkage.bridge":[[4,0,0,"-","solver_conversion"]],"pylinkage.bridge.solver_conversion":[[4,6,1,"","linkage_to_solver_data"],[4,6,1,"","solver_data_to_linkage"],[4,6,1,"","update_solver_constraints"],[4,6,1,"","update_solver_positions"]],"pylinkage.cam":[[5,0,0,"-","motion_laws"],[5,0,0,"-","profiles"]],"pylinkage.cam.motion_laws":[[5,1,1,"","CycloidalMotionLaw"],[5,1,1,"","HarmonicMotionLaw"],[5,1,1,"","ModifiedTrapezoidalMotionLaw"],[5,1,1,"","MotionLaw"],[5,1,1,"","PolynomialMotionLaw"],[5,6,1,"","polynomial_345"],[5,6,1,"","polynomial_4567"]],"pylinkage.cam.motion_laws.CycloidalMotionLaw":[[5,4,1,"","acceleration"],[5,4,1,"","displacement"],[5,3,1,"","profile_type"],[5,4,1,"","velocity"]],"pylinkage.cam.motion_laws.HarmonicMotionLaw":[[5,4,1,"","acceleration"],[5,4,1,"","displacement"],[5,3,1,"","profile_type"],[5,4,1,"","velocity"]],"pylinkage.cam.motion_laws.ModifiedTrapezoidalMotionLaw":[[5,4,1,"","acceleration"],[5,4,1,"","displacement"],[5,3,1,"","profile_type"],[5,4,1,"","velocity"]],"pylinkage.cam.motion_laws.MotionLaw":[[5,4,1,"","acceleration"],[5,4,1,"","displacement"],[5,3,1,"","profile_type"],[5,4,1,"","to_numba_coefficients"],[5,4,1,"","velocity"]],"pylinkage.cam.motion_laws.PolynomialMotionLaw":[[5,4,1,"","acceleration"],[5,3,1,"","coefficients"],[5,4,1,"","displacement"],[5,3,1,"","profile_type"],[5,4,1,"","to_numba_coefficients"],[5,4,1,"","velocity"]],"pylinkage.cam.profiles":[[5,1,1,"","CamProfile"],[5,1,1,"","FunctionProfile"],[5,1,1,"","PointArrayProfile"]],"pylinkage.cam.profiles.CamProfile":[[5,2,1,"","base_radius"],[5,4,1,"","evaluate"],[5,4,1,"","evaluate_derivative"],[5,4,1,"","get_constraints"],[5,2,1,"","name"],[5,4,1,"","pitch_radius"],[5,4,1,"","pressure_angle"],[5,4,1,"","set_constraints"],[5,4,1,"","to_numba_data"]],"pylinkage.cam.profiles.FunctionProfile":[[5,2,1,"","base_radius"],[5,2,1,"","dwell_high_end"],[5,4,1,"","evaluate"],[5,4,1,"","evaluate_derivative"],[5,2,1,"","fall_end"],[5,4,1,"","get_constraints"],[5,2,1,"","motion_law"],[5,2,1,"","name"],[5,2,1,"","rise_end"],[5,2,1,"","rise_start"],[5,4,1,"","set_constraints"],[5,4,1,"","to_numba_data"],[5,2,1,"","total_lift"]],"pylinkage.cam.profiles.PointArrayProfile":[[5,3,1,"","angles"],[5,2,1,"","base_radius"],[5,4,1,"","evaluate"],[5,4,1,"","evaluate_derivative"],[5,4,1,"","get_constraints"],[5,2,1,"","name"],[5,3,1,"","radii"],[5,4,1,"","set_constraints"],[5,4,1,"","to_numba_data"]],"pylinkage.components":[[6,0,0,"-","ground"],[6,0,0,"-","point_tracker"]],"pylinkage.components.ground":[[6,1,1,"","Ground"]],"pylinkage.components.ground.Ground":[[6,4,1,"","get_constraints"],[6,4,1,"","reload"],[6,4,1,"","set_constraints"]],"pylinkage.components.point_tracker":[[6,1,1,"","PointTracker"]],"pylinkage.components.point_tracker.PointTracker":[[6,2,1,"","anchor1"],[6,2,1,"","anchor2"],[6,3,1,"","anchors"],[6,2,1,"","angle"],[6,2,1,"","distance"],[6,4,1,"","get_constraints"],[6,4,1,"","reload"],[6,4,1,"","set_constraints"]],"pylinkage.dimensions":[[1,1,1,"","Dimensions"],[1,1,1,"","DriverAngle"]],"pylinkage.dimensions.Dimensions":[[1,4,1,"","copy"],[1,2,1,"","driver_angles"],[1,2,1,"","edge_distances"],[1,4,1,"","from_dict"],[1,4,1,"","get_driver_angle"],[1,4,1,"","get_edge_distance"],[1,4,1,"","get_hyperedge_distance"],[1,4,1,"","get_node_position"],[1,2,1,"","hyperedge_constraints"],[1,2,1,"","name"],[1,2,1,"","node_positions"],[1,4,1,"","to_dict"],[1,4,1,"","validate_against"]],"pylinkage.dimensions.DriverAngle":[[1,2,1,"","angular_velocity"],[1,4,1,"","from_dict"],[1,2,1,"","initial_angle"],[1,4,1,"","to_dict"]],"pylinkage.dyads":[[7,0,0,"-","factory"],[7,0,0,"-","fixed"],[7,0,0,"-","oscillating_cam"],[7,0,0,"-","pp"],[7,0,0,"-","rrp"],[7,0,0,"-","rrr"],[7,0,0,"-","translating_cam"]],"pylinkage.dyads.factory":[[7,6,1,"","create_dyad"],[7,6,1,"","get_isomer_geometry"],[7,6,1,"","get_required_anchors"],[7,6,1,"","get_required_constraints"]],"pylinkage.dyads.fixed":[[7,1,1,"","FixedDyad"]],"pylinkage.dyads.fixed.FixedDyad":[[7,2,1,"","angle"],[7,2,1,"","distance"],[7,4,1,"","get_constraints"],[7,4,1,"","reload"],[7,4,1,"","set_constraints"]],"pylinkage.dyads.oscillating_cam":[[7,1,1,"","OscillatingCamFollower"]],"pylinkage.dyads.oscillating_cam.OscillatingCamFollower":[[7,3,1,"","anchors"],[7,3,1,"","angular_displacement"],[7,3,1,"","arm_angle"],[7,2,1,"","arm_length"],[7,3,1,"","cam_angle"],[7,2,1,"","cam_driver"],[7,4,1,"","get_constraints"],[7,2,1,"","initial_angle"],[7,3,1,"","output"],[7,2,1,"","pivot_anchor"],[7,2,1,"","profile"],[7,4,1,"","reload"],[7,2,1,"","roller_radius"],[7,4,1,"","set_constraints"]],"pylinkage.dyads.pp":[[7,1,1,"","PPDyad"]],"pylinkage.dyads.pp.PPDyad":[[7,3,1,"","anchors"],[7,4,1,"","get_constraints"],[7,2,1,"","line1_anchor1"],[7,2,1,"","line1_anchor2"],[7,2,1,"","line2_anchor1"],[7,2,1,"","line2_anchor2"],[7,4,1,"","reload"],[7,4,1,"","set_constraints"]],"pylinkage.dyads.rrp":[[7,1,1,"","RRPDyad"]],"pylinkage.dyads.rrp.RRPDyad":[[7,3,1,"","anchors"],[7,2,1,"","distance"],[7,4,1,"","get_constraints"],[7,2,1,"","line_anchor1"],[7,2,1,"","line_anchor2"],[7,4,1,"","reload"],[7,2,1,"","revolute_anchor"],[7,4,1,"","set_constraints"]],"pylinkage.dyads.rrr":[[7,1,1,"","RRRDyad"]],"pylinkage.dyads.rrr.RRRDyad":[[7,2,1,"","distance1"],[7,2,1,"","distance2"],[7,4,1,"","get_constraints"],[7,4,1,"","reload"],[7,4,1,"","set_constraints"]],"pylinkage.dyads.translating_cam":[[7,1,1,"","TranslatingCamFollower"]],"pylinkage.dyads.translating_cam.TranslatingCamFollower":[[7,3,1,"","anchors"],[7,3,1,"","cam_angle"],[7,2,1,"","cam_driver"],[7,3,1,"","displacement"],[7,4,1,"","get_constraints"],[7,2,1,"","guide"],[7,2,1,"","guide_angle"],[7,3,1,"","output"],[7,2,1,"","profile"],[7,4,1,"","reload"],[7,2,1,"","roller_radius"],[7,4,1,"","set_constraints"]],"pylinkage.exceptions":[[1,7,1,"","NotCompletelyDefinedError"],[1,7,1,"","OptimizationError"],[1,7,1,"","UnbuildableError"],[1,7,1,"","UnderconstrainedError"]],"pylinkage.geometry":[[8,0,0,"-","core"],[8,0,0,"-","secants"]],"pylinkage.geometry.core":[[8,6,1,"","cyl_to_cart"],[8,6,1,"","dist"],[8,6,1,"","get_nearest_point"],[8,6,1,"","line_from_points"],[8,6,1,"","norm"],[8,6,1,"","sqr_dist"]],"pylinkage.geometry.secants":[[8,6,1,"","bounding_box"],[8,6,1,"","circle_intersect"],[8,6,1,"","circle_line_from_points_intersection"],[8,6,1,"","circle_line_intersection"],[8,6,1,"","intersection"],[8,6,1,"","line_line_intersection"]],"pylinkage.hypergraph":[[9,0,0,"-","core"],[9,0,0,"-","graph"],[9,0,0,"-","hierarchy"],[9,0,0,"-","mechanism_conversion"],[9,0,0,"-","serialization"],[9,0,0,"-","sim_conversion"]],"pylinkage.hypergraph.core":[[9,1,1,"","Edge"],[9,1,1,"","Hyperedge"],[9,1,1,"","Node"]],"pylinkage.hypergraph.core.Edge":[[9,4,1,"","connects"],[9,2,1,"","id"],[9,4,1,"","other_node"],[9,2,1,"","source"],[9,2,1,"","target"]],"pylinkage.hypergraph.core.Hyperedge":[[9,4,1,"","from_edges"],[9,2,1,"","id"],[9,2,1,"","name"],[9,2,1,"","nodes"],[9,4,1,"","to_edges"]],"pylinkage.hypergraph.core.Node":[[9,2,1,"","id"],[9,2,1,"","joint_type"],[9,2,1,"","name"],[9,2,1,"","role"]],"pylinkage.hypergraph.graph":[[9,1,1,"","HypergraphLinkage"]],"pylinkage.hypergraph.graph.HypergraphLinkage":[[9,4,1,"","add_edge"],[9,4,1,"","add_hyperedge"],[9,4,1,"","add_node"],[9,4,1,"","all_neighbors"],[9,4,1,"","copy"],[9,4,1,"","degree"],[9,4,1,"","driven_nodes"],[9,4,1,"","driver_nodes"],[9,2,1,"","edges"],[9,4,1,"","get_edge_between"],[9,4,1,"","get_edges_for_node"],[9,4,1,"","get_hyperedges_for_node"],[9,4,1,"","ground_nodes"],[9,4,1,"","hyperdegree"],[9,4,1,"","hyperedge_neighbors"],[9,2,1,"","hyperedges"],[9,2,1,"","name"],[9,4,1,"","neighbors"],[9,2,1,"","nodes"],[9,4,1,"","remove_edge"],[9,4,1,"","remove_hyperedge"],[9,4,1,"","remove_node"],[9,4,1,"","to_simple_graph"]],"pylinkage.hypergraph.hierarchy":[[9,1,1,"","ComponentInstance"],[9,1,1,"","Connection"],[9,1,1,"","HierarchicalLinkage"]],"pylinkage.hypergraph.hierarchy.ComponentInstance":[[9,4,1,"","get_port_qualified_node"],[9,4,1,"","get_qualified_node_id"],[9,2,1,"","id"],[9,2,1,"","name"],[9,2,1,"","ports"],[9,2,1,"","topology"]],"pylinkage.hypergraph.hierarchy.Connection":[[9,2,1,"","from_instance"],[9,2,1,"","from_port"],[9,2,1,"","to_instance"],[9,2,1,"","to_port"]],"pylinkage.hypergraph.hierarchy.HierarchicalLinkage":[[9,4,1,"","add_connection"],[9,4,1,"","add_instance"],[9,2,1,"","connections"],[9,4,1,"","flatten"],[9,4,1,"","get_all_port_nodes"],[9,2,1,"","instances"],[9,2,1,"","name"]],"pylinkage.hypergraph.mechanism_conversion":[[9,6,1,"","from_mechanism"],[9,6,1,"","to_mechanism"]],"pylinkage.hypergraph.serialization":[[9,6,1,"","component_instance_from_dict"],[9,6,1,"","component_instance_to_dict"],[9,6,1,"","connection_from_dict"],[9,6,1,"","connection_to_dict"],[9,6,1,"","edge_from_dict"],[9,6,1,"","edge_to_dict"],[9,6,1,"","graph_from_dict"],[9,6,1,"","graph_from_json"],[9,6,1,"","graph_to_dict"],[9,6,1,"","graph_to_json"],[9,6,1,"","hierarchical_from_dict"],[9,6,1,"","hierarchical_from_json"],[9,6,1,"","hierarchical_to_dict"],[9,6,1,"","hierarchical_to_json"],[9,6,1,"","hyperedge_from_dict"],[9,6,1,"","hyperedge_to_dict"],[9,6,1,"","node_from_dict"],[9,6,1,"","node_to_dict"]],"pylinkage.hypergraph.sim_conversion":[[9,6,1,"","from_sim_linkage"]],"pylinkage.linkage":[[10,0,0,"-","analysis"],[10,0,0,"-","sensitivity"],[10,0,0,"-","transmission"]],"pylinkage.linkage.analysis":[[10,6,1,"","bounding_box"],[10,6,1,"","extract_trajectories"],[10,6,1,"","extract_trajectory"],[10,6,1,"","kinematic_default_test"],[10,6,1,"","movement_bounding_box"]],"pylinkage.linkage.sensitivity":[[10,1,1,"","SensitivityAnalysis"],[10,1,1,"","ToleranceAnalysis"],[10,6,1,"","analyze_sensitivity"],[10,6,1,"","analyze_tolerance"]],"pylinkage.linkage.sensitivity.SensitivityAnalysis":[[10,2,1,"","baseline_path_metric"],[10,2,1,"","baseline_transmission"],[10,2,1,"","constraint_names"],[10,3,1,"","most_sensitive"],[10,2,1,"","perturbation_delta"],[10,2,1,"","perturbed_path_metrics"],[10,2,1,"","perturbed_transmission"],[10,2,1,"","sensitivities"],[10,3,1,"","sensitivity_ranking"],[10,4,1,"","to_dataframe"]],"pylinkage.linkage.sensitivity.ToleranceAnalysis":[[10,2,1,"","max_deviation"],[10,2,1,"","mean_deviation"],[10,2,1,"","nominal_path"],[10,2,1,"","output_cloud"],[10,4,1,"","plot_cloud"],[10,2,1,"","position_std"],[10,2,1,"","std_deviation"],[10,4,1,"","to_dataframe"],[10,2,1,"","tolerances"]],"pylinkage.linkage.transmission":[[10,1,1,"","StrokeAnalysis"],[10,1,1,"","TransmissionAngleAnalysis"],[10,6,1,"","analyze_stroke"],[10,6,1,"","analyze_transmission"],[10,6,1,"","compute_slide_position"],[10,6,1,"","compute_transmission_angle"],[10,6,1,"","stroke_at_position"],[10,6,1,"","transmission_angle_at_position"]],"pylinkage.linkage.transmission.StrokeAnalysis":[[10,3,1,"","amplitude"],[10,3,1,"","center_position"],[10,2,1,"","max_position"],[10,2,1,"","max_position_step"],[10,2,1,"","mean_position"],[10,2,1,"","min_position"],[10,2,1,"","min_position_step"],[10,2,1,"","positions"],[10,2,1,"","stroke_range"]],"pylinkage.linkage.transmission.TransmissionAngleAnalysis":[[10,3,1,"","acceptable_range"],[10,2,1,"","angles"],[10,2,1,"","is_acceptable"],[10,2,1,"","max_angle"],[10,2,1,"","max_angle_step"],[10,2,1,"","max_deviation"],[10,2,1,"","mean_angle"],[10,2,1,"","min_angle"],[10,2,1,"","min_angle_step"],[10,2,1,"","min_deviation"],[10,4,1,"","plot"],[10,4,1,"","worst_angle"]],"pylinkage.mechanism":[[11,0,0,"-","builder"],[11,0,0,"-","factories"],[11,0,0,"-","joint"],[11,0,0,"-","link"],[11,0,0,"-","mechanism"],[11,0,0,"-","serialization"]],"pylinkage.mechanism.builder":[[11,1,1,"","Connection"],[11,1,1,"","MechanismBuilder"],[11,1,1,"","PendingLink"],[11,1,1,"","PendingTracker"],[11,1,1,"","Port"],[11,1,1,"","PrismaticConnection"],[11,1,1,"","SlideAxis"]],"pylinkage.mechanism.builder.Connection":[[11,2,1,"","joint_type"],[11,2,1,"","port1"],[11,2,1,"","port2"]],"pylinkage.mechanism.builder.MechanismBuilder":[[11,4,1,"","add_arc_driver_link"],[11,4,1,"","add_driver_link"],[11,4,1,"","add_ground_link"],[11,4,1,"","add_link"],[11,4,1,"","add_point_tracker"],[11,4,1,"","add_quaternary_link"],[11,4,1,"","add_slide_axis"],[11,4,1,"","add_ternary_link"],[11,4,1,"","build"],[11,4,1,"","connect"],[11,4,1,"","connect_prismatic"],[11,2,1,"","name"],[11,4,1,"","set_branch"]],"pylinkage.mechanism.builder.PendingLink":[[11,2,1,"","angular_velocity"],[11,2,1,"","arc_end"],[11,2,1,"","arc_start"],[11,4,1,"","get_port_distance"],[11,2,1,"","id"],[11,2,1,"","initial_angle"],[11,2,1,"","is_arc_driver"],[11,2,1,"","is_driver"],[11,2,1,"","length"],[11,2,1,"","motor_port"],[11,2,1,"","port_geometry"],[11,2,1,"","ports"]],"pylinkage.mechanism.builder.PendingTracker":[[11,2,1,"","angle"],[11,2,1,"","distance"],[11,2,1,"","id"],[11,2,1,"","ref_port1"],[11,2,1,"","ref_port2"]],"pylinkage.mechanism.builder.Port":[[11,2,1,"","id"],[11,2,1,"","local_position"]],"pylinkage.mechanism.builder.PrismaticConnection":[[11,2,1,"","axis_id"],[11,2,1,"","port"]],"pylinkage.mechanism.builder.SlideAxis":[[11,2,1,"","direction"],[11,4,1,"","get_line_points"],[11,4,1,"","get_normalized_direction"],[11,2,1,"","id"],[11,2,1,"","point"]],"pylinkage.mechanism.factories":[[11,6,1,"","fourbar"],[11,6,1,"","slider_crank"]],"pylinkage.mechanism.joint":[[11,1,1,"","GroundJoint"],[11,1,1,"","Joint"],[11,1,1,"","JointType"],[11,1,1,"","PrismaticJoint"],[11,1,1,"","RevoluteJoint"],[11,1,1,"","TrackerJoint"]],"pylinkage.mechanism.joint.GroundJoint":[[11,2,1,"","is_ground"],[11,3,1,"","joint_type"]],"pylinkage.mechanism.joint.Joint":[[11,2,1,"","acceleration"],[11,4,1,"","coord"],[11,2,1,"","id"],[11,4,1,"","is_defined"],[11,3,1,"","joint_type"],[11,3,1,"","links"],[11,2,1,"","name"],[11,2,1,"","position"],[11,4,1,"","set_coord"],[11,2,1,"","velocity"],[11,3,1,"","x"],[11,3,1,"","y"]],"pylinkage.mechanism.joint.JointType":[[11,2,1,"","GROUND"],[11,2,1,"","PRISMATIC"],[11,2,1,"","REVOLUTE"],[11,2,1,"","TRACKER"]],"pylinkage.mechanism.joint.PrismaticJoint":[[11,2,1,"","axis"],[11,4,1,"","get_axis_normalized"],[11,3,1,"","joint_type"],[11,2,1,"","line_point"],[11,2,1,"","slide_distance"]],"pylinkage.mechanism.joint.RevoluteJoint":[[11,3,1,"","joint_type"]],"pylinkage.mechanism.joint.TrackerJoint":[[11,2,1,"","angle"],[11,2,1,"","distance"],[11,3,1,"","joint_type"],[11,2,1,"","ref_joint1_id"],[11,2,1,"","ref_joint2_id"],[11,4,1,"","update_position"]],"pylinkage.mechanism.link":[[11,1,1,"","ArcDriverLink"],[11,1,1,"","DriverLink"],[11,1,1,"","GroundLink"],[11,1,1,"","Link"],[11,1,1,"","LinkType"]],"pylinkage.mechanism.link.ArcDriverLink":[[11,2,1,"","angular_velocity"],[11,2,1,"","arc_end"],[11,2,1,"","arc_start"],[11,2,1,"","current_angle"],[11,2,1,"","initial_angle"],[11,3,1,"","link_type"],[11,2,1,"","motor_joint"],[11,3,1,"","output_joint"],[11,3,1,"","radius"],[11,4,1,"","read_angle"],[11,4,1,"","reset"],[11,4,1,"","step"]],"pylinkage.mechanism.link.DriverLink":[[11,2,1,"","angular_velocity"],[11,2,1,"","current_angle"],[11,2,1,"","initial_angle"],[11,3,1,"","link_type"],[11,2,1,"","motor_joint"],[11,3,1,"","output_joint"],[11,3,1,"","radius"],[11,4,1,"","read_angle"],[11,4,1,"","reset"],[11,4,1,"","step"]],"pylinkage.mechanism.link.GroundLink":[[11,2,1,"","is_ground"],[11,3,1,"","link_type"]],"pylinkage.mechanism.link.Link":[[11,4,1,"","cache_distances"],[11,4,1,"","get_distance"],[11,2,1,"","id"],[11,2,1,"","joints"],[11,3,1,"","length"],[11,3,1,"","link_type"],[11,2,1,"","name"],[11,3,1,"","order"],[11,4,1,"","other_joint"],[11,4,1,"","set_distance"]],"pylinkage.mechanism.link.LinkType":[[11,2,1,"","BINARY"],[11,2,1,"","DRIVER"],[11,2,1,"","GROUND"],[11,2,1,"","QUATERNARY"],[11,2,1,"","TERNARY"]],"pylinkage.mechanism.mechanism":[[11,1,1,"","Mechanism"]],"pylinkage.mechanism.mechanism.Mechanism":[[11,4,1,"","analyze_sensitivity"],[11,4,1,"","analyze_stroke"],[11,4,1,"","analyze_tolerance"],[11,4,1,"","analyze_transmission"],[11,4,1,"","compile"],[11,4,1,"","get_accelerations"],[11,4,1,"","get_constraints"],[11,4,1,"","get_coords"],[11,4,1,"","get_joint"],[11,4,1,"","get_joint_positions"],[11,4,1,"","get_link"],[11,4,1,"","get_rotation_period"],[11,4,1,"","get_velocities"],[11,2,1,"","ground"],[11,4,1,"","indeterminacy"],[11,2,1,"","joints"],[11,2,1,"","links"],[11,2,1,"","name"],[11,4,1,"","rebuild"],[11,4,1,"","reset"],[11,4,1,"","set_completely"],[11,4,1,"","set_constraints"],[11,4,1,"","set_coords"],[11,4,1,"","set_input_velocity"],[11,4,1,"","set_joint_positions"],[11,4,1,"","simulation"],[11,4,1,"","step"],[11,4,1,"","step_fast"],[11,4,1,"","step_fast_with_kinematics"],[11,4,1,"","step_with_derivatives"],[11,4,1,"","stroke_position"],[11,4,1,"","transmission_angle"]],"pylinkage.mechanism.serialization":[[11,6,1,"","is_legacy_format"],[11,6,1,"","joint_from_dict"],[11,6,1,"","joint_to_dict"],[11,6,1,"","link_from_dict"],[11,6,1,"","link_to_dict"],[11,6,1,"","mechanism_from_dict"],[11,6,1,"","mechanism_from_json"],[11,6,1,"","mechanism_to_dict"],[11,6,1,"","mechanism_to_json"]],"pylinkage.optimization":[[12,0,0,"-","async_optimization"],[12,0,0,"-","co_optimization_types"],[12,0,0,"-","grid_search"],[12,0,0,"-","mixed_variable"],[12,0,0,"-","multi_objective"],[12,0,0,"-","operators"],[12,0,0,"-","particle_swarm"],[12,0,0,"-","scipy_optimize"],[12,0,0,"-","topology_neighborhood"],[12,0,0,"-","utils"],[12,0,0,"-","warm_start"]],"pylinkage.optimization.async_optimization":[[12,1,1,"","OptimizationProgress"],[12,5,1,"","ProgressCallback"],[12,6,1,"","differential_evolution_optimization_async"],[12,6,1,"","minimize_linkage_async"],[12,6,1,"","particle_swarm_optimization_async"],[12,6,1,"","trials_and_errors_optimization_async"]],"pylinkage.optimization.async_optimization.OptimizationProgress":[[12,2,1,"","best_score"],[12,2,1,"","current_iteration"],[12,2,1,"","is_complete"],[12,3,1,"","progress_fraction"],[12,2,1,"","total_iterations"]],"pylinkage.optimization.co_optimization_types":[[12,1,1,"","CoOptSolution"],[12,1,1,"","CoOptimizationConfig"],[12,1,1,"","CoOptimizationResult"],[12,1,1,"","MixedChromosome"]],"pylinkage.optimization.co_optimization_types.CoOptSolution":[[12,2,1,"","chromosome"],[12,2,1,"","linkage"],[12,2,1,"","scores"],[12,2,1,"","topology_entry"]],"pylinkage.optimization.co_optimization_types.CoOptimizationConfig":[[12,2,1,"","algorithm"],[12,2,1,"","crossover_prob"],[12,2,1,"","dimension_bounds_factor"],[12,2,1,"","dimension_mutation_sigma"],[12,2,1,"","max_links"],[12,2,1,"","n_generations"],[12,2,1,"","pop_size"],[12,2,1,"","seed"],[12,2,1,"","topology_mutation_rate"],[12,2,1,"","verbose"]],"pylinkage.optimization.co_optimization_types.CoOptimizationResult":[[12,2,1,"","config"],[12,2,1,"","convergence_history"],[12,2,1,"","n_evaluations"],[12,2,1,"","pareto_front"],[12,2,1,"","solutions"]],"pylinkage.optimization.co_optimization_types.MixedChromosome":[[12,4,1,"","copy"],[12,2,1,"","dimensions"],[12,2,1,"","topology_idx"]],"pylinkage.optimization.collections":[[13,0,0,"-","agent"],[13,0,0,"-","mutable_agent"],[13,0,0,"-","pareto"]],"pylinkage.optimization.collections.agent":[[13,1,1,"","Agent"]],"pylinkage.optimization.collections.agent.Agent":[[13,3,1,"","init_positions"]],"pylinkage.optimization.collections.mutable_agent":[[13,1,1,"","MutableAgent"]],"pylinkage.optimization.collections.mutable_agent.MutableAgent":[[13,2,1,"","dimensions"],[13,3,1,"","init_positions"],[13,2,1,"","initial_positions"],[13,2,1,"","score"]],"pylinkage.optimization.collections.pareto":[[13,1,1,"","ParetoFront"],[13,1,1,"","ParetoSolution"]],"pylinkage.optimization.collections.pareto.ParetoFront":[[13,4,1,"","best_compromise"],[13,4,1,"","filter"],[13,4,1,"","hypervolume"],[13,3,1,"","n_objectives"],[13,2,1,"","objective_names"],[13,4,1,"","plot"],[13,4,1,"","scores_array"],[13,2,1,"","solutions"]],"pylinkage.optimization.collections.pareto.ParetoSolution":[[13,2,1,"","dimensions"],[13,4,1,"","dominates"],[13,3,1,"","init_positions"],[13,2,1,"","initial_positions"],[13,2,1,"","scores"]],"pylinkage.optimization.grid_search":[[12,6,1,"","fast_variator"],[12,6,1,"","sequential_variator"],[12,6,1,"","trials_and_errors_optimization"]],"pylinkage.optimization.mixed_variable":[[12,6,1,"","co_optimize"]],"pylinkage.optimization.multi_objective":[[12,1,1,"","LinkageProblem"],[12,6,1,"","multi_objective_optimization"]],"pylinkage.optimization.multi_objective.LinkageProblem":[[12,4,1,"","close"],[12,3,1,"","problem"]],"pylinkage.optimization.operators":[[12,1,1,"","MixedCrossover"],[12,1,1,"","MixedMutation"],[12,6,1,"","warm_start_sampling"]],"pylinkage.optimization.particle_swarm":[[12,6,1,"","particle_swarm_optimization"]],"pylinkage.optimization.scipy_optimize":[[12,6,1,"","chain_optimizers"],[12,6,1,"","differential_evolution_optimization"],[12,6,1,"","dual_annealing_optimization"],[12,6,1,"","minimize_linkage"]],"pylinkage.optimization.topology_neighborhood":[[12,1,1,"","TopologyNeighbor"],[12,6,1,"","build_neighborhood_graph"],[12,6,1,"","topology_distance"],[12,6,1,"","topology_neighbors"]],"pylinkage.optimization.topology_neighborhood.TopologyNeighbor":[[12,2,1,"","description"],[12,2,1,"","operation"],[12,2,1,"","target_id"]],"pylinkage.optimization.utils":[[12,6,1,"","generate_bounds"],[12,6,1,"","kinematic_maximization"],[12,6,1,"","kinematic_minimization"]],"pylinkage.optimization.warm_start":[[12,6,1,"","synthesis_to_chromosomes"],[12,6,1,"","warm_start_co_optimization"]],"pylinkage.simulation":[[15,0,0,"-","linkage"]],"pylinkage.simulation.linkage":[[15,1,1,"","Linkage"]],"pylinkage.simulation.linkage.Linkage":[[15,4,1,"","analyze_sensitivity"],[15,4,1,"","analyze_stroke"],[15,4,1,"","analyze_tolerance"],[15,4,1,"","analyze_transmission"],[15,4,1,"","compile"],[15,2,1,"","components"],[15,3,1,"","dyads"],[15,4,1,"","get_accelerations"],[15,4,1,"","get_constraints"],[15,4,1,"","get_coords"],[15,4,1,"","get_rotation_period"],[15,4,1,"","get_velocities"],[15,4,1,"","indeterminacy"],[15,2,1,"","name"],[15,4,1,"","rebuild"],[15,4,1,"","set_completely"],[15,4,1,"","set_constraints"],[15,4,1,"","set_coords"],[15,4,1,"","set_input_velocity"],[15,4,1,"","simulation"],[15,4,1,"","step"],[15,4,1,"","step_fast"],[15,4,1,"","step_fast_with_kinematics"],[15,4,1,"","step_with_derivatives"],[15,4,1,"","stroke_position"],[15,4,1,"","to_hypergraph"],[15,4,1,"","transmission_angle"]],"pylinkage.solver":[[16,0,0,"-","acceleration"],[16,0,0,"-","groups"],[16,0,0,"-","joints"],[16,0,0,"-","simulation"],[16,0,0,"-","solve"],[16,0,0,"-","types"],[16,0,0,"-","velocity"]],"pylinkage.solver.acceleration":[[16,6,1,"","solve_crank_acceleration"],[16,6,1,"","solve_fixed_acceleration"],[16,6,1,"","solve_prismatic_acceleration"],[16,6,1,"","solve_revolute_acceleration"],[16,6,1,"","solve_rigid_body_acceleration"]],"pylinkage.solver.groups":[[16,6,1,"","solve_pp_dyad"],[16,6,1,"","solve_rrp_dyad"],[16,6,1,"","solve_rrr_dyad"],[16,6,1,"","solve_triad"]],"pylinkage.solver.joints":[[16,6,1,"","solve_arc_crank"],[16,6,1,"","solve_crank"],[16,6,1,"","solve_fixed"],[16,6,1,"","solve_line_line"],[16,6,1,"","solve_linear"],[16,6,1,"","solve_linear_actuator"],[16,6,1,"","solve_oscillating_cam_follower"],[16,6,1,"","solve_revolute"],[16,6,1,"","solve_translating_cam_follower"]],"pylinkage.solver.simulation":[[16,6,1,"","first_nan_step"],[16,6,1,"","has_nan_positions"],[16,6,1,"","simulate"],[16,6,1,"","simulate_with_kinematics"],[16,6,1,"","step_single"],[16,6,1,"","step_single_acceleration"],[16,6,1,"","step_single_velocity"]],"pylinkage.solver.solve":[[16,6,1,"","solve_decomposition"],[16,6,1,"","solve_group"]],"pylinkage.solver.types":[[16,1,1,"","SolverData"]],"pylinkage.solver.types.SolverData":[[16,2,1,"","accelerations"],[16,2,1,"","alpha_values"],[16,2,1,"","constraint_counts"],[16,2,1,"","constraint_offsets"],[16,2,1,"","constraints"],[16,4,1,"","copy"],[16,2,1,"","crank_indices"],[16,2,1,"","joint_types"],[16,3,1,"","n_constraints"],[16,3,1,"","n_joints"],[16,2,1,"","omega_values"],[16,2,1,"","parent_indices"],[16,2,1,"","positions"],[16,2,1,"","solve_order"],[16,2,1,"","velocities"]],"pylinkage.solver.velocity":[[16,6,1,"","solve_crank_velocity"],[16,6,1,"","solve_fixed_velocity"],[16,6,1,"","solve_prismatic_velocity"],[16,6,1,"","solve_revolute_velocity"],[16,6,1,"","solve_rigid_body_velocity"]],"pylinkage.symbolic":[[17,0,0,"-","conversion"],[17,0,0,"-","geometry"],[17,0,0,"-","joints"],[17,0,0,"-","linkage"],[17,0,0,"-","optimization"],[17,0,0,"-","solver"]],"pylinkage.symbolic.conversion":[[17,6,1,"","fourbar_symbolic"],[17,6,1,"","get_numeric_parameters"]],"pylinkage.symbolic.geometry":[[17,6,1,"","symbolic_circle_intersect"],[17,6,1,"","symbolic_circle_line_intersect"],[17,6,1,"","symbolic_cyl_to_cart"],[17,6,1,"","symbolic_dist"],[17,6,1,"","symbolic_sqr_dist"]],"pylinkage.symbolic.joints":[[17,1,1,"","SymCrank"],[17,1,1,"","SymJoint"],[17,1,1,"","SymRevolute"],[17,1,1,"","SymStatic"]],"pylinkage.symbolic.joints.SymCrank":[[17,4,1,"","constraint_equations"],[17,3,1,"","parameters"],[17,4,1,"","position_expr"],[17,2,1,"","r"],[17,2,1,"","theta"]],"pylinkage.symbolic.joints.SymJoint":[[17,4,1,"","constraint_equations"],[17,2,1,"","name"],[17,3,1,"","parameters"],[17,2,1,"","parent0"],[17,2,1,"","parent1"],[17,4,1,"","position_expr"]],"pylinkage.symbolic.joints.SymRevolute":[[17,2,1,"","branch"],[17,4,1,"","constraint_equations"],[17,3,1,"","parameters"],[17,4,1,"","position_expr"],[17,2,1,"","r0"],[17,2,1,"","r1"]],"pylinkage.symbolic.joints.SymStatic":[[17,4,1,"","constraint_equations"],[17,4,1,"","position_expr"]],"pylinkage.symbolic.linkage":[[17,1,1,"","SymbolicLinkage"]],"pylinkage.symbolic.linkage.SymbolicLinkage":[[17,4,1,"","coupler_curve"],[17,4,1,"","get_constraint_equations"],[17,4,1,"","get_joint"],[17,4,1,"","get_trajectory_expressions"],[17,4,1,"","jacobian"],[17,4,1,"","jacobian_theta"],[17,2,1,"","joints"],[17,2,1,"","name"],[17,3,1,"","parameters"],[17,4,1,"","simplify"],[17,4,1,"","substitute"],[17,2,1,"","theta"]],"pylinkage.symbolic.optimization":[[17,1,1,"","OptimizationResult"],[17,1,1,"","SymbolicOptimizer"],[17,6,1,"","generate_symbolic_bounds"],[17,6,1,"","symbolic_gradient"],[17,6,1,"","symbolic_hessian"]],"pylinkage.symbolic.optimization.OptimizationResult":[[17,2,1,"","iterations"],[17,2,1,"","message"],[17,2,1,"","objective_value"],[17,2,1,"","params"],[17,2,1,"","success"]],"pylinkage.symbolic.optimization.SymbolicOptimizer":[[17,4,1,"","evaluate"],[17,4,1,"","gradient"],[17,4,1,"","optimize"]],"pylinkage.symbolic.solver":[[17,6,1,"","check_buildability"],[17,6,1,"","compute_trajectory_numeric"],[17,6,1,"","create_trajectory_functions"],[17,6,1,"","eliminate_theta"],[17,6,1,"","solve_linkage_symbolically"]],"pylinkage.synthesis":[[18,0,0,"-","burmester"],[18,0,0,"-","conversion"],[18,0,0,"-","core"],[18,0,0,"-","function_generation"],[18,0,0,"-","generalized"],[18,0,0,"-","motion_generation"],[18,0,0,"-","multi_topology"],[18,0,0,"-","path_generation"],[18,0,0,"-","ranking"],[18,0,0,"-","six_bar"],[18,0,0,"-","topology_types"],[18,0,0,"-","utils"]],"pylinkage.synthesis.burmester":[[18,6,1,"","complex_to_point"],[18,6,1,"","compute_all_poles"],[18,6,1,"","compute_circle_point_curve"],[18,6,1,"","compute_pole"],[18,6,1,"","compute_relative_pole"],[18,6,1,"","point_to_complex"],[18,6,1,"","select_compatible_dyads"]],"pylinkage.synthesis.conversion":[[18,6,1,"","fourbar_from_lengths"],[18,6,1,"","linkage_to_synthesis_params"],[18,6,1,"","nbar_solution_to_linkage"],[18,6,1,"","solution_to_linkage"],[18,6,1,"","solutions_to_linkages"],[18,6,1,"","stephenson_from_lengths"],[18,6,1,"","watt_from_lengths"]],"pylinkage.synthesis.core":[[18,1,1,"","BurmesterCurves"],[18,1,1,"","BurmesterDyad"],[18,1,1,"","SynthesisProblem"],[18,1,1,"","SynthesisResult"]],"pylinkage.synthesis.core.BurmesterCurves":[[18,2,1,"","center_curve"],[18,2,1,"","circle_curve"],[18,4,1,"","filter_finite"],[18,4,1,"","get_all_dyads"],[18,4,1,"","get_dyad"],[18,2,1,"","is_discrete"],[18,2,1,"","parameter"],[18,4,1,"","sample"]],"pylinkage.synthesis.core.BurmesterDyad":[[18,2,1,"","center_point"],[18,2,1,"","circle_point"],[18,3,1,"","link_length"],[18,4,1,"","to_cartesian"],[18,4,1,"","to_dyad_solution"]],"pylinkage.synthesis.core.SynthesisProblem":[[18,2,1,"","angle_pairs"],[18,2,1,"","ground_length"],[18,2,1,"","ground_pivot_a"],[18,2,1,"","ground_pivot_d"],[18,3,1,"","num_precision_positions"],[18,2,1,"","poses"],[18,2,1,"","precision_points"],[18,2,1,"","synthesis_type"]],"pylinkage.synthesis.core.SynthesisResult":[[18,2,1,"","branch_info"],[18,3,1,"","ensemble"],[18,2,1,"","problem"],[18,2,1,"","raw_solutions"],[18,2,1,"","solutions"],[18,2,1,"","warnings"]],"pylinkage.synthesis.function_generation":[[18,6,1,"","coefficients_to_link_lengths"],[18,6,1,"","freudenstein_equation"],[18,6,1,"","function_generation"],[18,6,1,"","solve_freudenstein_3_positions"],[18,6,1,"","solve_freudenstein_least_squares"],[18,6,1,"","verify_function_generation"]],"pylinkage.synthesis.generalized":[[18,6,1,"","generalized_synthesis"]],"pylinkage.synthesis.motion_generation":[[18,6,1,"","motion_generation"],[18,6,1,"","motion_generation_3_poses"]],"pylinkage.synthesis.multi_topology":[[18,6,1,"","rank_solutions"],[18,6,1,"","synthesize"]],"pylinkage.synthesis.path_generation":[[18,5,1,"","DEFAULT_ORIENTATION_RESOLUTION"],[18,5,1,"","MAX_ORIENTATION_CANDIDATES"],[18,6,1,"","path_generation"],[18,6,1,"","path_generation_with_timing"],[18,6,1,"","verify_path_generation"]],"pylinkage.synthesis.ranking":[[18,6,1,"","compute_compactness"],[18,6,1,"","compute_link_ratio"],[18,6,1,"","compute_metrics"],[18,6,1,"","compute_path_accuracy"],[18,6,1,"","compute_transmission_angle"],[18,6,1,"","score_solution"]],"pylinkage.synthesis.six_bar":[[18,6,1,"","six_bar_path_generation"]],"pylinkage.synthesis.topology_types":[[18,1,1,"","GroupSynthesisResult"],[18,1,1,"","NBarSolution"],[18,1,1,"","QualityMetrics"],[18,1,1,"","TopologySolution"]],"pylinkage.synthesis.topology_types.GroupSynthesisResult":[[18,2,1,"","dyads"],[18,2,1,"","group_index"],[18,2,1,"","group_signature"],[18,2,1,"","joint_positions"],[18,2,1,"","precision_indices"],[18,2,1,"","residual"]],"pylinkage.synthesis.topology_types.NBarSolution":[[18,2,1,"","coupler_node"],[18,2,1,"","coupler_point"],[18,2,1,"","group_results"],[18,2,1,"","joint_positions"],[18,2,1,"","link_lengths"],[18,2,1,"","topology_id"]],"pylinkage.synthesis.topology_types.QualityMetrics":[[18,2,1,"","compactness"],[18,2,1,"","is_grashof"],[18,2,1,"","link_ratio"],[18,2,1,"","min_transmission_angle"],[18,2,1,"","num_links"],[18,2,1,"","overall_score"],[18,2,1,"","path_accuracy"]],"pylinkage.synthesis.topology_types.TopologySolution":[[18,2,1,"","linkage"],[18,2,1,"","metrics"],[18,2,1,"","solution"],[18,2,1,"","topology_entry"]],"pylinkage.synthesis.utils":[[18,1,1,"","GrashofType"],[18,6,1,"","angle_between_points"],[18,6,1,"","check_condition_number"],[18,6,1,"","complex_to_point"],[18,6,1,"","crank_angle_limits"],[18,6,1,"","distance"],[18,6,1,"","grashof_check"],[18,6,1,"","is_crank_rocker"],[18,6,1,"","is_grashof"],[18,6,1,"","normalize_angle"],[18,6,1,"","point_to_complex"],[18,6,1,"","rotate_point"],[18,6,1,"","rotation_matrix_2d"],[18,6,1,"","validate_fourbar"]],"pylinkage.synthesis.utils.GrashofType":[[18,2,1,"","CHANGE_POINT"],[18,2,1,"","GRASHOF_CRANK_ROCKER"],[18,2,1,"","GRASHOF_DOUBLE_CRANK"],[18,2,1,"","GRASHOF_DOUBLE_ROCKER"],[18,2,1,"","GRASHOF_ROCKER_CRANK"],[18,2,1,"","NON_GRASHOF"]],"pylinkage.topology":[[19,0,0,"-","analysis"],[19,0,0,"-","catalog"],[19,0,0,"-","enumeration"],[19,0,0,"-","isomorphism"]],"pylinkage.topology.analysis":[[19,1,1,"","MobilityInfo"],[19,6,1,"","compute_dof"],[19,6,1,"","compute_mobility"]],"pylinkage.topology.analysis.MobilityInfo":[[19,2,1,"","dof"],[19,2,1,"","num_full_joints"],[19,2,1,"","num_half_joints"],[19,2,1,"","num_links"]],"pylinkage.topology.catalog":[[19,1,1,"","CatalogEntry"],[19,1,1,"","TopologyCatalog"],[19,6,1,"","generate_catalog"],[19,6,1,"","load_catalog"]],"pylinkage.topology.catalog.CatalogEntry":[[19,2,1,"","assur_groups"],[19,2,1,"","dof"],[19,2,1,"","family"],[19,2,1,"","id"],[19,2,1,"","link_assortment"],[19,2,1,"","name"],[19,2,1,"","num_joints"],[19,2,1,"","num_links"],[19,4,1,"","to_graph"]],"pylinkage.topology.catalog.TopologyCatalog":[[19,4,1,"","all_graphs"],[19,4,1,"","by_family"],[19,4,1,"","by_num_links"],[19,4,1,"","compatible_topologies"],[19,2,1,"","entries"],[19,4,1,"","from_json"],[19,4,1,"","get"],[19,4,1,"","load_builtin"],[19,4,1,"","to_json"],[19,4,1,"","topology_by_index"],[19,4,1,"","topology_index"]],"pylinkage.topology.enumeration":[[19,6,1,"","enumerate_all"],[19,6,1,"","enumerate_topologies"]],"pylinkage.topology.isomorphism":[[19,6,1,"","are_isomorphic"],[19,6,1,"","canonical_form"],[19,6,1,"","canonical_hash"]],"pylinkage.visualizer":[[21,0,0,"-","animated"],[21,0,0,"-","core"],[21,0,0,"-","drawsvg_viz"],[21,0,0,"-","dxf_export"],[21,0,0,"-","kinematics"],[21,0,0,"-","plotly_viz"],[21,0,0,"-","pso_plots"],[21,0,0,"-","static"],[21,0,0,"-","step_export"],[21,0,0,"-","symbols"]],"pylinkage.visualizer.animated":[[21,6,1,"","plot_kinematic_linkage"],[21,6,1,"","show_linkage"],[21,6,1,"","swarm_tiled_repr"],[21,6,1,"","update_animated_plot"]],"pylinkage.visualizer.core":[[21,6,1,"","build_connections"],[21,6,1,"","build_rails"],[21,6,1,"","get_components"],[21,6,1,"","get_parent_pairs"],[21,6,1,"","get_rail_pairs"],[21,6,1,"","is_prismatic_like"],[21,6,1,"","is_revolute_like"],[21,6,1,"","is_static_like"],[21,6,1,"","resolve_component"]],"pylinkage.visualizer.drawsvg_viz":[[21,6,1,"","plot_linkage_svg"],[21,6,1,"","plot_linkage_svg_with_velocity"],[21,6,1,"","save_linkage_svg"],[21,6,1,"","save_linkage_svg_with_velocity"]],"pylinkage.visualizer.dxf_export":[[21,6,1,"","plot_linkage_dxf"],[21,6,1,"","save_linkage_dxf"]],"pylinkage.visualizer.kinematics":[[21,6,1,"","animate_kinematics"],[21,6,1,"","plot_acceleration_vectors"],[21,6,1,"","plot_kinematics_frame"],[21,6,1,"","plot_velocity_vectors"],[21,6,1,"","show_kinematics"]],"pylinkage.visualizer.plotly_viz":[[21,6,1,"","animate_linkage_plotly"],[21,6,1,"","interactive_linkage_plotly"],[21,6,1,"","plot_linkage_plotly"],[21,6,1,"","plot_linkage_plotly_with_velocity"]],"pylinkage.visualizer.pso_plots":[[21,6,1,"","animate_dashboard"],[21,6,1,"","animate_parallel_coordinates"],[21,6,1,"","dashboard_layout"],[21,6,1,"","normalize_data"],[21,6,1,"","parallel_coordinates_plot"]],"pylinkage.visualizer.static":[[21,6,1,"","plot_static_linkage"]],"pylinkage.visualizer.step_export":[[21,1,1,"","JointProfile"],[21,1,1,"","LinkProfile"],[21,6,1,"","build_linkage_3d"],[21,6,1,"","save_linkage_step"]],"pylinkage.visualizer.step_export.JointProfile":[[21,2,1,"","length"],[21,2,1,"","radius"]],"pylinkage.visualizer.step_export.LinkProfile":[[21,2,1,"","fillet_radius"],[21,2,1,"","thickness"],[21,2,1,"","width"]],"pylinkage.visualizer.symbols":[[21,1,1,"","LinkStyle"],[21,1,1,"","SymbolSpec"],[21,1,1,"","SymbolType"],[21,6,1,"","get_link_color"],[21,6,1,"","get_symbol_spec"],[21,6,1,"","is_ground_joint"]],"pylinkage.visualizer.symbols.LinkStyle":[[21,2,1,"","BAR"],[21,2,1,"","BONE"],[21,2,1,"","LINE"]],"pylinkage.visualizer.symbols.SymbolSpec":[[21,2,1,"","color"],[21,2,1,"","label_offset"],[21,2,1,"","size"],[21,2,1,"","symbol_type"]],"pylinkage.visualizer.symbols.SymbolType":[[21,2,1,"","CRANK"],[21,2,1,"","FIXED"],[21,2,1,"","GROUND"],[21,2,1,"","LINEAR"],[21,2,1,"","REVOLUTE"],[21,2,1,"","SLIDER"]]},"objnames":{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","attribute","Python attribute"],"3":["py","property","Python property"],"4":["py","method","Python method"],"5":["py","data","Python data"],"6":["py","function","Python function"],"7":["py","exception","Python exception"]},"objtypes":{"0":"py:module","1":"py:class","2":"py:attribute","3":"py:property","4":"py:method","5":"py:data","6":"py:function","7":"py:exception"},"terms":{"0066cc":[21,36],"006s":39,"01ms":39,"05_symbolic_coupler_curv":23,"0f":31,"100x":23,"1e":[17,23,36],"1f":[31,38,39,40],"1mm":38,"1x":23,"2196f3":21,"2c":23,"2d":[12,13,16,18,23],"2e":12,"2f":[26,32,36,40],"2j\u2081":23,"2nd":18,"2x":36,"2x2":[16,18],"35000x":39,"350ms":39,"350s":39,"3d":[12,13,21,37],"3f":[18,30,31,32,36,38,39,40],"3x":[23,39],"4f":[10,38,39,40],"4x":[22,23],"5m":29,"5mm":38,"5x":[22,23],"60x":39,"6f":39,"6ms":39,"7840u":22,"7x":29,"800px":41,"8x":23,"A":[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,24,25,26,30,31,32,33,34,36,37,38,39,40,41],"AND":[18,40],"After":[23,25,36,39],"All":[3,11,12,14,16,18,19,23,24,30,31,34,37,38,39,40],"An":[1,2,3,7,9,10,11,12,16,19,21,23,26,30,31,41],"And":18,"At":[3,5,16,18,31,39],"Being":24,"Both":[3,16,22,23,34,40],"By":[36,38,40],"Could":23,"Do":[12,28],"Each":[1,6,10,11,12,14,16,17,18,19,21,22,23,25,33,34,39],"For":[1,3,7,9,10,11,12,13,15,16,17,18,19,21,22,23,24,29,30,31,33,36,38,39,40,41],"From":[8,16,23],"Further":41,"Has":31,"Here":[12,18,30,32,33,39],"How":[12,28,38,39],"I":[3,23,26,38],"If":[1,2,3,7,9,10,11,12,13,14,15,16,17,18,19,21,22,23,26,38,39,40],"In":[12,18,21,23,41],"Is":[38,40],"It":[1,3,6,7,8,9,11,12,13,15,16,18,21,22,23,25,26,28],"Its":[11,17,23,29,40],"More":[18,23,30],"Most":[11,18,37,38],"My":[26,41],"NO":3,"NOT":3,"No":[1,3,6,7,8,13,23,24,25,30,34,40],"Not":[19,40],"On":[11,22,23],"Or":[30,33,40,41],"Other":24,"Our":28,"Over":[18,19],"Same":[1,2,8,12,23,34],"Should":[1,11,12,13],"So":23,"Some":[23,25,33],"Such":[14,23],"That":[22,23,25],"The":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,29,30,31,32,33,36,37,38,39,40,41],"Their":18,"There":[12,39],"These":[3,7,9,11,16,22,23,31,34,38],"They":[1,3,6,11,23,25,29],"This":[1,2,3,4,5,6,7,9,10,11,12,15,16,17,18,19,21,23,24,26,30,31,32,33,34,36,37,38,39,40,41],"Those":[7,22,23],"To":[0,3,21,25,29,33],"Under":[25,34],"Up":18,"We":[16,18,23,24,33],"What":[23,28,35],"When":[1,7,11,12,16,23,32,39,40],"Where":[16,18],"Which":[1,10,12,13,18,21,23,38,41],"With":[3,18,23,29,32,36,37,40],"You":[13,23,29,34,35,38,40,41],"Your":30,"_":[3,7,26,29,30,36,38,39,41],"__all__":[0,23,25],"__bool__":23,"__dict__":32,"__find_solving_order__":23,"__getattr__":23,"__getitem__":23,"__init__":[23,32],"__iter__":23,"__len__":23,"__main__":26,"__name__":[3,26,34],"__secant_circles_intersections__":23,"__slots__":32,"_adjac":[3,9],"_agentbas":13,"_anchorproxi":[1,2,6,7,21,23],"_assur_dimens":11,"_assur_graph":11,"_cached_dist":11,"_compat":[4,10,23],"_compute_crank_limit":23,"_configur":11,"_connect":11,"_constraints_by_joint":26,"_convers":23,"_crank":36,"_decomposit":[3,11],"_deprec":23,"_dimens":3,"_direct":11,"_driver_link":11,"_ensembl":18,"_generic_nbar_to_linkag":23,"_get_anchor_posit":[23,32],"_graph":3,"_graph_data":19,"_ground_link_id":11,"_ground_port":11,"_hyperedge_membership":9,"_joint_map":11,"_link":[11,23],"_link_map":11,"_mechanism_to_solver_data":23,"_member":25,"_numeric_":[17,39],"_numeric_r":39,"_numeric_r0":39,"_parent":21,"_pending_link":11,"_pending_track":11,"_prismatic_connect":11,"_rail0":[9,23],"_rail1":[9,23],"_replac":40,"_signatur":3,"_simulation_context":[11,23],"_simulationcontext":[1,11,15],"_slide_ax":11,"_solve_ord":11,"_solver_data":[1,11,15,23],"_staticbas":23,"_time":32,"_trajectori":14,"_trt_":[7,16],"_type":[3,9,18,23,25],"_use_group_solv":11,"a0":16,"a1":16,"ab":[1,3,9,11,12,19,26,34,36,37],"ab_p":26,"abbrevi":23,"abc":[3,5,6,11,12,17],"abcsic":23,"abort":23,"abov":[22,23,25,29,32,34,36],"abscissa":[1,8],"absent":23,"absolut":[1,8,22,23],"abstract":[3,4,5,6,9,11,14,17,23,29,32],"abstractmethod":[3,5,6,17],"abus":24,"academ":[21,41],"acc":[1,15],"acceler":[0,1,5,6,11,12,15,21,23,29,31,32,33,35,36,37,38,40],"acceleration_scal":21,"accelerations_trajectori":16,"accept":[1,3,10,12,15,18,21,23,24,32,37,38,41],"acceptable_rang":[1,10,11,15],"access":[1,3,6,7,13,14,16,17,18,23,36,40],"accessor":23,"accord":[18,23],"account":[3,19,24],"accur":[37,38],"accuraci":[12,18,37,38],"accuracy_obj":12,"achiev":[16,18,29,30,36,40],"across":[10,12,14,18,22,23,29,32,41],"act":24,"action":[24,26],"activ":2,"actual":[9,11,18,23,30,39],"actuat":[0,1,3,4,6,7,9,10,15,16,18,23,25,26,29,30,31,32,33,36,37,38,39,41],"adapt":[12,23,24],"add":[1,3,6,7,9,11,14,15,18,21,22,29,32,33,36,41],"add_arc_driver_link":[1,11],"add_connect":[1,9],"add_driver_link":[1,11,29],"add_dyad":[12,23],"add_edg":[1,3,9,19,34],"add_ensembl":14,"add_ground_link":[1,11,29],"add_hyperedg":[1,9,34],"add_inst":[1,9],"add_link":[1,11,29],"add_nod":[1,3,9,19,34],"add_point_track":[1,11],"add_quaternary_link":[1,11],"add_slide_axi":[1,11],"add_subplot":26,"add_ternary_link":[1,11],"addit":[3,12,13,21,23,30,32,40],"address":24,"adher":23,"adjac":[9,12,18,19,23],"admit":22,"advanc":[1,2,11,18,21,24,26,28,31,32,33,36,38,39],"advertis":23,"advic":23,"advis":23,"advisori":23,"affect":[1,6,10,11,23,24,25,38,39],"afterward":0,"age":24,"agent":[1,12,14,21,23,26,41],"aggress":24,"agnost":23,"agre":[16,23],"al":18,"algebra":[17,18,39],"algorithm":[1,3,12,17,18,23,29,34],"alia":[1,3,6,9,11,12,13,15,18,23,25],"alias":[23,25],"align":[23,24,41],"alik":23,"all_graph":[1,19],"all_neighbor":[1,9],"all_nodes_in_ord":[1,3],"all_point":[30,37,40],"all_satisfi":18,"all_veloc":36,"allow":[1,3,4,7,9,11,12,23,24,31],"almost":[12,18,23],"alon":23,"along":[1,2,7,9,10,11,16,18,19,23,31,32,34,37,41],"alongsid":[17,23,36,41],"alpha":[1,10,11,12,15,16,21,23,36,37,38,41],"alpha_valu":[1,16],"alphabet":[0,23],"alreadi":[3,9,14,23,32,40],"also":[10,11,13,16,19,22,23,24,25,29,31,34,36,38,40],"altern":[3,23],"although":23,"alway":[1,6,7,10,16,18,23,25,32,39],"ambigu":[1,6,7,19],"amd":22,"among":[23,34],"amount":10,"amplitud":[1,10,32],"analys":3,"analysi":[0,1,6,9,11,12,15,16,17,18,23,25,32,35,36,41],"analyt":[5,16,17,18,23,35,36,39,40],"analyz":[1,3,9,10,11,15,17,18,23,29,30,31],"analyze_loci":30,"analyze_sensit":[1,10,11,15,23,38],"analyze_strok":[1,10,11,15,23],"analyze_toler":[1,10,11,15,23,38],"analyze_transmiss":[1,10,11,12,15,23,37],"anchor":[1,2,3,6,7,9,15,16,17,18,21,23,25,26,29,30,31,32,33,34,36,37,38,39,41],"anchor0":16,"anchor0_po":16,"anchor1":[1,6,7,15,16,21,26,29,30,31,32,33,36,37,38,39,41],"anchor1_po":16,"anchor2":[1,6,7,15,21,26,29,30,31,32,33,36,37,38,39,41],"anchor_0":3,"anchor_1":3,"anchor_2":3,"anchor_a":16,"anchor_ax":16,"anchor_ay":16,"anchor_i":16,"anchor_nod":[1,3,16,34],"anchor_node_id":3,"anchor_po":16,"anchor_v":16,"anchor_vi":16,"anchor_vx":16,"anchor_x":16,"angl":[1,2,3,5,6,7,8,9,10,11,12,15,16,17,18,21,22,23,26,29,30,32,33,37,39,40],"angle_between_point":[1,18],"angle_pair":[1,18,40],"angle_r":16,"anglepair":[18,23],"angular":[1,2,7,11,15,16,18,23,31,33,34,41],"angular_displac":[1,7],"angular_veloc":[0,1,2,7,11,15,26,29,30,31,32,33,34,36,37,38,39,41],"ani":[1,3,4,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,24,25,31,32,34,36,41],"anim":[0,1,14,23,26,29,30,33,34,35,36],"animate_dashboard":[1,21,30,41],"animate_kinemat":[1,21,23,36,41],"animate_linkage_plot":[1,21,41],"animate_parallel_coordin":[1,21],"animated_linkag":41,"ankl":26,"anneal":[12,23],"annot":[21,23,25],"announc":[23,25],"anoth":[12,13,23,25,26,32,34,37],"answer":[23,24,36,38],"anyjoint":23,"anylink":23,"anymor":23,"anyon":23,"anyth":[9,12,23],"anyway":23,"anywher":25,"apart":[23,25],"apertur":26,"api":[4,7,9,10,11,16,17,18,21,22,23,26,30,34,37,39,40,41],"apidoc":23,"apolog":24,"appear":[0,1,11,15,23,24],"append":[26,30,41],"appl":23,"appli":[1,6,11,15,16,22,23,24,25,30,33,34,37],"applic":[5,16,18,21,26,29,31,36,40,41],"appoint":24,"approach":[11,18,19,29,30,37,40],"appropri":[3,7,16,23,24],"approxim":[5,12,16,18,23,39,40],"arbitrari":[1,8,14,18,23],"arc":[1,2,11,15,16,18,23,40],"arc_crank":[0,1,11],"arc_end":[1,2,11,15,16],"arc_limit":[18,23,40],"arc_start":[1,2,11,15,16],"arccrank":[1,2,7,9,18,23,25,32,40],"arcdriverlink":[1,11,23],"architectur":28,"are_isomorph":[1,19,23,34],"area":[18,37,39],"arg":[1,2,5,6,7,12,23,26,32],"argument":[12,13,21,22,23,41],"arial":41,"arm":[7,16,18,23,31],"arm_angl":[1,7,16],"arm_length":[1,7,16,31],"around":[1,2,11,12,16,17,23,24,30,32,40],"arrang":[3,11],"array":[1,4,5,10,11,12,13,14,15,16,17,18,21,23,33,36,37,39],"arriv":23,"arrow":[21,41],"article_swarm_optim":23,"artist":[21,26],"ascend":[14,18],"ascii":23,"ask":[22,23,40],"aspect":[3,9],"assembl":[3,9,11,17,18,23,29,30,32,33,34,36,39,40],"assess":38,"assign":[3,12,13,18,23],"assort":23,"assum":[9,23],"assumpt":39,"assur":[0,1,6,7,9,11,12,16,18,19,23,25,29,33,35],"assur_graph":3,"assur_group":[1,3,19,34],"assur_mechan":[0,1],"assurgroup":[1,3,16],"assurgroupclass":[1,3],"assurmechan":[1,3],"assursignatur":[1,3],"async":[12,23],"async_optim":[0,1],"asyncio":[12,30],"atan2":16,"atlas":19,"attach":[3,11,18,23,33,40],"attack":24,"attent":24,"attribut":[4,11,17,23,25,28,32,39],"attributeerror":23,"author":[1,12,21,26],"auto":[10,12,14,21,23,30,38,41],"autocad":[21,41],"autodoc":23,"autom":34,"automat":[11,14,23,29],"automodul":23,"avail":[5,11,12,14,18,21,23,24,29],"averag":[17,23,36,38],"avg_spe":36,"avoid":[1,12,15,16,17,23,24,30],"await":[11,12,30],"awar":[12,18],"away":11,"ax":[1,6,8,10,12,13,15,16,21,23,26,36,38,41],"ax1":[38,41],"ax2":[38,41],"axe":[10,12,13,21,23,26,41],"axhlin":23,"axi":[1,2,7,8,9,10,11,16,17,18,21,22,23,25,31,36,37,39],"axis_id":[1,11],"ay":[1,6,15,16,21,36],"b":[1,3,7,8,9,10,11,12,16,17,18,19,23,26,33,34,37,39,40],"b_a":26,"b_d":26,"b_p":26,"back":[1,2,4,11,14,18,21,22,23,26,34],"backend":[16,21,23,29,35],"backtrack":[19,23],"backward":[1,3,9,12,13,14,15,23],"bad":[23,30],"badg":23,"balanc":[12,13,37],"ball":18,"bar":[1,3,7,9,10,11,12,15,17,18,19,21,22,23,27,28,30,34,36,37,38,39,40,41],"base":[1,2,3,5,6,7,9,10,11,12,13,14,15,16,17,18,19,21,23,29,30,31,32,35,39,40,41],"base_radius":[1,5,7,31],"baselin":38,"baseline_path_metr":[1,10],"baseline_transmiss":[1,10,38],"basi":[17,23],"basic":[8,11,16,26,33,34,35],"batch":[14,18,23,29,32,40],"bbox":[30,36,37,40],"bc":[9,19,34],"becam":[23,34],"becaus":[1,9,11,12,14,15,16,18,21,22,23,25,32,39,40],"becom":[9,11,14,16,17,18,23,38,40],"befor":[1,10,11,12,18,19,21,23,25,26,36,39,41],"beforehand":36,"begin":[5,23,31,41],"behavior":[1,2,3,10,16,23,24,30,38,39],"behaviour":23,"behind":[18,21,22,23],"belong":[3,9,19,34],"benchmark":[23,28],"benchmark_geometri":22,"benchmark_integr":22,"benchmark_optim":22,"benchmark_solv":22,"besid":23,"best":[5,12,13,18,21,22,23,24,26,29,30,36,38,41],"best1bin":12,"best1exp":12,"best2bin":12,"best2exp":12,"best_compromis":[12,13,14,23,37],"best_scor":[1,12,26,30],"beta":23,"better":[12,13,18,23,30,37],"beyond":[12,18],"bfgs":[12,17],"bfs":12,"bias":23,"big":12,"bigger":[23,33],"bin":26,"binari":[1,3,7,9,11,15,21,23,34],"binarydyad":[1,7,32],"bind":[5,18,31],"bisector":18,"bit":23,"bitrat":26,"blank":23,"blend":[12,23],"blit":26,"block":[6,7,11,12,19,23,26,34],"blue":[21,37,38],"blx":[12,23],"bodi":[1,3,9,11,15,16,18,19,23,24,29,34,40,41],"body_id":[1,3,9],"boilerpl":[11,23],"bold":21,"bone":[1,21,41],"bonus":18,"bool":[1,3,5,9,10,11,12,13,14,15,16,17,18,19,21,23,26],"boolean":23,"bottema":18,"bottom":39,"bounc":[1,2],"bound":[1,6,8,10,11,12,13,17,18,21,22,23,26,29,32,35,36,37,38,39,40,41],"boundari":[2,5,11,31],"bounding_box":[1,8,10,23,26,29,30,36,37,38,40],"bourk":[1,8,17],"box":[1,8,10,18,21,23,26,30,37,41],"bp":34,"bp_a":26,"bp_d":26,"branch":[1,11,17,18,23,34],"branch_info":[1,18],"break":23,"breakdown":23,"bridg":[0,1,3,9,16,17,23],"broken":23,"brought":[1,2,11,23],"browser":41,"budget":22,"bug":23,"buggi":23,"build":[1,6,7,11,12,14,15,17,21,23,26,29,35,40,41],"build123d":[21,23,41],"build_connect":[1,21,23],"build_linkage_3d":[1,21,23,41],"build_neighborhood_graph":[1,12,23],"build_rail":[1,21,23],"buildabl":[1,10,17,23],"builder":[0,1,23],"built":[1,3,9,11,12,14,15,17,18,19,23,29,32,33,34,37],"bullet":23,"bump":23,"bump2vers":23,"bundl":34,"burgmest":23,"burmest":[0,1,22,23,25,29,35],"burmestercurv":[1,18],"burmesterdyad":[1,18,23,25],"button":41,"bx":34,"by_famili":[1,19],"by_num_link":[1,19,34],"bypass":[3,9],"byte":23,"c":[1,7,8,9,10,11,17,18,19,26,33,34,36,37,39,40],"c1":12,"c2":12,"c_i":17,"c_posit":17,"c_x":17,"cach":[1,3,11,12,14,15,18,23,36],"cache_dist":[1,11],"cad":[21,23,25,29],"cadqueri":23,"calcul":[5,23,30,36,39],"call":[1,4,11,12,14,15,16,17,18,22,23,25,32,33,41],"callabl":[1,10,12,14,17,21],"callback":[12,30],"caller":[9,23],"cam":[0,1,3,7,16,23,29,35],"cam_angl":[1,7],"cam_cent":[7,31],"cam_crank":31,"cam_driv":[1,7,31],"came":23,"camprofil":[1,5,7],"can":[1,2,3,4,5,6,9,10,11,12,13,14,17,18,19,22,23,26,28,30,31,32,33,34,36,38,39,40,41],"can_form":[1,3],"cancel":12,"cancellederror":12,"candid":[3,8,12,18,22,23,25,30,37,38,40],"canon":[1,3,16,19,23,34],"canonical_form":[1,3,19,23],"canonical_hash":[1,19,23,34],"canva":[21,41],"cap":40,"capabl":[3,11,17,18,30,35,39],"caption":41,"captur":23,"carlo":[1,10,11,15,29,35,38],"carri":[9,14,16,18,23,25,26,34,37,39],"cartesian":[1,6,8,17,18],"cascad":18,"case":[1,3,9,10,11,12,13,16,18,19,21,23,30,38,39,40],"catalog":[0,1,9,12,14,18,23],"catalogentri":[1,12,18,19,23],"catch":[23,30],"categori":3,"caus":[5,23,31],"cbar_ax":21,"cd":[9,19,23,29,34],"cdn":41,"ceil":[18,26],"cell":[21,26],"center":[1,5,7,8,10,12,16,17,18,23,25,26,30,31,32,40,41],"center1":17,"center_curv":[1,18],"center_point":[1,18],"center_point_xi":18,"center_posit":[1,10],"center_valu":17,"centr":[23,32],"centric":21,"centripet":16,"centroid":16,"certain":[12,30,36],"certifi":23,"cff":23,"cfg":23,"chain":[9,11,18,23,34],"chain_optim":[1,12,23],"chang":[7,10,11,12,18,22,25,26,38,39,40],"change_point":[1,18,40],"changelog":[25,28],"channel":24,"chapter":18,"char":3,"charact":3,"characterist":[24,37],"charg":[22,23],"chassi":34,"cheap":22,"cheapest":25,"chebyshev":[3,11,23],"check":[1,3,9,11,12,13,15,16,17,18,19,21,22,23,25,30,31,34,36,37,38,40,41],"check_build":[1,17],"check_condition_numb":[1,18],"checker":23,"checkout":23,"child":12,"child_idx":21,"choic":[12,31],"choos":[18,23,30],"chord":17,"chosen":[1,7,14],"chromosom":[1,12,23],"chunk":26,"ci":23,"circl":[1,2,5,7,8,11,16,17,18,21,23,25,26,29,33,34,37,39,40],"circle_ax":16,"circle_ay":16,"circle_circl":[3,7,34],"circle_curv":[1,18,40],"circle_i":16,"circle_intersect":[1,8],"circle_lin":[3,7],"circle_line_from_points_intersect":[1,8],"circle_line_intersect":[1,8,23],"circle_point":[1,18],"circle_point_xi":18,"circle_vi":16,"circle_vx":16,"circle_x":16,"circlespher":[1,8],"circular":[18,21,23,39,40],"citat":23,"cite":23,"clarifi":24,"clariti":[23,24],"class":[1,2,3,5,6,7,9,10,11,12,13,14,15,16,17,18,19,21,23,24,25,29,34,35],"classic":[18,22,23,29,39,40],"classif":[3,18,23,34],"classifi":[1,3,4,9,11,34],"classmethod":[1,3,9,14,18,19],"clear":[3,11,23,32,37],"cliqu":[9,19,23],"clone":29,"close":[0,1,5,11,12,17,18,19,23,26,29,30,33,34,39,40,41],"closer":8,"cloud":10,"cls":3,"cmap":21,"cnc":[21,29,41],"co":[9,12,23,25],"co_optim":[1,9,12,23,25],"co_optimization_typ":[0,1],"coars":[23,38],"coarser":[18,22,25,30],"cobyla":12,"code":[3,5,9,16,23,25,26,28,29,33],"code_of_conduct":[23,24,29],"codebas":23,"coeffici":[1,5,8,10,12,17,18,31,35,40],"coefficients_to_link_length":[1,18],"cognit":12,"coincid":[8,16],"cold":12,"collaps":23,"collect":[1,9,11,12,14,15,17,18,19,22,23,25,26],"collid":23,"collinear":[16,18,23],"collis":23,"color":[1,19,21,23,41],"color_switch":23,"colorbar":21,"colormap":21,"column":[10,12,14,17,18,22,23,37],"columnar":[14,23],"com":[8,26,29],"combin":[3,9,11,12,18,21,23,29,30,38,40],"combined_fit":40,"come":[1,10,17,22,23,34,36,38],"command":23,"comment":[24,26],"commit":[23,24,30],"common":[1,3,5,7,10,11,12,16,18,23,24,31,39,40],"communic":24,"communiti":24,"compact":[1,12,18,37],"compactness_obj":12,"companion":[1,9],"compar":[1,8,10,12,13,22,23,39,41],"comparison":[29,41],"compat":[1,2,3,4,5,7,9,11,12,13,14,15,16,18,21,23,32,40,41],"compatible_topolog":[1,19],"compet":[12,37],"compil":[1,11,14,15,16,22,23,29,36],"compiled_tim":39,"complaint":24,"complementari":38,"complet":[1,3,10,11,12,18,23,26,30,31,40],"complete_strid":26,"complex":[3,17,18,33,34,39,40],"complex128":18,"complex_to_point":[1,18,23],"complexpoint":23,"compon":[0,1,2,3,4,7,8,9,10,15,18,21,22,23,25,26,29,30,31,34,35,36,37,38,40,41],"component_instance_from_dict":[1,9],"component_instance_to_dict":[1,9],"componentid":1,"componentinst":[1,9,34],"compos":[29,34],"composit":[9,18,25,29,34],"compound":[21,41],"compress":[12,23],"compromis":[12,13,23],"comput":[1,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,29,32,35,36,40,41],"compute_all_pol":[1,18,40],"compute_circle_point_curv":[1,18,40],"compute_compact":[1,12,18],"compute_dof":[1,19,23,34],"compute_link_ratio":[1,18],"compute_metr":[1,18,23],"compute_mobl":[1,19,23,25,34],"compute_path_accuraci":[1,12,18],"compute_path_error":12,"compute_pol":[1,18],"compute_relative_pol":[1,18],"compute_slide_posit":[1,10],"compute_trajectory_numer":[1,17,29,39],"compute_transmission_angl":[1,10,18],"concaten":32,"concentr":23,"concept":[9,18,23],"concret":[3,9,23],"concurr":[12,23],"concycl":18,"conda":23,"condit":[5,16,18,23,36,40],"conduct":28,"config":[1,12,25,30,39],"configur":[1,10,11,12,15,16,23,29,30,32,33,34,39,40,41],"confirm":22,"conflat":23,"conflict":23,"confus":23,"conn":9,"connect":[1,3,6,7,9,10,11,12,16,17,18,21,23,26,29,34,39,40,41],"connect_prismat":[1,11],"connectedcompon":[1,2,6,7,23,25,32],"connecteddyad":[23,25],"connection_from_dict":[1,9],"connection_to_dict":[1,9],"consecut":12,"consequ":[23,24,25],"consid":[1,8,12,18,23,24,30],"consist":[3,7,11,16,17,18,23,34,41],"consol":12,"constant":[1,2,5,12,16,17,23,36],"constrain":[0,1,11,12,16,17,18,19,23,29,33,34,38,40],"constrained_fit":30,"constraint":[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,23,26,31,32,35,37,40],"constraint_count":[1,16],"constraint_equ":[1,17],"constraint_nam":[1,10,38],"constraint_offset":[1,4,14,16],"constraint_typ":38,"construct":[3,5,12,19,23,24,39,40],"constructor":32,"consum":[9,23,26,30,41],"contact":[7,31],"contain":[0,1,2,3,4,7,9,10,11,12,13,15,16,18,19,21,22,23,25,26,29,33,38,39,41],"content":[0,28],"context":[1,11,15,23],"contigu":[4,16,33],"continu":[1,5,7,11,12,18,23,24,26],"contribut":[1,6,15,23,24,26,28,39],"control":[7,12,18,21,22,23,25,30,38,41],"conveni":[11,18,19,23,25,38],"convent":[3,14,23],"converg":[12,17,23,30,37,39],"convergence_histori":[1,12],"convers":[0,1,3,4,7,9,23,34],"convert":[1,3,4,5,7,8,9,12,14,17,18,19,23,26,29,31,33,37],"convert_legacy_dict":23,"conveyor":36,"cooptimizationconfig":[1,12,23,25],"cooptimizationresult":[1,12,23],"cooptsolut":[1,12,23],"coord":[1,3,6,11,15,16,21,32,33],"coordin":[1,2,5,6,7,8,10,11,17,18,21,23,26,30,33,39,41],"copi":[0,1,3,9,12,16,23,26,39],"core":[0,1,16,23,28,29],"corioli":16,"corner":23,"correct":[3,17,19,22,23,25,30],"correspond":[3,7,18,40],"corrupt":23,"cos":[5,16,17,18,23,39,40],"cosin":[5,18,31],"cost":[1,10,18,22,23,25,38],"count":[1,3,11,12,15,19,22,23,33,34,39,40],"counterclockwis":[17,18],"counterpart":[16,23],"coupler":[1,6,10,11,16,17,18,19,22,23,26,29,30,33,34,37,38,39,40,41],"coupler1":18,"coupler_c":39,"coupler_curv":[1,17],"coupler_dist1":38,"coupler_dist2":38,"coupler_joint":10,"coupler_length":[17,18,29,39,40],"coupler_mechan":34,"coupler_mid":11,"coupler_nod":[1,18],"coupler_path":34,"coupler_pivot_c":18,"coupler_point":[1,7,18],"coupler_point_offset":18,"couplerfourbar":34,"cover":[7,23,29,30,31,32,33,34,36,37,38,39,40,41],"coverag":23,"cp":34,"cpu":22,"cpus":12,"crank":[0,1,3,6,7,9,10,11,14,15,16,17,18,19,21,22,23,25,26,29,30,31,32,33,34,36,37,38,39,40,41],"crank_angl":[18,40],"crank_angle_limit":[1,18,23,40],"crank_b":39,"crank_indic":[1,16],"crank_length":[17,18,29,39,40],"crank_path":30,"crank_pivot_b":18,"crank_r":26,"crank_radius":[10,38],"crash":[23,30],"creat":[1,2,3,5,7,9,10,11,12,13,14,16,17,21,23,26,29,30,31,32,35,36,37,38,41],"create_crank":11,"create_dyad":[1,7],"create_fourbar":37,"create_linkag":[30,36],"create_my_linkag":[4,16],"create_rrr_dyad":11,"create_stroke_engine_linkag":26,"create_trajectory_funct":[1,17,39],"creation":41,"crisp":41,"criterion":[18,40],"critic":[10,38],"cross":[11,16,21,23,25,41],"crossov":12,"crossover_prob":[1,12],"crowd":[12,13,23,37],"cubic":[5,18],"culprit":40,"curr_bb":26,"current":[0,1,2,3,6,7,10,11,12,15,16,18,21,23,28,30,32,39],"current_angl":[1,11,16,23],"current_extens":16,"current_i":16,"current_iter":[1,12,30],"current_swarm":26,"current_x":16,"curv":[5,7,17,18,23,29,31,39],"curvatur":39,"cusp":[18,39],"custom":[5,11,12,13,18,21,23,30,31,33,35,37,39],"custom_joint":23,"custom_linkag":41,"cut":41,"cutter":41,"cx":[8,16,17,32,34],"cy":[8,16,17,32,34],"cycl":[1,3,10,11,15,18,21,23,33,38,41],"cycloid":[5,31],"cycloidalmotionlaw":[1,5,7,23,31],"cyl_to_cart":[1,8],"cylind":2,"cylindr":41,"d":[1,7,9,10,11,12,16,17,18,19,23,26,30,33,34,36,37,38,39,40,41],"d1":33,"d1_":34,"d1_anchor_0":34,"d1_anchor_1":34,"d1_internal_0":34,"d1_link_0":34,"d1_link_1":34,"d2":33,"d2i":39,"d2s":5,"d2x":39,"d_d1":26,"d_d2":26,"dash":10,"dashboard":[21,41],"dashboard_layout":[1,21,30,41],"data":[1,3,4,9,11,14,16,18,19,21,23,34],"data_array":5,"dataclass":23,"datafram":10,"date":23,"de":[12,23,29],"dead":23,"decis":24,"declar":23,"decompos":[3,18],"decompose_assur_group":[1,3,16,23,34],"decomposit":[0,1,12,16,18,19,23,29,34],"decompositionresult":[1,3,11,16],"decor":[1,10,12,23,30,32,38],"dedic":22,"dedupl":[9,19],"deem":24,"deep":[1,3,9,12,16],"deeper":35,"def":[12,17,26,29,30,32,36,37,38,39,40,41],"default":[1,2,3,5,8,10,11,12,15,16,17,18,19,21,22,23,25,30,32,38,40,41],"default_angular_veloc":[1,2,23],"default_orientation_resolut":[1,18],"defin":[0,1,3,5,6,7,8,9,10,11,12,14,16,17,18,21,23,25,26,31,38,39,40,41],"define_linkag":26,"definit":[1,3,5,9,11,12,18,19,21,23,25,29],"deg":[31,39,40],"degener":[16,23],"degre":[1,2,3,5,6,7,9,10,11,15,18,19,23,31,34,37,40],"degree_of_freedom":[1,3,34],"delay":21,"deleg":[1,3,15,16,18,23],"delta":[1,10,11,15,38],"delta_dim":[12,23],"demo":[23,26],"demonstr":[24,26,30],"denot":[18,23,25],"dens":[22,23],"densiti":[12,18],"depend":[4,7,12,18,21,22,23,32,41],"dependabot":23,"deprec":[0,7,18,22,28,29],"deprecationwarn":[23,25],"depth":41,"deriv":[5,11,16,17,23,39],"derogatori":24,"describ":[1,2,3,11,23,26,34],"descript":[1,12,23,26,39],"deselect":23,"deseri":[3,11,19],"design":[3,16,18,23,25,26,29,32,34,36,38,39,40,41],"desir":[18,30,31,36,40],"detail":[1,11,15,26,29,30,38],"detect":[10,19,23,30],"determin":[1,3,5,7,9,10,11,16,18,23,24,40],"determinist":[1,6,7,16,23],"dev":[12,23,29,38],"develop":[22,23,29,41],"deviat":[10,17,36,37,38,39],"devic":18,"df":38,"diagon":18,"diagram":[21,23,41],"dict":[1,3,7,9,10,11,12,14,15,16,17,18,19,39,41],"dictionari":[3,9,10,11,13,16,17,34,39],"diff":[23,25,39],"differ":[1,9,11,12,14,17,18,19,21,22,23,24,26,30,33,34,38,39,40,41],"differenti":[12,16,17,23,29,39],"differential_evolut":12,"differential_evolution_optim":[1,12,23],"differential_evolution_optimization_async":[1,12],"dilat":[12,23],"dim":[1,3,9,16,23,26,34,41],"dim_nam":[21,26,41],"dim_typ":[21,41],"dimens":[0,3,9,10,11,12,13,14,15,16,19,21,23,26,28,29,30,32,36,37,38],"dimension":[1,3,8,9,10,12,23,30],"dimension_bounds_factor":[1,12],"dimension_func":[21,26],"dimension_mutation_sigma":[1,12],"dimension_r":12,"dimension_sigma":12,"dimensionless":[5,31],"dims_back":34,"dims_coupl":34,"direct":[1,2,3,5,6,7,9,10,11,16,17,18,21,22,23,25,31,32,37,39,40],"direct_tim":39,"directori":[22,23,29],"disabl":[23,24],"disagre":[23,25],"disambigu":16,"discard":[22,23],"disconnect":9,"discontinu":5,"discov":22,"discret":[5,12,18,23,31],"disk":31,"disparag":24,"dispatch":[1,3,4,5,15,16,23],"displac":[1,5,7,11,16,18,31,32,38],"display":[3,9,11,21,23,26,41],"dist":[1,8,17,37],"distanc":[1,2,3,5,6,7,8,9,10,11,12,13,16,17,18,23,26,30,32,33,34,37,38,39,40],"distance0":[16,17,39],"distance1":[1,7,11,15,16,17,23,26,29,30,31,32,33,36,37,38,39,41],"distance2":[1,7,11,15,23,26,29,30,31,32,33,36,37,38,39,41],"distinct":[14,16,18,23],"distinguish":3,"distribut":[1,12,13,37],"dither":12,"div":41,"div_html":41,"dive":35,"divers":[12,13,24],"divis":[12,23,26,30],"divisor":17,"diywalk":26,"doc":[1,21,23,29,41],"docstr":[22,23],"doctyp":41,"document":[1,18,21,22,23,25,32,41],"doe":[1,2,3,6,9,12,18,22,23,32,41],"doesn":[1,6,7,11,19,26,40],"dof":[1,3,7,9,11,15,19,23,29,34],"doi":23,"domin":[12,13,22,23],"don":[1,3,6,7,9,11,12,16,17,23,26],"done":23,"door":18,"dot":[10,38],"doubl":[7,9,18,23,40],"double_slid":7,"download":28,"downstream":[9,23],"dpi":[38,41],"dr":5,"draw":[10,21,23,29,32,34,41],"drawn":[10,21,41],"drawsvg":[21,29],"drawsvg_viz":[0,1],"drift":23,"drive":[5,7,11,18,23,31,33,34,40],"driven":[1,2,3,7,9,11,18,19,23,29,32,34],"driven_nod":[1,3,9],"driver":[1,2,3,7,9,11,15,19,23,26,29,31,33,34],"driver_angl":[0,1,9,34],"driver_nod":[1,3,9,34],"driver_or_crank":23,"driverangl":[0,1,9,23,34],"driverlink":[1,11,23],"drop":[16,23,25],"ds":5,"dt":[1,2,3,4,6,7,10,11,14,15,16,23,26,32],"dtheta":5,"dtype":[1,10,12,13,14,15,16,17,18],"du":5,"du2":5,"dual":[12,23],"dual_ann":12,"dual_annealing_optim":[1,12,23],"due":[10,23],"dump":[3,11,34],"duplic":23,"durat":[21,26,36,41],"dure":[1,2,6,7,9,11,12,13,16,17,18,23,24,33,41],"dwell":[5,31],"dwell_high_end":[1,5,31],"dx":[11,16,34,39],"dxf":[21,23,29],"dxf_export":[0,1],"dy":[11,16,34],"dyad":[0,1,2,3,4,6,9,10,11,12,15,16,17,18,23,26,29,30,31,32,33,34,36,37,38,39,40,41],"dyad_left":18,"dyad_right":18,"dyad_typ":23,"dyadic":[3,7],"dyadpp":[1,3],"dyadprr":[1,3],"dyadrpr":[1,3],"dyadrrp":[1,3,23],"dyadrrr":[1,3,16,23],"dyadsolut":18,"dynam":[29,30],"d\u00b2":16,"d\u03b1":16,"e":[3,7,10,11,12,14,16,17,18,19,21,23,24,26,29,34,39],"e1":[9,34],"e2":[9,34],"e3":34,"e_d1":26,"e_d2":26,"earli":[18,22,23],"earlier":[22,23,25],"earn":[22,23],"eas":23,"easi":[21,29,39],"easier":23,"econom":24,"ed":18,"edg":[1,3,7,9,12,16,18,19,21,23,26,30,31,34,41],"edge_0":34,"edge_1":34,"edge_2":34,"edge_3":34,"edge_dist":[0,1,9,16,34],"edge_from_dict":[1,3,9],"edge_id":[1,3,9],"edge_map":[1,3],"edge_to_dict":[1,3,9],"edgeid":[1,3,9],"edit":[23,24,41],"editor":[23,29],"educ":24,"effect":[10,12,18,23],"effector":18,"effici":[4,5,14,16,17,23,30,31,39],"eight":[12,18,19,23,34,41],"either":[3,9,11,12,19,21,32,33,34],"element":[1,3,6,7,9,12,13,18,19,23,32,41],"eleven":23,"elif":[34,40],"elimin":[16,17],"eliminate_theta":[1,17,23],"els":[9,12,25,28,32,34,36,37,40],"elsewher":22,"email":24,"emb":41,"embedded_linkag":41,"embodi":3,"emit":[1,9,21,23,25],"empathi":24,"emphasi":23,"empti":[1,3,5,6,7,9,10,12,13,14,23,26,32,34,37,40],"en":[23,26],"enabl":[3,9,17,23,36,39],"encod":[9,12,19,23],"encount":[3,9,23],"end":[1,2,3,5,9,11,16,17,18,21,22,23,31,32,38,41],"end1":21,"end1_idx":21,"end2":21,"end2_idx":21,"endpoint":[3,9,11,18,26],"enforc":[28,30],"engin":[11,21,23,27,28,29],"enough":[23,26,38],"ensembl":[1,12,14,18,23,25,26,29,30,32,37,40],"entir":[1,2,23,37],"entiti":23,"entri":[1,11,12,14,16,18,19,22,23,30,34],"enum":[1,3,9,11,18,21],"enumer":[0,1,11,23,26,29,34,36,40,41],"enumerate_al":[1,19,23],"enumerate_topolog":[1,19,23],"env":26,"environ":[23,24,28],"eq":17,"equal":[1,3,8,12,13,17,18,19,37,38,39,41],"equat":[3,8,16,17,18,22,34,39],"equival":[18,19,23,25,39],"erdman":18,"error":[1,3,12,18,23,25,26,30,37,39,40],"error_messag":17,"error_penalti":[1,10],"errstat":23,"escap":[12,23],"essenti":22,"establish":11,"estim":[18,38],"et":18,"etc":[3,6,7,11,12,14,16,18,19,23],"ethnic":24,"euclidean":[8,17,18],"eval":39,"eval_func":[12,23,26,29,30,36,40],"evalf":39,"evalu":[1,5,7,10,12,17,18,22,23,26,29,30,31,41],"evaluate_deriv":[1,5],"even":[21,22,23,32],"event":[12,24,30],"ever":23,"everi":[0,1,9,10,11,14,17,18,19,21,22,23,25,26,29,30,32,33,34,37,40,41],"everyon":24,"everyth":[23,29,32],"evolut":[12,23,29],"evolutionari":[12,23],"exact":[1,3,7,9,11,14,17,18,23,25,30,32,38,39,40],"examin":[18,39,40],"exampl":[1,2,3,5,6,7,9,10,11,12,15,16,17,18,19,21,22,23,24,28,29,34],"exceed":[23,38],"except":[0,11,19,23,26,28,33,34,36],"excess":38,"exclud":[17,22],"execut":23,"executor":[12,30],"exhaust":[12,18,19,23,30],"exhaustive_optim":23,"exist":[1,3,4,7,9,11,12,14,16,17,18,19,21,23,25,40],"exist_ok":41,"exit":[1,11,15,23],"expand":[3,9,19,23,26],"expect":[18,19,23,30,32,34,38,40],"expens":[12,18,22,23],"experi":24,"experiment":23,"explan":[12,24],"explicit":[1,3,9,11,15,24,32,34],"explor":[12,22,23,30,32,36,37,38,39,40,41],"explos":3,"exponenti":[18,22,23],"export":[7,9,10,21,23,29,35],"expos":[1,9,23,26,31,33],"expr":17,"express":[9,17,23,24,29,35,39],"ext":23,"extend":[1,2,3,9,16,18,26,32,35],"extens":[1,2,8,16,23],"extent":41,"extern":[12,24,34],"extra":[12,14,23,26,29],"extract":[1,4,10,12,17,18],"extract_trajectori":[1,10,23],"extrud":41,"extrus":41,"ezdxf":[21,23,41],"f":[1,3,10,12,15,17,18,23,26,30,31,32,33,34,36,37,38,39,40,41],"f_a":26,"f_d":26,"fabric":[29,41],"face":[6,23],"fact":23,"factor":[12,18,21,23,41],"factori":[0,1,3,5,9,12,13,14,17,18,19,23],"fade":21,"fail":[1,3,12,17,23,25,40],"failur":25,"fair":24,"fall":[5,21,23,31],"fall_end":[1,5,31],"fallback":[9,23],"fals":[3,11,12,18,21,23,26,30,32,34,36,37,38,39,40,41],"famili":[1,12,19,23,25,29,41],"faq":24,"far":[11,12,30,37],"fast":[14,17,19,36,37,38,40],"fast_vari":[1,12],"fastapi":23,"faster":[1,8,11,12,15,18,21,22,23,29,33,39],"favor":23,"favour":[22,23],"feasibl":18,"featur":[8,21,23,26,28,29],"feed":[9,12,23],"feedback":[21,24],"feel":[22,26],"feet":26,"femur":26,"fewer":[18,22,25,30,37],"ffmpeg":41,"ffmpegwrit":26,"fh":34,"field":[13,18,23],"fifteen":23,"fig":[21,23,26,36,37,38,41],"figsiz":[21,38,41],"figur":[10,12,13,14,21,22,23,26,39,41],"figure1":41,"figurewidget":[21,41],"file":[3,9,11,14,19,21,23,25,34,41],"fill":[12,23,32],"fillet_radius":[1,21,41],"filter":[12,13,14,18,19,23,29,36,40],"filter_by_scor":[14,23],"filter_finit":[1,18],"filterwarn":25,"final":[12,16,17,23,26,33,38,39,41],"find":[3,9,12,13,16,18,23,25,26,29,30,32,36,37,40],"fine":[12,23,30,38,39,40],"finer":22,"finish":23,"finit":[18,23],"first":[1,3,6,7,8,9,10,11,12,14,16,17,18,19,21,22,23,30,32,38,40,41],"first_i":8,"first_iter":30,"first_nan_step":[1,16],"first_x":8,"fit":[1,10,12,18,21,22,23,26,29,35,36,37,39,40,41],"five":[18,22,23],"fix":[0,1,3,5,6,9,10,11,16,17,18,21,22,26,30,31,32,33,39,40,41],"fixeddyad":[1,6,7,9,15,18,21,23,25,26,29,33,40],"flake8":23,"flat":[1,9,11,14,15,16,23,26,33,34,38],"flat_dim":26,"flat_graph":9,"flatten":[1,9,14,34],"flavour":34,"flexibl":23,"fli":12,"flicker":21,"float":[1,2,3,5,6,7,8,10,11,12,13,14,15,16,17,18,21,23,26,30,36,38,39,40],"float64":[1,5,10,11,14,15,16,17,18,21],"floor":[23,25],"focus":[12,24,38],"fold":[18,22,23,25],"folder":[1,23],"follow":[3,5,7,12,16,18,23,24,25,29,30,32,35,36,37,38,41],"follower_po":31,"font":41,"foot":[23,26,34],"foot_locus":26,"forc":[3,11,18,31,37],"fork":23,"form":[1,3,9,11,12,14,17,18,19,23,26,29,39,40],"formal":[3,23,34],"format":[3,11,12,14,21,23,41],"formatted_histori":26,"former":23,"formul":[16,23],"formula":[8,19,23,25],"forth":11,"forward":14,"found":[1,3,8,9,10,12,14,16,17,18,21,22,23,26,37,40],"foundat":[6,9,18],"four":[0,1,3,7,9,10,11,12,15,17,18,19,22,23,25,27,28,30,34,36,37,38,39,41],"four_bar_anim":41,"fourbar":[1,11,18,23,34],"fourbar_assur":34,"fourbar_from_length":[1,11,18,23,40],"fourbar_from_lengths_demo":23,"fourbar_linkag":[23,26],"fourbar_symbol":[1,17,23,29],"fourbarsolut":[18,23],"fps":[21,26,36,41],"frac":40,"fraction":[6,12,17,21,22,32,36],"frame":[0,1,3,6,9,10,11,14,15,18,21,23,25,26,29,33,36],"frame10":41,"frame_dur":[21,41],"frame_idx":41,"frame_index":[21,36,41],"framework":[12,40],"free":[4,9,12,18,22,23,24,25,30],"freecad":[21,41],"freedom":[1,3,7,9,11,19,34],"frequenc":22,"fresh":[12,23,39],"freudenstein":[18,22,29],"freudenstein_equ":[1,18],"fri":12,"friend":[4,14,23],"from_ag":14,"from_dict":[0,1,23],"from_edg":[1,9],"from_ensembl":14,"from_graph":[1,3],"from_hypergraph":[1,3,23,34],"from_inst":[1,9],"from_json":[1,19,23],"from_linkag":23,"from_mechan":[1,3,9,23,34],"from_memb":[14,23],"from_pareto_front":[14,23],"from_pareto_solut":14,"from_point_angl":18,"from_port":[1,9],"from_sim_linkag":[1,9,15,23],"from_synthesi":23,"from_topology_solut":[14,23],"front":[12,13,14,23,30],"froze":23,"frozen":23,"full":[1,2,3,7,10,11,12,14,15,16,17,18,19,21,22,23,26,29,30,33,34,39,40],"full_html":41,"fulli":[1,7,9,11,18,23,34,40],"func":[1,10,12,17,23,26,39],"funcanim":[14,21,26,41],"function":[1,3,4,5,6,7,8,9,10,11,12,16,17,18,19,21,22,23,25,29,31,34,35,36,37,38,41],"function_gener":[0,1,22,40],"functionprofil":[1,5,7,23],"fundament":[3,9,11,18,34,35],"fuse":34,"fusion":[21,41],"futur":[12,23],"g":[3,7,10,11,12,14,16,17,18,19,21,23,26,34,39],"g1":19,"g2":19,"g_a":26,"g_d":26,"gain":23,"galleri":33,"gap":22,"garbag":26,"gaussian":[12,23],"gave":23,"gen":[18,23],"gender":24,"gene":12,"general":[0,1,5,8,12,23,36,39],"generalized_synthesi":[1,14,18,25],"generat":[1,3,9,11,12,14,15,17,18,19,22,23,29,33,34,35,38],"generate_bound":[1,12,17,23,26,29,30,32,36,37,38,39,40,41],"generate_catalog":[1,19],"generate_symbolic_bound":[1,17],"genet":[12,23,29],"gentl":22,"genuin":[23,25],"geometr":[1,3,9,12,15,16,17,18,23,30,32,33],"geometri":[0,1,3,7,11,18,21,23,26,29,30,32,33,34,38,39,41],"get":[0,1,3,7,8,9,11,12,14,16,17,18,19,21,23,26,28,29,30,31,32,34,36,37,39,40,41],"get_acceler":[1,11,15,23],"get_all_dyad":[1,18],"get_all_port_nod":[1,9],"get_axis_norm":[1,11],"get_compon":[1,21],"get_constraint":[1,2,5,6,7,11,12,15,23,26,29,30,31,33,36,37,38,39,40,41],"get_constraint_equ":[1,17],"get_coord":[1,11,15,23,26,30,32,33],"get_dist":[1,11],"get_driver_angl":[0,1],"get_dyad":[1,18],"get_edge_between":[1,3,9],"get_edge_dist":[0,1],"get_edges_for_nod":[1,3,9],"get_hyperedge_dist":[0,1],"get_hyperedges_for_nod":[1,9],"get_isomer_geometri":[1,7],"get_joint":[1,11,17],"get_joint_posit":[1,3,11,23],"get_line_point":[1,11],"get_link":[1,11],"get_link_color":[1,21],"get_nearest_point":[1,8],"get_node_posit":[0,1,16],"get_normalized_direct":[1,11],"get_num_constraint":23,"get_numeric_paramet":[1,17,39],"get_parent_pair":[1,21,23],"get_po":23,"get_port_dist":[1,11],"get_port_qualified_nod":[1,9],"get_qualified_node_id":[1,9],"get_rail_pair":[1,21,23],"get_required_anchor":[1,7],"get_required_constraint":[1,7],"get_rotation_period":[1,10,11,15,23,32],"get_symbol_spec":[1,21],"get_trajectory_express":[1,17],"get_veloc":[1,11,15,23,36],"ghost":[21,41],"gif":[21,36],"git":[23,29],"github":[1,23,24,29],"gitignor":23,"give":[12,16,17,18,23,24,29,34,38,39],"given":[1,3,5,9,10,11,12,14,16,17,18,19,23,33,34,36,38,40],"global":[9,11,12,17,23,30],"go":[3,21,29,41],"goal":[30,37],"goe":[23,30],"gone":23,"good":[5,12,13,18,25,26,30,31,37,38,40],"googl":23,"got":[22,23],"govern":[18,22],"grace":24,"grad_i":39,"grad_x":39,"gradient":[1,12,17,23,29,35,39],"graph":[0,1,11,12,16,18,19,23,26,29,35],"graph_back":34,"graph_from_dict":[1,3,9],"graph_from_json":[1,3,9,34],"graph_represent":23,"graph_to_dict":[1,3,9,34],"graph_to_json":[1,3,9,34],"graph_to_linkag":23,"graph_to_mechan":[1,3,23,34],"graphic":41,"grashof":[1,15,18,23,35],"grashof_check":[1,18,23,40],"grashof_crank_rock":[1,18,40],"grashof_double_crank":[1,18,40],"grashof_double_rock":[1,18,40],"grashof_rocker_crank":[1,18,40],"grashof_typ":40,"grashoftyp":[1,18,40],"gray":41,"great":23,"greedi":18,"green":[10,41],"grid":[12,14,18,22,23,25,26,29,35,38,41],"grid_search":[0,1,23],"gridcolor":41,"gridwidth":41,"groebner":[17,23],"ground":[0,1,2,3,7,9,10,11,15,16,17,18,19,21,22,23,25,26,29,30,31,32,33,34,36,37,38,39,40,41],"ground2":7,"ground_a":39,"ground_constraint":18,"ground_d":39,"ground_i":17,"ground_length":[1,17,18,29,39,40],"ground_nod":[1,3,9,34],"ground_pivot_a":[1,18],"ground_pivot_d":[1,18],"ground_toler":18,"ground_x":17,"groundjoint":[1,11,23,34],"groundlink":[1,11],"group":[0,1,7,9,10,11,14,18,19,21,23,25,29,30,35,41],"group_class":[1,3,34],"group_index":[1,18],"group_result":[1,18],"group_signatur":[1,3,18],"groupsynthesisresult":[1,18],"grow":[9,18,22,23,32],"gruebler":[1,3,11,15,23],"gr\u00fcbler":[19,23,34],"guarante":19,"guaranti":13,"guess":[12,16],"gui":29,"guid":[1,3,7,9,16,18,23,29,31,35,40],"guidanc":[18,23],"guide_angl":[1,7,16,31],"guide_i":16,"guide_x":16,"guidelin":28,"h":[17,26,30,34],"h1":41,"h_d1":26,"h_d2":26,"half":[10,11,17,22,23,26,34,40],"halfway":32,"halv":23,"hand":[11,23,29,30,34],"handl":[1,3,9,11,12,15,18,21,23,40],"hang":32,"har":[22,23],"harass":24,"hard":18,"hardwar":[22,23],"harm":24,"harmon":[5,31],"harmonicmotionlaw":[1,5,7,23,31],"has_nan_posit":[1,16],"hash":[19,34],"hashabl":[3,14,19],"hatch":[12,18,23],"head":[23,41],"header":[12,23],"healthi":24,"heavi":39,"heavier":[12,23],"heavili":23,"height":[18,21,37,39,41],"held":[1,2],"help":[35,38],"helper":[10,11,17,18,21,23,26],"henc":[17,22,23],"hessian":17,"heterogen":[14,23],"hex":21,"hg":[3,9,19,34],"hg_coupler":34,"hi":[18,40],"hierarch":[9,23,25,29],"hierarchi":[0,1,3],"hierarchical_from_dict":[1,9],"hierarchical_from_json":[1,9,34],"hierarchical_to_dict":[1,9],"hierarchical_to_json":[1,9,34],"hierarchicallinkag":[1,9,34],"high":[4,5,11,16,18,23,29,30,31,38],"higher":[3,4,5,10,11,12,13,18,19,23,26,31],"highest":[10,12,30],"highlight":[21,23],"highlight_best":21,"hint":[7,16,23],"hint_posit":16,"hip":34,"histori":[21,23,26,30,41],"history_sav":26,"hit":[1,2,11,40],"hoeken":[21,23],"hold":[1,3,9,12,14,17,18,22,23,25,34,40],"hole":[21,41],"home":[7,23,25],"honour":23,"hop":23,"horizont":[6,10,26,30,32,36,41],"horizontal_ratio":36,"horizontal_veloc":36,"hot":16,"hour":23,"hover":[21,41],"html":[8,21,24,26,29,36,41],"http":[1,8,29],"https":[1,8,24,26,29],"huge":12,"hugofara":[1,12,21,26,29],"human":[3,5,6,7,9,11,12,14,19,23,32],"hundr":[18,22],"hundredth":36,"hv":37,"hyperdegre":[1,9],"hyperedg":[1,3,9,19,23],"hyperedge_constraint":[0,1],"hyperedge_from_dict":[1,9],"hyperedge_id":[1,9],"hyperedge_neighbor":[1,9],"hyperedge_to_dict":[1,9],"hyperedgeid":[1,9],"hypergraph":[0,1,3,15,19,23,25,29,33,35],"hypergraph_convers":[0,1],"hypergraphlinkag":[1,3,9,15,19,23,34],"hyperstat":23,"hypervolum":[12,13,14,23,35],"hypostaticerror":23,"hypot":34,"hypothet":[22,23],"hysteresi":[1,7,16],"i_":26,"i_d1":26,"i_d2":26,"id":[1,3,9,11,12,16,18,19,23,34],"id_a":12,"id_b":12,"ideal":[10,18,37,38,41],"ident":[1,6,9,14,18,23,24],"identifi":[1,3,5,6,7,9,10,11,18,19,23,32,38,40],"identify_dyad_typ":[1,3,23],"identify_group_typ":[1,3,23],"idx":14,"ignor":[1,2,6,7,23],"ii":[3,12,16,23,29,35],"iii":[3,12,18,23,29,35],"illustr":41,"im":21,"imag":[21,23,30,41],"imageri":24,"imaginari":17,"immut":[3,23],"impact":24,"implement":[0,3,5,12,18,22,23,25,34,36,40],"impli":[22,34],"implicit":[16,17,19,23],"import":[1,2,3,4,5,7,9,11,12,15,16,17,18,19,21,23,25,26,29,30,31,32,34,36,37,38,39,40,41],"importerror":[10,12,13],"imposs":[11,30,32,33],"improv":[21,23,37,39],"inappropri":24,"inch":21,"incid":24,"incident":22,"includ":[1,3,6,10,11,12,16,17,18,19,21,23,24,29,30,34,40,41],"include_pin":[21,41],"include_plotlyj":41,"include_transmiss":[1,10,11,15,38],"includesvg":41,"inclus":24,"incomplet":1,"inconsist":23,"incorpor":36,"incorrect":23,"increas":[23,30,36,37],"indent":[3,11,23],"independ":[3,11,16,23,34],"indetermin":[3,19,23],"indeterminaci":[1,11,15,23],"index":[1,10,12,13,14,16,18,19,21,23,28,38,40],"indexerror":19,"indic":[1,3,10,12,13,16,18,21,22,23,31,38,39],"individu":[14,23,24,36,38],"industri":41,"inequ":18,"inert":23,"inertia":[12,30],"inf":[1,10,12,14,18,23,30,36,38],"infeas":12,"infer":22,"infin":[18,23,30],"infinit":[18,32,38],"info":[18,34],"inform":[1,12,18,23,24,37],"ingest":23,"inherit":[12,23],"ini":23,"init_coord":[26,30],"init_func":26,"init_po":[26,30],"init_polar_repr":26,"init_posit":[12,13,23],"initi":[1,3,7,10,11,12,13,14,15,16,17,18,21,23,26,32,34,39,40,41],"initial_angl":[0,1,2,7,11,31],"initial_coordin":12,"initial_crank_angl":18,"initial_dist":39,"initial_extens":[1,2],"initial_guess":12,"initial_param":[17,39],"initial_popul":12,"initial_posit":[11,12,13,14,16,21,23,26,30,37,41],"initial_temp":12,"initial_traj":39,"inkscap":41,"inlin":23,"inner":30,"innermost":23,"input":[0,1,2,3,7,8,9,10,11,12,15,17,18,19,23,29,36,39,40,41],"input_angl":18,"insensit":38,"insert":[14,23],"insid":[0,17,18,22,23,25,34],"inspir":24,"instal":[10,12,13,21,23,28,38,41],"instanc":[1,3,5,7,9,10,12,19,23,24,34],"instance_id":9,"instant":[18,21],"instanti":[1,9],"instead":[3,9,12,18,21,22,23,25,33,37,40],"insult":24,"int":[1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,21,26],"int32":16,"integ":[1,3,9,10,11,12,14,19,23],"integr":[5,12,23,41],"intellig":30,"intend":[23,26],"intenum":[1,3,9,11],"interact":[18,21,22,24,29,35],"interactive_linkag":41,"interactive_linkage_plot":[1,21,41],"interchang":[21,41],"interfac":[1,2,6,7,12,14,29],"intermedi":18,"internal":[3,6,7,9,14,16,18,22,23,34],"internal_0":3,"internal_1":3,"internal_edg":[1,3,34],"internal_id":16,"internal_nod":[1,3,9,34],"internal_node_id":3,"interoper":9,"interpol":[5,23,31,32],"interpret":[7,11],"intersect":[1,3,7,8,11,16,17,18,23,29,33,34,39],"interval":[21,26,41],"intrins":11,"introduc":[23,33,37],"introduct":23,"introspect":21,"invalid":[1,3,9,10,11,12,13,15,18,23],"invent":23,"invers":[12,23],"invert":[27,28],"inverted_stroke_engin":[23,26],"investig":24,"invis":24,"invoc":[1,15],"invok":12,"involv":[24,39],"io":1,"ipynb":23,"ipywidget":[21,41],"is_accept":[1,10],"is_arc_driv":[1,11],"is_build":17,"is_complet":[1,12,30],"is_crank_rock":[1,18,23,40],"is_defin":[1,11],"is_determin":[1,3],"is_discret":[1,18],"is_driv":[1,11,23],"is_dyad":23,"is_grashof":[1,18,40],"is_ground":[1,11,23],"is_ground_joint":[1,21],"is_legacy_format":[1,11,23],"is_overconstrain":[1,3],"is_prismatic_lik":[1,21],"is_revolute_lik":[1,21],"is_static_lik":[1,21],"is_underconstrain":[1,3],"is_valid":[1,3,18,34,40],"is_valid_mechan":[1,3],"isinst":[23,25,26,36],"isn":30,"isnan":[1,15,36],"iso":[21,41],"isom":[3,7,16,23],"isomer_to_canon":[1,3],"isomorph":[0,1,23],"issu":[3,23,24,30],"issue_templ":23,"ite":12,"iter":[1,3,4,8,10,11,12,14,15,16,17,18,21,22,23,26,30,32,33,36,37,38,39,40,41],"iteration_factor":[21,26],"iteration_numb":21,"iy":18,"j":[18,34,39],"j1":[3,11,19],"j2":[3,11,19],"j_1":34,"j_2":34,"jacobian":[1,16,17,23],"jacobian_theta":[1,17],"jam":23,"jansen":23,"jerk":[5,31],"jerki":37,"jit":[16,22,23,29],"job":29,"join":[8,9,11,23],"joint":[0,1,2,3,4,7,9,10,12,13,14,15,18,19,21,23,26,29,30,31,33,34,35,39,41],"joint0":[21,23],"joint1":[10,11,21,23],"joint2":[11,21],"joint_":23,"joint_0":3,"joint_1":3,"joint_2":3,"joint_crank":23,"joint_fix":23,"joint_from_dict":[1,11],"joint_id":11,"joint_linear":23,"joint_map":11,"joint_nam":[17,23,38,39],"joint_name_or_index":[1,10],"joint_po":12,"joint_posit":[1,12,18],"joint_prismat":23,"joint_profil":[21,41],"joint_radius":[21,41],"joint_revolut":23,"joint_rol":3,"joint_signatur":[1,3,34],"joint_to_dict":[1,11,23],"joint_typ":[1,3,4,9,11,14,16,19,34],"jointposit":[1,10,12,13],"jointprofil":[1,21,41],"jointtyp":[1,3,9,11,23],"json":[1,3,9,11,19,22,23,34],"jul":12,"jump":12,"jun":[1,21,26],"jupyt":[21,41],"just":[1,2,3,9,11,21,22,24,25,31,34,40],"j\u2082":23,"k":[3,9,11,19,23,26,34],"k_1":40,"k_2":40,"k_3":40,"keep":[4,9,11,12,13,23,25,26,30,32,37,38,40,41],"kept":[17,22,23,30,34,37,40],"kernel":[23,34],"key":[1,3,7,9,10,11,14,16,18,19,23,30,34,39,41],"keyerror":[3,9,14,19],"keyword":[12,23,41],"kf":34,"kind":[23,24,25,33],"kinemat":[0,1,3,6,7,9,10,11,12,15,16,17,18,23,26,31,32,34,35,38,40],"kinematic_":23,"kinematic_default_test":[1,10],"kinematic_maxim":[1,12,23,30,32,38,41],"kinematic_minim":[1,12,23,26,29,30,32,36,37,38,39,40],"kinematic_optimizatino":23,"knee":[26,34],"knife":[7,23,31],"knob":22,"know":[3,9,23,32,40],"known":[3,16,19,23,30,34],"kutzbach":[1,3,11,15,23,34],"kw":12,"kwarg":[3,12,13,14,21,23,26,30,32,36,37,38,39,40,41],"l":[12,17,18],"l0":[17,39],"l1":[1,7,17,29,39,40],"l2":[1,7,17,29,39,40],"l3":[17,29,39,40],"l4":40,"l_1":40,"l_2":40,"l_3":40,"l_4":40,"label":[14,21,23,34],"label_offset":[1,21],"ladder":24,"lambda":[12,26],"lambdifi":17,"land":[1,2,18,23],"languag":24,"lap_per_second":26,"lap_point":26,"laptop":22,"larg":[1,11,15,23,33],"larger":[34,39],"laser":41,"last":[10,18,23,26,30,36,38,40],"last_iter":30,"later":[3,23,33],"latex_figur":41,"launch":23,"law":[5,7,18,23,29,35],"layer":41,"layout":21,"lazi":14,"lazili":[18,23],"lcm":[1,15],"lead":[24,25],"leader":[12,24,30],"learn":[12,24,29,35],"least":[1,3,10,12,13,16,18,22,23,37,40],"least_squar":23,"leav":16,"left":[9,11,17,18,23,26,34,39,40,41],"left_leg":9,"leg":[3,9,18,23,26,34],"leg1":9,"leg1_":3,"leg1_anchor_0":3,"leg2":9,"leg_topolog":9,"legaci":[1,3,9,10,11,14,17,21,23],"legacylinkag":21,"legend":[21,23,41],"leggedsnak":[9,23,29],"leman":19,"len":[3,9,11,12,18,21,23,26,30,32,33,34,36,37,39,40,41],"length":[1,5,7,9,10,11,12,16,17,21,23,26,29,30,33,34,38,40,41],"lengthen":38,"less":[18,23],"let":[21,23,29,30,32,33,37,39,40],"level":[4,7,9,11,16,18,19,23,24,25,29],"lib":23,"librari":[22,29,34,35,37],"licens":23,"lie":[9,16,17,18,23],"life":23,"lift":[5,31],"lightgray":41,"like":[1,2,3,6,7,9,11,16,21,22,23,24,32,34,37,38,41],"limit":[1,2,10,11,12,16,23,26,36,37,40],"linalg":[18,36],"linalgerror":18,"line":[1,2,3,6,7,8,9,10,11,16,17,18,21,23,26,29,30,33,38,39,40,41],"line1":7,"line1_anchor1":[1,7],"line1_anchor2":[1,7],"line1_p1":[7,16],"line1_p1_i":16,"line1_p1_x":16,"line1_p2":[7,16],"line1_p2_i":16,"line1_p2_x":16,"line1_pos1":16,"line1_pos2":16,"line2":7,"line2_anchor1":[1,7],"line2_anchor2":[1,7],"line2_node1":[1,3],"line2_node2":[1,3],"line2_p1":[7,16],"line2_p1_i":16,"line2_p1_x":16,"line2_p2":[7,16],"line2_p2_i":16,"line2_p2_x":16,"line2_pos1":16,"line2_pos2":16,"line2d":21,"line_a":26,"line_anchor1":[1,7,21,26],"line_anchor2":[1,7,21,26],"line_b":26,"line_from_point":[1,8,23],"line_lin":[3,7],"line_line_intersect":[1,8],"line_node1":[1,3],"line_node2":[1,3],"line_p1":16,"line_p1_ax":16,"line_p1_ay":16,"line_p1_i":16,"line_p1_vi":16,"line_p1_vx":16,"line_p1_x":16,"line_p2":16,"line_p2_ax":16,"line_p2_ay":16,"line_p2_i":16,"line_p2_vi":16,"line_p2_vx":16,"line_p2_x":16,"line_point":[1,9,11,23],"line_point1":10,"line_point2":10,"line_pos1":16,"line_pos2":16,"line_width":41,"linear":[0,1,6,7,9,11,12,15,16,18,21,22,23,26,31,32,36],"linearactu":[1,2,7,9,15,23,25,29,32,33],"lineintersect":8,"link":[0,1,2,3,4,6,7,9,10,12,16,17,19,21,23,25,26,31,33,38,40,41],"link1":11,"link2":11,"link4":18,"link5":18,"link6":18,"link_0":3,"link_1":3,"link_assort":[1,19],"link_from_dict":[1,11,23],"link_id":11,"link_length":[1,12,18,40],"link_profil":[21,41],"link_ratio":[1,18],"link_styl":[21,41],"link_to_dict":[1,11],"link_typ":[1,11],"link_width":[21,41],"linkag":[0,1,2,3,4,6,7,9,11,12,13,14,16,19,21,22,23,25,27,28,30,32,35,36,37,38],"linkage1":[39,41],"linkage2":[39,41],"linkage3":39,"linkage_2d":41,"linkage_3d":41,"linkage_factori":[12,23],"linkage_position_":41,"linkage_stat":41,"linkage_to_graph":23,"linkage_to_solver_data":[1,4,16,23],"linkage_to_symbol":23,"linkage_to_synthesis_param":[1,18,23],"linkage_veloc":36,"linkage_with_veloc":21,"linkagegraph":[1,3,11,34],"linkageproblem":[1,12,23],"linkprofil":[1,21,41],"linkstyl":[1,21,23],"linktyp":[1,11],"linspac":[17,26,29,39],"lint":23,"linux":22,"list":[0,1,3,5,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,25,26,30,31,32,33,34,37,39,40,41],"list_of_ag":21,"liter":[12,21],"literatur":19,"live":[3,9,10,23,25,29,34,37,41],"lk":41,"ll":[29,35],"lo":[18,40],"load":[3,5,9,11,12,18,19,31,34],"load_builtin":[1,19],"load_catalog":[1,19,23,34],"local":[11,12,18,23,38],"local_posit":[1,11],"localbestpso":12,"locat":[16,18,25,40,41],"loci":[1,10,11,12,14,21,23,26,29,32,33,34,36,37,38,39,40,41],"lock":23,"lockfil":23,"locus":[1,8,10,23,26,30,40],"locus_highlight":[21,23],"logic":[3,16],"lone":23,"long":[12,23,30,41],"longer":[21,22,23,39,41],"longest":[18,38,40],"look":[9,12,19,22,23,25,26,30],"lookup":23,"loop":[0,5,11,12,16,18,22,23,26,29,30,33,36,38,39],"lose":[30,37],"lost":23,"lot":23,"low":[4,5,7,11,16,29,30,31,36,38],"lower":[5,11,12,17,18,22,23,25,29,30,31,32],"lower_bound":[12,30],"lowest":[12,13,36],"lw":26,"m":[18,34],"machin":[22,23,41],"machined_linkag":41,"machineri":[18,23],"made":[23,26,32,34],"magnitud":[1,2,8,10,11,16,22,33],"mail":24,"main":[11,16,18,23,26,35,39],"maintain":[1,7,11,16,23],"major":[23,25,29],"make":[1,10,12,16,18,21,22,23,24,25,34,40],"make_fourbar":41,"malform":23,"manag":[1,11,15,23,37],"mandatori":23,"mani":[12,17,18,22,23,30,32,34,37,40],"manifest":23,"manipul":[9,12,17,41],"manual":[21,23,30,41],"manufactur":[10,29,38,39],"map":[1,3,7,9,10,11,12,14,16,17,18,19,26,31,34,39,40],"mar":12,"margin":[18,38,41],"mark":[10,11,23],"markdown":22,"marker":[21,23],"markup":23,"master":[23,35],"match":[1,3,10,11,14,16,18,21,23,29,30,36],"math":[1,2,3,5,6,7,18,26,29,31,32,34,40],"mathemat":[3,9,17,18,23,40],"mathworld":8,"matplotlib":[10,12,13,14,21,23,26,29,33,35,37,38],"matrix":[17,18,19,23],"matt":[1,8],"max":[5,10,12,17,18,21,23,25,26,30,32,36,37,38,39,41],"max_angl":[1,10,18,37],"max_angle_step":[1,10],"max_bound":21,"max_devi":[1,10,37,38],"max_dim":12,"max_factor":[12,17,30,32,38,39,40,41],"max_i":[26,30,36,37,38],"max_link":[1,12,18,19],"max_link_length":18,"max_orientation_candid":[1,18],"max_pair":[18,40],"max_par":16,"max_posit":[1,10],"max_position_step":[1,10],"max_ratio":23,"max_sensit":38,"max_solut":[12,13,18,22,23,25,37,40],"max_solutions_per_topolog":18,"max_synthesis_solut":12,"max_total_solut":18,"max_val":14,"max_x":[26,30,36,37,38],"maxim":[12,23,30,32,36,39],"maximize_height":39,"maximum":[1,2,4,5,10,11,12,13,16,17,18,19,26,31,32,36,39],"maxit":[12,17],"may":[1,12,16,17,22,23,24,25,30,32,37,38,40],"maybecoord":[3,11],"mccarthi":18,"md":[23,29],"mead":[12,23],"mean":[1,10,17,22,23,26,32,34,36,37,38,39],"mean_angl":[1,10,12,37],"mean_devi":[1,10,38],"mean_posit":[1,10],"meaning":[11,18,22,32],"measur":[1,6,7,10,11,16,18,22,23,25,36,37,38,40],"mech":11,"mech_bbox":30,"mechan":[0,1,2,3,4,5,6,7,9,10,14,15,16,18,19,21,22,23,26,29,30,35,36,37,40,41],"mechanism_convers":[0,1],"mechanism_from_dict":[1,11],"mechanism_from_json":[1,11],"mechanism_from_linkag":23,"mechanism_s":30,"mechanism_to_dict":[1,11,23],"mechanism_to_graph":[1,3,23,34],"mechanism_to_json":[1,11],"mechanism_to_linkag":23,"mechanismbuild":[1,11,23,29,34],"media":24,"median":[22,23],"meet":[7,30,34,36,38],"member":[3,11,12,14,23,24,26,30,37,40],"membership":[9,21],"memori":[12,36],"mention":23,"mere":23,"merg":[9,14,23],"messag":[1,3,17,18,23],"metadata":[12,14,18,19,21,23,26],"metaheurist":29,"method":[1,3,5,8,9,11,12,16,17,18,23,31,32,38,40],"metric":[1,10,18,30,36,37],"microsecond":22,"middl":[5,12,30,34,39],"midpoint":[5,11,31],"might":[3,37],"migrat":23,"millisecond":[18,21,22],"mimick":23,"min":[10,12,17,18,21,26,29,30,32,36,38,39,40,41],"min_angl":[1,10,18,37],"min_angle_step":[1,10],"min_bound":21,"min_devi":[1,10],"min_dim":12,"min_i":[26,29,30,36,37,38],"min_link_length":18,"min_posit":[1,10],"min_position_step":[1,10],"min_ratio":[12,17,30,32,38,39,40,41],"min_transmission_angl":[1,18],"min_val":14,"min_x":[26,30,36,37,38],"mind":32,"minim":[3,12,13,17,18,23,26,29,30,37,38,39,40],"minima":[12,23],"minimize_curvatur":39,"minimize_linkag":[1,12,23],"minimize_linkage_async":[1,12],"minimize_peak_veloc":36,"minimum":[1,2,5,10,11,16,18,23,31,36],"minor":[23,25],"mint":23,"minut":[17,23],"mirror":[18,26,30],"mis":23,"misbehav":23,"mismatch":40,"miss":[7,16,23],"mistak":24,"mistaken":23,"mit":23,"mix":[3,12,23,39],"mixed_vari":[0,1],"mixedchromosom":[1,12,23],"mixedcrossov":[1,12,23],"mixedmut":[1,12,23],"mk":34,"mkdir":41,"mm":[10,38],"mobil":[1,3,11,15,18,19,23,25,29],"mobility_status":[1,3],"mobilityinfo":[1,19,23,25],"mobilityresult":[1,3,23],"mode":[21,23,26,40,41],"model":[1,3,4,9,10,11,21,23,25,29,32,33,41],"moder":24,"modern":[9,10,21,23,39],"modifi":[3,4,5,9,12,16,21,23,31,33,38],"modifiedtrapezoidalmotionlaw":[1,5,23,31],"modul":[0,23,25,26,28,29,31,34,39],"modulenotfounderror":23,"momentum":30,"mon":[12,21],"monoton":[22,25],"mont":[1,10,11,15,29,35,38],"moo":[23,29,37],"most_accur":37,"most_sensit":[1,10,38],"motion":[1,2,3,5,7,9,10,11,15,16,18,23,26,29,30,32,34,35,36,37,41],"motion_gener":[0,1,22,40],"motion_generation_3_pos":[1,18],"motion_law":[0,1,7,31],"motionlaw":[1,5],"motor":[0,1,2,3,9,11,17,18,23,29,32,33,34,39,41],"motor_joint":[1,11],"motor_port":[1,11,29],"move":[1,2,3,6,7,9,11,16,18,22,23,31,32,33,38,40],"movement":[6,16,21],"movement_bounding_bow":23,"movement_bounding_box":[1,10,23],"mozilla":24,"mp4":[26,41],"mruthyunjaya":[19,23],"ms":[22,23,41],"msg":17,"much":[10,22,23,38],"multi":[12,13,14,18,23,25,29,35],"multi_object":[0,1],"multi_objective_optim":[1,12,14,23,30,37],"multi_topolog":[0,1],"multi_topology_synthes":[14,18,34],"multimod":12,"multipl":[1,9,10,12,16,18,23,33,37,40],"multipli":[1,2,11,12,15,17],"must":[1,2,3,5,9,11,12,15,16,18,23,31,40],"mutabl":[13,23],"mutable_ag":[1,12],"mutableag":[12,13,23],"mutabledensematrix":17,"mutat":[12,14,23],"my_fit":12,"my_linkag":[3,12,26,29],"my_optim":12,"mypi":23,"myst_heading_anchor":23,"n":[1,3,8,9,11,12,14,15,16,18,19,23,26,30,34,38,39],"n_agent":26,"n_compon":[1,15,36],"n_constraint":[1,14,16],"n_crank":16,"n_dim":12,"n_dimens":[12,21],"n_evalu":[1,12],"n_gener":[1,12,37],"n_ghost":[21,41],"n_intersect":[1,8],"n_iter":[26,41],"n_joint":[1,11,14,16,17,21],"n_member":[14,26,40],"n_obj":23,"n_object":[12,13,37],"n_orientation_sampl":[12,18,22,23],"n_param":17,"n_particl":[12,21,22,26,30,32,36,38,39,40,41],"n_point":[22,25],"n_pop":23,"n_precision_point":23,"n_result":[12,30],"n_sampl":[1,10,11,15,18,23,25,38],"n_show":26,"n_solut":[12,13,37],"n_step":[10,38],"n_topolog":[12,14],"n_var":23,"n_worker":[12,23],"naiv":23,"name":[0,1,2,3,5,6,7,9,10,11,12,13,14,15,17,18,19,21,23,26,29,30,31,32,33,34,36,37,39,40,41],"namedtupl":[13,18,23],"namespac":23,"nan":[1,11,14,15,16,18,23,36],"nanmax":36,"napoleon":23,"napoleon_use_ivar":23,"narrow":[18,22,30],"nation":24,"nativ":[9,23],"natur":24,"navig":[12,23],"nbar_solution_to_linkag":[1,18,23],"nbarsolut":[1,12,18,25],"nbconvert":23,"ndarray":[1,5,10,11,12,13,14,15,16,17,18,21],"near":[18,40],"nearest":[1,7,8,16],"necessarili":37,"need":[0,3,4,9,11,12,14,16,17,19,21,22,23,29,32,33,34,36,37,39,40,41],"negat":[11,12,18,23,36,39,40],"neighbor":[1,3,9,12,23,30],"neighborhood":[12,23],"neighbour":23,"neighbourhood":30,"neither":[23,25],"nelder":[12,23],"nest":14,"net":[1,8],"never":[1,10,11,18,22,23,25],"new":[1,2,3,5,7,9,10,11,12,13,14,15,16,17,18,21,23,32,34,35],"new_angl":16,"new_direct":16,"new_extens":16,"new_i":16,"new_po":16,"new_x":16,"newer":[23,25],"newest":23,"newli":3,"newton":[3,12,16,18],"newton_raphson":3,"next":[1,11,12,15,23,25],"nine":[18,23],"nlinkag":40,"node":[1,3,9,16,18,19,23,34],"node1":[1,3,9],"node2":[1,3,9],"node_a":[3,16,23],"node_b":[3,16,23],"node_from_dict":[1,3,9],"node_id":[1,3,9,34],"node_posit":[0,1,3,9,16,34],"node_to_dict":[1,3,9],"nodeid":[1,3,9,16,23],"noderol":[1,3,9,19,23,34],"nois":38,"noisi":22,"nomin":[10,38,39],"nominal_path":[1,10,38],"nominal_traj":39,"non":[1,5,11,12,13,15,18,19,21,23,26,31,37,40],"non_grashof":[1,18],"none":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,26,29,30,32,36,37,38,40],"nonsens":23,"norm":[1,8,36],"normal":[5,11,12,13,16,18,21,23,26,30,31,37,38],"normalis":23,"normalize_angl":[1,18],"normalize_data":[1,21],"normalized_signatur":3,"notabl":23,"notat":[3,7],"notcompletelydefinederror":[0,1,23],"note":[3,9,17,22,23,30,39],"notebook":[21,23,29,41],"noth":[22,23,25,32],"notic":[23,25],"notimplementederror":[3,9,14,16,18,23,32],"now":[22,23,25,33,39],"np":[1,5,11,12,13,14,15,17,21,26,29,36,39],"nsga":[12,23,29,35],"nsga2":[12,37],"nsga3":[12,37],"nsolut":40,"nstep":39,"num_1dof_joint":[1,3],"num_2dof_joint":[1,3],"num_anchor_nod":[1,3],"num_assur_group":[1,3,34],"num_constraint":12,"num_driver_joint":[1,3],"num_driver_nod":[1,3],"num_full_joint":[1,19,34],"num_ground_joint":[1,3],"num_ground_nod":[1,3],"num_half_joint":[1,19],"num_internal_nod":[1,3],"num_joint":[1,3,19,34],"num_link":[1,3,18,19,34],"num_precision_posit":[1,18],"numba":[1,4,5,8,11,12,14,15,16,22,23,29,32,33,36,39],"number":[1,3,9,10,11,12,13,14,15,16,17,18,19,21,23,25,26,28,30,32,37,38,40],"numer":[4,5,9,16,17,18,23,34,36,38],"numeric_crank":39,"numeric_linkag":39,"numeric_output":39,"numpi":[1,4,5,10,11,12,13,14,15,16,17,18,22,23,26,29,33,36,37,39],"numpydoc":23,"nx2":17,"o":[7,11,30],"o1":[1,2,6,7,11,15,29],"o2":[1,6,7,11,15,29],"o_cam":7,"o_pivot":7,"obj_1":[1,8],"obj_2":[1,8],"object":[1,3,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,25,29,33,34,35,36,38,40,41],"objective_func":17,"objective_indic":[12,13,37],"objective_nam":[12,13,14,37],"objective_valu":[1,17,39],"oblig":24,"observ":[1,3,6,9,11,39],"occur":10,"ocp":23,"octob":23,"offens":24,"offer":[3,23],"offici":[23,24],"offlin":24,"offs":[12,30,37],"offset":[1,6,7,11,16,18,31],"often":[12,22,23,30,40],"old":[22,23,25],"older":25,"oldest":23,"omega":[1,11,15,16,21,23,29,34,36,41],"omega_valu":[1,16],"omit":10,"on_progress":[12,30],"onc":[3,11,18,22,23,36,38,41],"one":[1,2,3,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,25,26,29,30,32,33,34,36,37,38,39,40,41],"onli":[1,3,4,8,9,10,11,12,13,14,16,17,18,19,22,23,25,26,29,30,31,32,34,36,38,40,41],"onlin":24,"onto":[1,2,10,11,18,23],"op":[1,6,7,23],"open":[23,24,33,41],"oper":[0,1,5,16,18,19,23],"opinion":24,"oppos":2,"optim":[0,1,4,5,6,7,8,9,10,11,14,15,16,18,21,23,25,26,32,33,34,35,41],"optimal_dist":39,"optimal_param":39,"optimal_traj":39,"optimis":[22,26,39],"optimiz":[1,2,5,6,7,31],"optimizationerror":[0,1,12],"optimizationprogress":[1,12,30],"optimizationresult":[1,17],"optimize_with_progress":30,"optimized_fit":36,"optimizer_func":12,"optimum":[10,23,30,39],"option":[1,3,4,7,9,10,11,12,15,16,17,18,21,23,29,30,34,36,41],"orchestr":[1,11,15,29],"order":[0,1,3,10,11,12,14,15,16,18,19,21,22,23,26,30,32,33,34,39],"order_rel":[12,23,26,29,30,36,38,39,40],"ordin":23,"org":[24,26],"organiz":[14,23,41],"ori_i":[1,8,17],"ori_x":[1,8,17],"orient":[12,18,22,23,24,29,40],"orientation_resolut":[18,22,23,25],"origin":[1,3,5,6,7,8,10,11,12,16,17,18,21,23,26,30,39],"original_func":12,"original_graph":3,"oscil":[1,2,7,10,11,16,18,35,40],"oscillating_cam":[0,1],"oscillatingcamfollow":[1,7,23,31],"ot":23,"other_joint":[1,11],"other_nod":[1,3,9],"others":[23,24,30],"otherwis":[1,3,9,10,11,14,18,23,24],"outer":30,"outlin":[21,41],"outliv":[12,23],"output":[1,2,3,6,7,9,10,11,12,14,15,16,17,18,21,22,23,25,26,29,30,31,32,33,34,37,39,40],"output_angl":18,"output_cloud":[1,10,38],"output_joint":[1,10,11,15,17,38],"output_locus":30,"output_path":[30,36,37,38,40],"output_po":31,"output_veloc":36,"output_vi":36,"output_vx":36,"overal":[18,24],"overall_scor":[1,18],"overconstrain":3,"overdu":23,"overhead":[16,36],"overlaid":[21,33],"overrid":[5,16],"overview":1,"owning":23,"p":[1,3,9,11,15,16,17,18,23,30,34,37,39,40,41],"p0":16,"p0_ax":16,"p0_ay":16,"p0_i":16,"p0_vi":16,"p0_vx":16,"p0_x":16,"p1":[16,18,32],"p12":18,"p13":18,"p1_ax":16,"p1_ay":16,"p1_i":[8,16,17],"p1_vi":16,"p1_vx":16,"p1_x":[8,16,17],"p1n":18,"p2":[16,18,32],"p23":18,"p2_i":[8,16,17],"p2_x":[8,16,17],"p3_i":8,"p3_x":8,"p4_i":8,"p4_x":8,"p_ij":18,"pack":12,"packag":[0,23,25,33],"pad":[21,23,41],"page":[7,22,23,28,29],"paid":22,"pair":[0,1,3,7,8,9,10,11,12,14,15,16,18,19,21,22,23,25,26,29,33,34,40,41],"pairwis":[1,9,11,21,23],"pan":[21,41],"panda":[10,38],"paper":41,"paper_bgcolor":41,"parallel":[1,7,8,12,16,21,23,41],"parallel_coordinates_plot":[1,21,23,30,41],"param":[1,17,21,23,26,29,30,32,39],"param2dimens":26,"param_symbol":[17,39],"param_valu":17,"paramet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,25,26,31,32,37,38,39,40,41],"parameter":[3,17,18,23],"parameter_nam":[17,39],"parametr":[8,11,17,18,23],"parent":[1,2,6,7,12,16,17,21,23,32,39],"parent0":[1,17,39],"parent1":[1,17,39],"parent_idx":21,"parent_indic":[1,4,14,16],"pareto":[1,12,14,23,29,30,35],"pareto_front":[1,12,37],"paretofront":[12,13,14,23,37],"paretosolut":[12,13,14,23],"pariti":23,"pars":[3,23],"parse_isomer_signatur":[1,3],"parse_signatur":[1,3,34],"part":[1,3,6,9,11,15,21,23,26,32,34,41],"parti":23,"partial":17,"particip":24,"particl":[12,21,22,23,26,41],"particle_swarm":[0,1,23],"particle_swarm_optim":[1,12,22,23,26,29,30,31,32,36,38,39,40,41],"particle_swarm_optimization_async":[1,12,30],"particular":40,"partit":18,"partition_strategi":18,"pass":[1,3,7,8,10,11,12,13,16,18,21,23,25,26,29,30,32,34,36,37,40],"passiv":[1,2,3,9,34],"past":23,"paste":26,"path":[1,3,5,9,10,11,12,14,15,18,19,21,22,23,25,29,31,33,34,35,37,38,39,41],"path_accuraci":[1,18],"path_and_veloc":36,"path_error":[12,36,37,38],"path_gener":[0,1,23,25,29,40],"path_generation_with_tim":[1,18,40],"pathlib":[34,41],"pattern":[3,11,12,22,23,24,30,38,40],"paul":[1,8,17],"paulbourk":[1,8],"paus":[21,41],"pay":22,"pdf":41,"peak":[5,31,39],"peak_acc":36,"peak_vel":36,"peak_veloc":36,"penal":[12,30,36,37],"penalti":[1,10,12,23,32,37],"pendinglink":[1,11],"pendingtrack":[1,11],"peopl":24,"pep":23,"per":[1,2,3,9,10,11,12,13,14,15,16,17,18,19,21,22,23,25,26,30,32,34,36,37,38,41],"perf_count":39,"perfect":[18,23,37,41],"perform":[4,16,17,22,23,29],"period":[1,5,10,14,15,21,23,24,31,32],"permiss":24,"permit":11,"permut":19,"perpendicular":[11,17,18],"persist":9,"person":24,"perspect":23,"perturb":[1,10,11,12,15,23,39],"perturbation_delta":[1,10],"perturbed_metr":[10,38],"perturbed_path_metr":[1,10],"perturbed_traj":39,"perturbed_transmiss":[1,10,38],"phase":[12,23,32,34],"phi":[26,40],"physic":[1,11,15,18,24,29,36,41],"pi":[1,2,5,6,7,11,15,17,18,23,26,29,31,39,40],"pick":[11,16,18,30,34,38],"pickl":[12,23],"picklabl":[12,23],"pillow":[23,36,41],"pin":[1,3,7,9,11,17,18,19,21,23,25,26,29,33,34,39,40,41],"pip":[21,23,29,33,37,38,41],"pipelin":[12,23],"piston":2,"pitch":[5,7],"pitch_radius":[1,5,31],"pivot":[7,10,11,16,18,21,23,29,31,32,34,38,39,40],"pivot_anchor":[1,7,31],"pivot_i":16,"pivot_x":16,"pixel":[21,41],"pl":[23,26,29,30,32,33,34,36,37,38,39,40,41],"place":[1,2,11,16,18,21,23,34],"placement":23,"plain":[18,23,25,29,34,38,39,41],"plan":26,"planar":[1,3,6,7,9,11,15,16,18,19,23,29,33,34],"plane":11,"plate":31,"platform":22,"plausibl":23,"play":[21,41],"pleas":[1,29],"plecnik":18,"pledg":28,"plot":[1,10,12,13,14,21,23,26,29,30,33,35,37,38,40],"plot_acceleration_vector":[1,21],"plot_bgcolor":41,"plot_cloud":[1,10,38],"plot_kinematic_linkag":[1,21,23,41],"plot_kinematics_fram":[1,21],"plot_linkage_dxf":[1,21,23,41],"plot_linkage_plot":[1,14,21,41],"plot_linkage_plotly_with_veloc":[1,21,23,36,41],"plot_linkage_svg":[1,21,23,41],"plot_linkage_svg_with_veloc":[1,21],"plot_plot":[14,23],"plot_static_linkag":[1,21,23,41],"plot_velocity_vector":[1,21],"plotly_viz":[0,1],"plt":[26,37,38,41],"plus":[7,9,18,19,23,30,33,34,38],"png":[36,37,38,41],"point":[0,1,2,3,5,6,7,8,9,10,11,12,13,15,16,17,18,19,21,22,23,25,26,29,30,31,32,33,34,37,38,39,41],"point2d":[18,23],"point_distance_object":39,"point_error":40,"point_to_complex":[1,18,23],"point_track":[0,1],"pointarrayprofil":[1,5,23],"pointtrack":[1,6,7,23,25],"polar":[1,6,7,8,11,16,17,21,26],"pole":[18,40],"polici":[23,25],"polish":[12,23],"polit":24,"polynomi":[5,17,23,31],"polynomial_345":[1,5,23,31],"polynomial_4567":[1,5,23,31],"polynomialmotionlaw":[1,5,23,31],"pool":[12,23,30],"poor":[12,18,23,30,37],"pop_siz":[1,12,37],"popsiz":12,"popul":[0,1,11,12,17,18,23,25,29,37,39],"port":[1,9,11,16,23,29,34],"port1":[1,11],"port1_id":11,"port2":[1,11],"port2_id":11,"port_geometri":[1,11],"port_id":[9,11],"portid":[1,9],"pos":[1,15,16,23,26,41],"pos1":18,"pos2":18,"pose":[1,11,15,18,22,23,29],"posit":[1,2,3,4,6,7,9,10,11,12,13,14,15,16,17,18,21,23,24,26,29,31,32,33,34,36,38,39,40,41],"position_expr":[1,17],"position_std":[1,10,38],"positions_at_step_5":30,"positions_trajectori":16,"possibl":[1,3,7,10,12,18,23,36,39,40],"post":24,"potenti":14,"powel":12,"power":[18,39],"pp":[0,1,3,16,34],"ppdyad":[1,7,9,21,23,25],"ppr":3,"practic":[22,25,41],"pre":[1,11,12,14,15,17,21,23],"preassign":13,"preced":23,"precis":[18,22,23,25,30,41],"precision_indic":[1,18],"precision_point":[1,12,18,40],"precisionpoint":[12,18],"precomput":[5,12,21,41],"predic":14,"prefer":[3,9,18,30,39],"prefix":[3,9,12,34],"prepar":41,"prescrib":[18,22],"present":[23,41],"preserv":[17,19],"pressur":5,"pressure_angl":[1,5,31],"prev":[21,26],"prevent":21,"preview":26,"previous":[3,10,12,17,21,23],"primari":[1,2,14,16,18],"primit":29,"principl":3,"print":[1,3,7,10,12,15,16,17,18,22,23,25,26,29,30,31,32,33,34,36,37,38,39,40,41],"prior":23,"priorit":[18,37],"prioriti":37,"prismat":[1,3,7,9,10,11,15,16,19,21,23,34],"prismatic_joint":[1,10,11,15],"prismaticconnect":[1,11],"prismaticjoint":[1,9,11,23],"privaci":24,"privat":[23,24],"probabl":[12,19],"problem":[1,11,12,18,23,26,29,30,34,40],"process":[1,4,9,12,16,18,22,23,38],"processpoolexecutor":[12,23],"produc":[1,2,3,9,10,12,13,18,19,23,25,31,34],"product":16,"profession":24,"profil":[0,1,7,21,22,23,29,35,41],"profile_constraint":7,"profile_typ":[1,5],"profile_type_cod":5,"program":[1,8,12],"programmat":19,"progress":[12,23,41],"progress_fract":[1,12],"progress_handl":12,"progresscallback":[1,12],"project":[1,2,6,7,10,16,23,26,28],"promis":[12,23,25],"promot":34,"prompt":24,"propag":[16,23],"proper":[11,21,23],"properti":[1,2,3,5,6,7,10,11,12,13,14,15,16,17,18,23,31,32,40],"protocol":23,"prototyp":22,"provid":[1,2,3,4,5,6,7,8,9,10,11,12,15,16,17,18,19,21,23,24,30,31,32,33,38,39,41],"provision":[23,25],"proxi":[1,2,6,7,32],"prp":3,"prr":[3,34],"psi":40,"pso":[12,14,21,23,26,28,30,31,33,35,39,40],"pso_dashboard":41,"pso_parallel_coordin":41,"pso_plot":[0,1],"pso_visualization_demo":41,"ptp":39,"public":[0,21,22,23,24,28,29,41],"publish":[19,23,24],"pull":[23,30],"pure":[1,3,4,9,12,16,18,19,22,23,29,34],"purpos":[9,23,29],"push":23,"put":[1,2,11,23,32],"px":[34,41],"py":[3,9,18,22,23,25,26,29,34,41],"pycharm":23,"pylinkag":[22,23,25,26,30,31,32,33,34,35,36,37,38,39,40,41],"pymoo":[12,13,23,29,37],"pymunk":29,"pypi":[23,28],"pyplot":[26,37,38,41],"pyproject":23,"pyswarm":23,"pytest":[23,25],"python":[1,4,15,16,22,23,25,26,29],"python3":26,"q":[18,34],"quad":40,"quadrant_fit":26,"qualifi":9,"qualiti":[18,21,22,29,37,41],"qualitymetr":[1,14,18,23],"quantiti":[21,36],"quarter":[22,23,26],"quaternari":[1,11],"queri":[16,23],"question":[24,30,38],"quick":[1,22,23,26,38],"quicker":23,"quiet":23,"quiver":21,"quot":22,"r":[1,3,7,8,9,11,15,16,17,18,23,26,34],"r0":[1,5,16,17],"r0\u00b2":16,"r1":[1,8,16,17,18],"r1\u00b2":16,"r2":[1,8,17,18],"r3":18,"r_ab":17,"r_bc":17,"r_cd":17,"r_max":5,"r_p_r":3,"r_t_t":7,"r_tt_":7,"race":24,"rad":[1,11,15,16,18,23,33,36,41],"radian":[1,2,5,6,7,11,16,17,18,31,34,40],"radic":[17,26],"radii":[1,5,23,31],"radius":[1,2,5,6,7,8,11,15,16,17,18,21,23,26,29,30,32,33,36,37,38,39,40,41],"rail":[3,7,11,21,23,32],"rais":[1,2,3,7,9,10,11,12,13,14,15,16,17,18,19,23,25,32,33,34],"ran":23,"rand1bin":12,"rand1exp":12,"rand2bin":12,"rand2exp":12,"random":[10,12,37],"randtobest1bin":12,"randtobest1exp":12,"rang":[10,12,14,18,19,21,22,23,26,30,31,32,37,39,40,41],"rank":[0,1,10,12,14,23,29,37,38,40],"rank_solut":[1,18],"raphson":[3,16,18],"rare":[18,22,25],"raster":41,"rate":[1,2,11,16,23,36],"rather":[1,3,11,16,18,19,22,23,25,32,36],"ratio":[12,18,22,36,40],"ration":[17,23],"rational":23,"raw":[18,40],"raw_solut":[1,18,40],"raw_str":[1,3,34],"re":[7,11,12,23,30,34,41],"reach":[0,1,2,11,16,18,23,40],"reachabl":[12,23,25,40],"react":2,"read":[1,2,9,11,14,17,22,23,25,31,32],"read_angl":[1,11,23],"readabl":[3,5,6,7,9,11,12,14,19,22,23,25,32],"reader":23,"readi":[3,9,11,18,21,23,32,34,40,41],"readm":[22,23,25,28],"real":[21,23,39,40],"realist":[22,38],"realli":23,"rearrang":16,"reason":[22,24,29,34],"rebuild":[1,11,15,23,39],"rebuilt":23,"receiv":[12,23,30],"reciproc":[1,2,31],"recognis":[23,34],"recombin":12,"recommend":[18,23,29,33,38],"recompil":[1,11,15,23],"recomput":[1,3,5,6,7,32],"reconstruct":3,"record":[9,10,14,23,26,30,34,41],"recorded_strid":41,"recov":[23,34,39],"recreat":21,"rectangl":[30,41],"rectangle_fit":30,"rectangular":30,"recur":23,"red":[10,21,38,40,41],"redefin":23,"reduc":[30,36,37,40],"ref1_po":11,"ref2_po":11,"ref_bb":26,"ref_i":8,"ref_joint1":11,"ref_joint1_id":[1,11],"ref_joint2":11,"ref_joint2_id":[1,11],"ref_po":26,"ref_port1":[1,11],"ref_port2":[1,11],"ref_x":8,"refer":[1,3,6,7,8,9,10,11,12,13,16,18,21,22,23,25,26,28,29,37,39,40],"referenc":[1,9,23],"reference_point":[12,13,37],"refin":[12,18,19,23],"reflect":[7,22],"refresh":23,"refus":23,"regardless":[14,24],"regener":23,"region":[12,30],"regist":3,"regress":[22,23],"regular":[3,9,21],"reimplement":[22,23],"reject":[18,19,23,24,32,38,40],"relat":[1,6,7,9,10,11,12,16,18,19,23,28,30,38,40],"relationship":[18,29,40],"releas":[22,23,25],"religion":24,"reload":[1,2,6,7,23,34],"remain":[12,18,23],"rememb":23,"remov":[3,9,10,17,18,24,25],"remove_dyad":[12,23],"remove_edg":[1,3,9],"remove_hyperedg":[1,9],"remove_nod":[1,3,9],"renam":[23,25,34],"render":[21,23,26],"reorder":23,"reorgan":23,"repeat":[1,3,11,12,15,16,17,22,23,26,38,39],"replac":[14,23,25],"repoint":23,"report":[22,23,24],"reposit":11,"repositori":[23,29],"repr_polar_swarm":[23,26],"repres":[1,2,3,6,7,9,10,11,14,17,18,23,24],"represent":[1,3,4,5,9,11,14,16,17,18,19,23,29,33,35],"reproduc":[10,12,23,25,28,38,39],"request":[23,24,37],"requir":[1,3,5,6,7,10,12,15,16,18,21,23,28,30,32,34,36,37,38,40,41],"require_crank_rock":[18,40],"require_grashof":18,"require_grashof_driv":18,"resampl":18,"research":[34,40],"reset":[1,3,11,26],"reshap":14,"residu":[1,18],"residual_norm":18,"resolut":[18,22,23,25,41],"resolv":[7,21,23,25,32],"resolve_compon":[1,21],"respect":[16,17,18,23,24,29,39],"respons":28,"rest":[0,3,19,23,31,40],"restart":[1,2,11,12,23],"restart_temp_ratio":12,"restor":[1,3,11,15,23,30],"restored_graph":3,"restrict":12,"restructur":[12,23],"restyl":41,"result":[1,3,5,10,11,12,13,14,15,16,17,19,21,22,23,25,26,29,30,32,33,34,36,37,41],"retir":[23,29],"retriev":18,"return":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,25,26,29,30,31,32,33,34,36,37,38,39,40,41],"reus":[1,11,15,23],"reusabl":[29,34],"revamp":23,"revers":[1,2,11,16,23],"review":24,"revolut":[1,3,7,9,10,11,16,17,18,19,21,23,26,33,34,41],"revolute_anchor":[1,7,23,26],"revolute_dist1":10,"revolutejoint":[1,11,23,34],"rewrit":23,"rewritten":23,"rewrot":23,"ride":23,"right":[11,17,18,24,26,30,34,39,40],"rigid":[3,9,11,16,18,19,23,29,33,34],"ring":[12,23,30],"rise":[5,31],"rise_end":[1,5,31],"rise_start":[1,5,31],"risk":23,"rms":18,"rng":12,"robot":18,"robust":[23,35,38],"robust_linkag":38,"rocker":[1,7,10,11,15,17,18,23,26,29,30,31,32,33,34,37,38,39,40,41],"rocker1":18,"rocker2":18,"rocker_length":[17,18,29,39,40],"rocker_pivot":[10,31],"rockerl":26,"rod":[11,23],"role":[1,3,7,9,19,23,34],"roll":[3,11,31],"roller":[5,7,23],"roller_radius":[1,5,7,23,31],"root":[17,23],"rotari":[1,2,23,26,31],"rotat":[1,2,3,5,7,9,10,11,14,16,17,18,21,23,31,33,36,39,40],"rotate_point":[1,18],"rotation_matrix_2d":[1,18],"roth":18,"rough":[13,22,23,39],"round":[21,23,25,40,41],"rout":[16,23],"row":17,"rpr":[3,34],"rr_t":7,"rrp":[0,1,3,10,16,34],"rrpdyad":[1,7,9,15,21,23,25,26,29,33],"rrr":[0,1,3,10,15,16,18,23,26,29,33,34],"rrrdyad":[1,7,9,15,18,21,22,23,25,26,29,30,31,32,33,36,37,38,39,40,41],"rrrrrr":[3,34],"rrt_":[7,23],"rst":23,"rt__t":7,"rt_r":[3,7],"rt_t_":7,"rtr":3,"rule":[0,12,19,23,25,36],"run":[1,10,11,12,14,15,16,17,18,19,21,22,23,26,29,30,33,34,35,37,38,39,41],"run_benchmark":[22,23],"runtim":[19,22,23],"runtimewarn":23,"ryzen":22,"r\u00b2":16,"s":[0,1,2,3,5,6,7,8,9,10,11,12,14,15,16,17,18,19,21,22,23,24,25,30,31,32,33,34,35,36,37,39,41],"safe":[1,12,23],"said":23,"sampl":[1,10,12,17,18,23,25,26,40],"sandor":18,"sat":26,"satisfact":11,"satisfactori":23,"satisfi":[5,16,17,18],"save":[3,9,11,14,19,21,23,26,30,36,41],"save_count":26,"save_each":26,"save_linkage_dxf":[1,21,41],"save_linkage_step":[1,21,41],"save_linkage_svg":[1,14,21,41],"save_linkage_svg_with_veloc":[1,21,36,41],"save_path":[21,36,41],"save_png":41,"save_svg":[14,21,23,41],"savea":[21,41],"savefig":[36,37,38,41],"saw":23,"say":[23,40],"scale":[3,18,21,22,23,37,40,41],"scatter":[10,12,13,21,37,38],"schedul":[12,23],"scipi":[12,17,18,22,23,29],"scipy_optim":[0,1],"scope":28,"score":[1,12,13,14,18,21,23,26,30,32,36,37,38,39,40,41],"score_histori":[21,41],"score_solut":[1,18],"scores_array":[12,13,37],"scratch":29,"script":[23,27,28,30,33],"scrub":[21,41],"search":[12,14,18,19,22,23,25,28,29,34,35,37,39,40],"sec":29,"secant":[0,1,23],"secant_circles_intersect":23,"second":[1,3,6,7,8,9,10,11,16,17,18,19,21,22,23,25,26,29,36,38,39,41],"second_i":8,"second_x":8,"section":[21,22,23,26,41],"secur":24,"see":[0,1,6,7,9,11,12,15,19,21,22,23,24,25,26,29,30,32,33,34,36,37,38,39,40,41],"seed":[1,10,11,12,15,23,37,38],"seem":23,"seen":23,"segment":5,"select":[11,12,13,17,18,23,40],"select_compatible_dyad":[1,18,40],"selector":41,"self":[1,11,15,17,23,32],"semant":[1,6,23,25,29],"sen":[10,38],"sensit":[0,1,11,15,17,23,35,37],"sensitivity_analysi":[10,38],"sensitivity_rank":[1,10,38],"sensitivityanalysi":[1,10,11,15,38],"sensor":[1,6,11],"sent":23,"separ":[1,3,4,9,11,18,21,23,31,34],"sequenc":[1,3,10,12,13,17,19,21,23],"sequenti":[12,18],"sequential_vari":[1,12],"seri":[18,24],"serial":[0,1,12,19,23],"serialis":1,"serious":24,"serv":[1,6,9,23],"server":[23,29],"set":[1,2,3,5,6,7,11,12,15,17,18,19,21,22,23,24,25,26,31,32,34,37,40,41],"set_aspect":41,"set_branch":[1,11,23],"set_complet":[1,11,15,23,26],"set_constraint":[1,2,4,5,6,7,11,12,15,23,26,29,30,31,33,37],"set_coord":[1,2,4,6,11,15,23,26,30,32,37],"set_data":26,"set_dist":[1,11,23],"set_input_veloc":[1,11,15,21,23,36,41],"set_joint_posit":[1,11,23],"set_num_constraint":23,"set_rmax":26,"set_text":26,"set_titl":38,"set_xlabel":38,"set_xtick":26,"set_ylabel":38,"setup":23,"seven":23,"sever":[9,18,22,23,33,40],"sex":24,"sextic":18,"sexual":24,"shaft":21,"shape":[1,5,10,11,12,13,14,15,16,17,18,21,23,25,29,31,36,37,38,39,41],"shape_error":30,"share":[1,9,12,14,15,18,19,21,22,23,34],"sharp":[21,41],"shift":[21,39],"shim":23,"ship":[19,22,23,34],"short":[22,26,30,41],"shortcut":[23,25,29],"shorter":39,"shortest":[12,18,38,40],"shortest_crank":40,"shot":23,"show":[10,14,18,21,23,26,30,32,33,36,37,38,39,40],"show_acceler":[21,41],"show_dimens":[21,41],"show_kinemat":[1,21,23,36,41],"show_label":[21,41],"show_legend":[21,41],"show_limit":10,"show_linkag":[1,14,21,23,26,29,30,32,33,34,37,39,40,41],"show_loci":[21,41],"show_nomin":[10,38],"show_optim":26,"show_optimum":10,"show_veloc":[21,36,41],"showgrid":41,"shown":[33,41],"shrink":[22,25],"shuffl":23,"shut":12,"sibl":23,"side":[18,19,23,26,29,34,41],"sidebar":23,"sig":3,"sigma":12,"sign":[10,17,23],"signatur":[0,1,7,12,18,19,22,23,30,32],"signature_to_group_class":[1,3],"signature_to_hypergraph":[1,3,23,34],"signific":[1,11,15,16],"silent":[1,10,22,23,25,32],"sim":1,"sim_convers":[0,1],"sim_linkag":9,"similar":[1,2,17,23,37,41],"simlinkag":[9,18,21,23],"simpl":[1,5,9,12,21,23,26,30,31,34,39,41],"simpler":[3,18,30],"simplest":[33,39],"simplex":12,"simpli":[23,25,39],"simplic":18,"simplif":23,"simplifi":[1,17,23,37],"simul":[0,1,2,3,4,5,6,7,9,10,11,12,14,18,21,22,23,25,26,29,30,31,32,34,35,37,38,39,40,41],"simulate_al":[14,23],"simulate_memb":14,"simulate_with_kinemat":[1,16,23],"simultan":[3,23],"sin":[5,16,17,23,32,39],"sinc":[3,9,12,18,23,25],"singl":[1,3,9,10,11,12,13,14,16,17,18,19,21,22,23,24,32,34,36,41],"singular":[16,18,23],"sinusoid":[5,32],"sit":[4,16,23,30,32,33,34,40],"situat":23,"six":[12,18,19,22,23,25,34,41],"six_bar":[0,1],"six_bar_path_gener":[1,18],"size":[1,12,19,21,24,30,37,40,41],"skip":[1,10,21,23],"skip_stat":21,"skip_unbuild":23,"slice":14,"slide":[1,3,7,9,10,11,15,16,19,21,23,32],"slide_direct":11,"slide_dist":[1,11],"slide_through":11,"slideaxi":[1,11],"slider":[1,3,7,9,10,11,19,21,23,26,33],"slider_crank":[1,11,23],"slider_po":10,"slight":39,"slot":[3,7,12,16,32],"slow":[23,30,37],"slower":[22,30,39],"slowest":11,"slsqp":12,"small":[10,12,19,22,26,31,38,40],"smaller":[12,21,37,38,39],"smallest":38,"smooth":[5,12,14,31,37],"snap":23,"snippet":23,"social":[12,24],"socio":24,"softwar":[21,41],"soh":18,"sol":[14,18,40],"sol_a":37,"sol_b":37,"sole":23,"solid":[10,21,22,41],"solidwork":[21,41],"solut":[1,7,11,12,13,14,16,18,22,23,25,29,30,39],"solution_to_linkag":[1,18,23,40],"solutions_to_linkag":[1,18],"solv":[0,1,3,9,10,11,15,17,18,19,22,23,31,32,34,40],"solvabl":3,"solve_":23,"solve_arc_crank":[1,16],"solve_crank":[1,16],"solve_crank_acceler":[1,16,23],"solve_crank_veloc":[1,16],"solve_decomposit":[1,3,16],"solve_fix":[1,16],"solve_fixed_acceler":[1,16,23],"solve_fixed_veloc":[1,16],"solve_freudenstein_3_posit":[1,18],"solve_freudenstein_least_squar":[1,18],"solve_group":[1,3,16,23],"solve_line_lin":[1,16],"solve_linear":[1,16],"solve_linear_actu":[1,16],"solve_linkage_symbol":[1,17,39],"solve_ord":[1,3,4,14,16],"solve_oscillating_cam_follow":[1,16],"solve_pp_dyad":[1,16],"solve_prismatic_acceler":[1,16,23],"solve_prismatic_veloc":[1,16],"solve_revolut":[1,16],"solve_revolute_acceler":[1,16,23],"solve_revolute_veloc":[1,16,23],"solve_rigid_body_acceler":[1,16,23],"solve_rigid_body_veloc":[1,16,23],"solve_rrp_dyad":[1,16],"solve_rrr_dyad":[1,16],"solve_translating_cam_follow":[1,16],"solve_triad":[1,16],"solver":[0,1,3,4,11,14,15,23,25,28,29,32,34,36,39],"solver_categori":[1,3,23],"solver_convers":[0,1,23],"solver_data_to_linkag":[1,4],"solverdata":[1,4,11,12,14,15,16,23],"some_metr":12,"sometim":[23,30,40],"soon":[18,22,23],"sort":[14,18,19,23,24],"sourc":[1,3,9,11,12,23,28,34],"sp":[17,39],"space":[12,13,17,18,21,23,24,33,39,40],"span":31,"spare":[23,30],"spawn":12,"spec":21,"special":[1,3,9,11,18,21,31,32,35,40],"specif":[3,11,12,16,17,18,21,23,25,29,30,36,39,40,41],"specifi":[11,16,17,18,21,23,24,29,38,40],"speed":[1,2,5,23,31,34,36,37,39],"speedup":[16,22,23,39],"spheric":18,"sphinx":23,"spline":[5,23,31],"split":[18,22,23],"spot":23,"spread":[22,37,38],"sqr_dist":[1,8],"sqrt":[17,26,34,36,39],"squar":[1,8,12,17,18,23,26,30,39,40],"stabil":[1,3,9,11,18,28],"stabl":[19,23],"stack":18,"stadium":41,"stage":[12,18,22,23],"stale":23,"stand":[11,17,23],"standalon":16,"standard":[1,3,5,10,11,12,15,19,23,26,28,36,38,39,41],"star":40,"start":[0,1,2,3,5,7,8,11,12,14,15,16,23,26,28,30,31,32,34,41],"startup":23,"stash":[17,39],"state":[1,2,3,11,12,15,18,21,22,23],"static":[0,1,3,10,11,17,18,19,23,26],"stationari":[1,6,11,18,23],"statist":[10,38],"status":[3,17,24],"stay":[1,16,22,23,30,32],"std":[12,36,38],"std_deviat":[1,10,38],"steadi":[22,23],"steal":21,"step":[1,2,3,6,7,10,11,12,14,15,16,18,21,22,23,26,29,35],"step_export":[0,1],"step_fast":[1,7,11,15,16,22,23,29,32,33],"step_fast_with_kinemat":[1,11,15,21,23,33,36],"step_singl":[1,16,23],"step_single_acceler":[1,16,23],"step_single_veloc":[1,16],"step_with_deriv":[1,11,15,23],"stephenson":[12,18,19,23,34],"stephenson_from_length":[1,18,23],"still":[3,7,14,22,23,25,34,36],"stop":[5,18,22,23,25,31,40],"store":[3,9,11,14,16,17,18,19,23,36],"stp":[21,41],"str":[1,2,3,5,6,7,9,10,11,12,13,14,15,16,17,18,19,21,26],"straight":[2,11,18,23,29,39],"strategi":12,"stray":[23,30],"stream":23,"strict":[12,13,23,26,37],"stride":[1,10,14,23,26,32,41],"strider":[23,27,28,30,41],"string":[1,3,7,21,23,34],"stringif":23,"stringifi":[1,23],"stroke":[1,2,10,11,15,16,23,27,28],"stroke_at_posit":[1,10,11,15],"stroke_engin":26,"stroke_posit":[1,11,15,23],"stroke_rang":[1,10],"strokeanalysi":[1,10,11,15],"strong":22,"structur":[1,3,6,7,8,9,10,11,12,14,16,17,18,19,22,23,29,30,34,35],"structuralanalysi":[1,3,23],"style":[9,21,23,32,37],"styled_linkag":41,"sub":[18,23,29,34,39],"subclass":[3,5,32],"subdivid":21,"subdivis":[12,23],"subject":37,"submodul":[0,28],"subpackag":[0,23,28],"subplot":[21,23,26,38,41],"subprocess":23,"subscript":13,"subsequ":[16,23],"subset":[12,13,18,37],"substitut":[1,16,17,23],"substructur":3,"subsystem":[23,25],"subtract":23,"succeed":12,"success":[1,10,17,26,39],"sugar":23,"suggest":19,"suit":22,"suitabl":[3,9,12,21],"sum":[5,12,13,18,26,30,36,37,39,40],"super":32,"suppli":[11,12],"support":[3,5,9,12,13,14,16,18,21,23,28,29,31,41],"suptitl":26,"sure":12,"surfac":[23,25,29,31,39],"surviv":[18,23],"sustain":24,"svg":[14,21,23,29,35],"swallow":[23,25],"swap":23,"swap_vari":[12,23],"swarm":[12,21,22,23,26,36,38,41],"swarm_optim":26,"swarm_tiled_repr":[1,21,23,26],"sweep":[1,2,11,18,23,39,40],"swept":23,"swing":[7,31,32],"switch":23,"sym_linkag":[17,39],"sym_stride_evalu":26,"symbol":[0,1,23,35,40,41],"symbol_spec":23,"symbol_typ":[1,21],"symbolic_circle_intersect":[1,17],"symbolic_circle_line_intersect":[1,17],"symbolic_cyl_to_cart":[1,17],"symbolic_dist":[1,17],"symbolic_gradi":[1,17,39],"symbolic_hessian":[1,17],"symbolic_sqr_dist":[1,17],"symbolic_to_linkag":23,"symboliclinkag":[1,17,23,39],"symbolicoptim":[1,17],"symbolspec":[1,21],"symboltyp":[1,21,23],"symcoord":[17,23],"symcrank":[1,17,23,39],"symjoint":[1,17],"symmetr":26,"symmetri":39,"sympi":[17,23,29,35,39],"symrevolut":[1,17,23,39],"symstat":[1,17,23,39],"sync":[4,29],"synchron":4,"syntact":23,"syntax":3,"synthes":[1,18,29,40],"synthesi":[0,1,9,11,12,14,23,25,28,29,34,35,39],"synthesis_to_chromosom":[1,12],"synthesis_typ":[1,18],"synthesisproblem":[1,18],"synthesisresult":[1,18,23,40],"synthesistyp":18,"system":[1,3,5,11,16,17,18,22,23,31],"systemat":[3,19,23],"s\u00b2":[1,6,11,15,16,36],"t":[1,3,6,7,9,11,12,16,17,19,23,26,30,32,36,40],"t_r_t":[3,7,16],"t_rt_":[7,16],"tabl":[22,23],"tag":[3,23],"tail":12,"take":[12,22,23,24,25,32,34,40],"taken":[18,23],"tangent":8,"tangenti":16,"target":[1,3,9,12,17,18,19,23,30,34,37,39],"target_bbox":36,"target_cent":37,"target_i":39,"target_id":[1,12],"target_radius":37,"target_v":30,"target_x":39,"task":23,"tau":[23,26,32,34],"tax":23,"technic":41,"techniqu":[31,32,33,35,36,37,38,39,40],"tell":[22,23,25,29],"temperatur":12,"tempfil":34,"templat":[14,23],"temporarydirectori":34,"ten":[22,23,25],"tend":[18,25],"term":[16,18,23,24,39],"termin":[12,18],"terminolog":11,"ternari":[1,11,16,18,21,23],"test":[22,23,25,29],"test_converg":23,"test_geometri":23,"test_linkag":23,"test_optim":23,"test_public_api":[23,25,29],"testpso":23,"tetrad":[1,3],"text":[26,41],"thank":23,"themselv":[16,23],"theorem":18,"theoret":[18,26],"theori":[1,3,22,23,29,35],"therefor":[1,10,19,23,30,34],"theta":[1,8,17,23,39,40],"theta12":18,"theta13":18,"theta2":18,"theta4":18,"theta_array":17,"theta_sampl":17,"theta_v":[17,39],"theta_valu":[17,39],"thick":[1,21,41],"thicker":41,"thin":33,"thing":[23,32],"think":29,"third":[16,23],"thousand":[22,23],"thread":[12,30],"threadpoolexecutor":12,"threaten":24,"three":[9,11,16,18,19,21,22,23,25,29,32,33,34,39,41],"threshold":18,"throughout":[10,23,33],"throughput":[23,28],"thu":1,"thus":40,"tibia":26,"tight":[16,38],"tight_layout":[38,41],"tighten":38,"tile":[21,26],"time":[1,2,3,5,6,7,11,14,15,16,17,18,23,24,25,26,29,31,32,38,39],"tini":36,"tip":[11,18,23,26,29,32,33],"tip_locus":[26,29],"titl":[10,21,26,36,38,41],"tmp":34,"tnc":12,"to_ag":14,"to_cartesian":[1,18],"to_complex":18,"to_datafram":[1,10,38],"to_dict":[0,1,23],"to_dyad_solut":[1,18],"to_edg":[1,9,23],"to_graph":[1,19,34],"to_html":41,"to_hypergraph":[1,3,15,23],"to_inst":[1,9],"to_json":[1,19,23],"to_linkag":23,"to_loci":[14,23],"to_mechan":[1,3,7,9,23,34],"to_numba_coeffici":[1,5],"to_numba_data":[1,5],"to_pareto_front":[14,23,37],"to_port":[1,9],"to_simple_graph":[1,9,23],"toctre":23,"today":25,"togeth":[9,19,23,34],"toggl":[23,41],"tol":[1,8,12,17,38],"told":23,"toler":[1,8,10,11,12,15,17,18,29,35,37],"tolerance_analysi":[10,38],"tolerance_cloud":38,"tolerance_constrain":38,"toleranceanalysi":[1,10,11,15,38],"toml":23,"took":[22,23,25],"tool":[3,9,10,14,19,23,29,37,38],"tooltip":21,"top":[3,9,11,14,18,22,23,25,26,29,39],"topic":28,"topolog":[0,1,3,4,9,11,12,14,16,18,23,25,29,30,39],"topology_0":14,"topology_1":14,"topology_by_index":[1,19,23],"topology_dist":[1,12,23],"topology_entri":[1,12,18],"topology_id":[1,12,14,18,19],"topology_idx":[1,12],"topology_index":[1,19,23],"topology_key":[14,23],"topology_mutation_r":[1,12],"topology_neighbor":[1,12,23],"topology_neighborhood":[0,1],"topology_r":12,"topology_typ":[0,1],"topologycatalog":[1,12,19,23],"topologyneighbor":[1,12],"topologysolut":[1,12,14,18,23],"tornado":23,"total":[3,10,11,12,16,18,19,23,30,36],"total_iter":[1,12,30],"total_lift":[1,5,7,31],"touch":[23,25],"toward":[18,24,30],"tox":23,"tqdm":[23,29],"tqdm_verbos":23,"trace":[1,2,5,18,21,23,29,30,31,33,34,40,41],"tracer":[1,6,11],"tracer_point":[1,6],"track":[1,3,6,9,10,11,12,23,30,38],"tracker":[1,3,6,9,11,18,23],"trackerjoint":[1,11,23],"tracking_fit":30,"trade":[12,18,22,23,25,30,35],"trail":32,"traj":39,"trajectori":[1,4,10,12,14,15,16,17,18,21,23,29,30,41],"tran":38,"transcript":[1,8],"transfer":[3,18],"transform":[11,21,34,39,40],"transit":[23,25],"translat":[1,3,7,9,11,16,18,22,23,24,25,35],"translating_cam":[0,1],"translatingcamfollow":[1,7,23,31],"transmiss":[0,1,11,12,15,18,23,29,31],"transmission_angl":[1,11,15,23],"transmission_angle_at_posit":[1,10,11,15],"transmission_object":37,"transmission_penalti":[12,37],"transmissionangleanalysi":[1,10,11,15,23],"transmit":11,"transpar":[10,21,38],"trapezoid":[5,31],"travel":[10,31,32,37,41],"treat":[3,11,22,23,33],"tri":[3,9,18,26,33],"triad":[1,3,16,18,23,34],"trial":[23,26,30],"trials_and_error":23,"trials_and_error_optim":23,"trials_and_errors_optim":[1,12,23,26,30],"trials_and_errors_optimization_async":[1,12],"trials_and_errors_optimizatt":23,"triangl":[9,11,18,19,21,23,26,34],"tricircular":18,"trip":23,"tripl":[1,23],"trivial":36,"troll":24,"true":[1,3,5,7,9,10,11,12,13,14,15,16,17,18,19,21,23,25,26,30,31,34,36,37,38,39,40,41],"truncat":[12,23],"truss":19,"trustworthi":22,"tune":[30,39,40],"tupl":[1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,26,29,30,32,33],"turn":[18,23,25,26,32,34,40,41],"tutori":[0,23,25,30,31,32,33,34,36,37,38,39,40,41],"twelv":23,"twenti":23,"twice":23,"two":[1,2,3,6,7,8,9,11,12,14,16,17,18,19,21,22,23,25,30,31,32,33,34,38,39,40],"txt":23,"type":[0,1,2,3,5,7,8,9,10,11,12,14,18,19,21,23,25,26,31,34,35,38,40,41],"type_check":23,"typeerror":9,"typic":[4,5,7,11,18,19,22,23,34,40,41],"typing_extens":23,"typo":23,"u":[5,31],"ugli":23,"unabl":1,"unaccept":24,"unaffect":[23,25],"unassembl":23,"unavail":14,"unblock":23,"unbound":[17,18],"unbuild":[1,10,11,15,16,17,18,23,30,37,38],"unbuildableerror":[0,1,7,11,16,23,26,30,32,33],"unchang":[22,23,25],"uncom":39,"uncondit":23,"unconstrain":11,"undefin":[1,2,7,8,11,23],"underconstrain":[3,9,11],"underconstrainederror":[0,1,11,23],"underlying":[3,18,40],"underscor":25,"understand":[30,34],"unifi":[7,14],"uniform":[10,13,23,30,33],"uniform_veloc":36,"uniqu":[3,9,11,18,19,40],"unit":[1,2,3,6,7,11,15,16,21,22,31,34,36,38,41],"unittest":23,"universal":[14,23],"unknown":[7,16,18,21,23],"unless":[23,36],"unlik":[1,3,6,7,11,12,18,37,40],"unmaintain":23,"unpack":23,"unprofession":24,"unrank":18,"unreach":[12,23,40],"unrel":[23,25,39],"unreleas":28,"unresolv":23,"unsolicit":24,"unsupport":3,"untouch":[11,23],"untyp":23,"unus":[1,6,7,16,26,32],"unwelcom":24,"updat":[4,11,12,16,21,23],"update_animated_plot":[1,21],"update_layout":41,"update_posit":[1,11],"update_solver_constraint":[1,4,23],"update_solver_posit":[1,4],"update_trac":41,"update_xax":41,"update_yax":41,"upfront":30,"upgrad":25,"upl":12,"upper":[11,12,13,17,22,30,32,34],"upper_bound":[12,30],"upstream":9,"upward":31,"url":23,"urllib3":23,"us":24,"usag":[3,4,9,11,16,17,26,36],"use":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,30,31,33,35,36,39,40,41],"useless":21,"user":[4,6,11,14,22,23,41],"usr":26,"usual":[16,30,40],"util":[0,1,3,10,17,21,23],"uv":[22,23,29,33],"uvicorn":23,"ux":34,"uy":34,"v":16,"v0":16,"v1":16,"val":38,"valid":[1,3,10,11,12,16,18,19,23,29,32,34,38,40],"valid_ratio":36,"valid_spe":36,"validate_against":[0,1,34],"validate_decomposit":[1,3,34],"validate_fourbar":[1,18],"validation_messag":[1,3],"valu":[1,2,3,5,6,8,9,10,11,12,13,15,16,17,18,19,21,22,23,25,26,30,31,32,34,36,38,40],"valueerror":[1,2,3,7,9,10,11,12,13,14,15,16,17,18,19,23,32],"vari":[12,14,31,39,40],"variabl":[1,2,3,5,6,7,9,10,11,12,13,14,16,18,19,21,22,23,38],"variant":[3,7,12,14,23,41],"variat":[10,12,23,29,36,38],"varieti":18,"various":[3,5,12,14,23,31],"vbox":21,"vector":[1,8,11,14,21,23,26,41],"vel":[1,15,21],"vel_uniform":36,"veloc":[0,1,2,4,5,6,11,15,17,21,23,29,31,32,33,34,35,38,40,41],"velocities_trajectori":16,"velocity_anim":[36,41],"velocity_color":[21,36],"velocity_fram":36,"velocity_penalti":36,"velocity_plot":36,"velocity_scal":[21,36,41],"velocity_vari":36,"verbos":[1,12,23,30,32,36,37,38,39,40,41],"veri":[12,26,36],"verif":[19,22,23,38,40],"verifi":[18,22,23,38,41],"verify_function_gener":[1,18,40],"verify_path_gener":[1,18],"version":[12,17,21,22,23,24,25,29,30,32],"versus":10,"vertic":[6,7,11,19,21,26,31],"via":[1,3,4,9,10,11,12,14,15,18,19,21,23,24,29,31,33,36],"vibrat":36,"video":21,"view":[1,14,15,23,26,38,41],"view_linkag":26,"view_swarm_polar":26,"view_swarm_til":26,"viewpoint":24,"violat":24,"violent":12,"viridi":21,"virtual":23,"visibl":[22,24,25],"visit":12,"visual":[0,1,3,9,11,12,14,18,23,25,26,31,32,34,35,39,40],"visualis":26,"viz":[23,29,41],"vizual":23,"vocabulari":23,"volum":[12,13],"vs":[7,18,39],"vulner":23,"vx":[1,6,11,15,16,21,36],"vx0":36,"vx1":36,"vy":[1,6,11,15,16,21,36],"vy0":36,"vy1":36,"w":[25,41],"wait":22,"walk":[0,18,23,26,29,33,41],"walker":[9,23],"walkthrough":23,"wall":23,"wampler":18,"want":[1,6,11,21,26,29,30,34,36,40,41],"warm":[12,23],"warm_start":[0,1],"warm_start_co_optim":[1,12,23],"warm_start_sampl":[1,12,23],"warmup":[22,23],"warn":[1,3,7,18,23,25,40],"warrant":22,"wasn":23,"watch":33,"watt":[12,18,19,23,34],"watt_from_length":[1,18,23],"way":[0,1,3,7,9,18,19,21,22,23,24,25,29,30,32,33,34,39],"wear":36,"websit":23,"wed":1,"weight":[12,13,18,30,36,37],"weighted_object":30,"weisfeil":19,"welcom":[24,26,29],"well":[12,13,16,18,23,24,30,37],"whatev":[23,34],"wheel":23,"whenev":23,"wherev":[16,23],"whether":[10,12,17,18,19,21,25,38],"whi":[22,23,24],"whichev":[18,23],"white":41,"whole":[23,25,26,31,41],"whose":[1,9,11,12,14,15,16,18,19,23,32,33,34,40],"wide":[5,18,38,40],"widen":[30,37],"wider":22,"width":[1,18,21,37,41],"wiki":[24,26],"wikipedia":26,"will":[1,7,11,12,15,16,17,21,23,24,25,39],"win":23,"window":[33,41],"within":[1,2,3,9,10,11,12,14,18,19,23,24,30,39],"without":[1,3,6,9,11,12,13,15,18,22,23,24,25,26,29,30,32,34,37,39],"wl":[19,23],"wolfram":8,"woodhead":[1,8],"word":23,"work":[1,3,4,10,14,19,21,22,23,28,32,34,39,41],"worker":[12,23],"workflow":[23,29],"workspac":39,"world":[18,21,41],"wors":[12,13,37],"worsen":37,"worst":[10,18,37,38],"worst_angl":[1,10],"worst_transmiss":37,"worth":23,"wrap":[3,12,18,23,33,34,41],"wrapper":[1,3,11,12,23,30,41],"write":[23,30,34,41],"write_html":[36,41],"writer":[26,41],"written":[23,24],"wrong":[3,23,25,30],"www":[24,26],"x":[1,2,3,6,7,8,10,11,12,14,15,16,17,18,21,22,23,26,29,30,32,33,34,36,37,39,40,41],"x0":[12,16,17,32],"x1":[1,8,16,17,32],"x2":[1,8,17],"x_a":16,"x_b":16,"x_coupler":39,"x_crank":39,"x_expr":[17,39],"x_func":[17,39],"x_max":[1,8,10],"x_min":[1,8,10],"x_rang":39,"x_val":17,"xl":12,"xs":[1,10,23,32,41],"xu":12,"y":[1,2,3,6,7,8,10,11,12,14,15,16,17,18,21,23,26,30,32,33,36,37,39,40],"y0":[16,17,32],"y1":[1,8,16,17,32],"y2":[1,8,17],"y_a":16,"y_b":16,"y_coupler":39,"y_crank":39,"y_expr":[17,39],"y_func":[17,39],"y_max":[1,8,10],"y_min":[1,8,10],"y_rang":39,"yet":[3,9,12,14,16,23,29,32],"yield":[1,3,11,15,16,19,21,23,33,40],"yml":23,"your_script":25,"ys":[1,10,23,30],"z":[18,21,41],"z_offset":21,"zenodo":23,"zero":[1,5,11,12,15,18,22,23,25,26,31,34,39],"zip":[26,30,36,38,39,40],"zone":23,"zoom":[21,41],"\u03b1":16,"\u03b3":16,"\u03b8":16,"\u03c9":16,"\u03c9\u00b2":16,"\u1d40":16,"\u1e91":16},"titles":["pylinkage","pylinkage package","pylinkage.actuators package","pylinkage.assur package","pylinkage.bridge package","pylinkage.cam package","pylinkage.components package","pylinkage.dyads package","pylinkage.geometry package","pylinkage.hypergraph package","pylinkage.linkage package","pylinkage.mechanism package","pylinkage.optimization package","pylinkage.optimization.collections package","pylinkage.population package","pylinkage.simulation package","pylinkage.solver package","pylinkage.symbolic package","pylinkage.synthesis package","pylinkage.topology package","pylinkage.topology.data package","pylinkage.visualizer package","Benchmarks","Changelog","Contributor Covenant Code of Conduct","Deprecations","Example Scripts","examples","Welcome to pylinkage\u2019s documentation!","Pylinkage","Advanced Optimization Techniques","Cam-Follower Mechanisms","Custom Components","Getting Started","Graph-Based Linkage Representation","Tutorials","Kinematics-Based Optimization","Multi-Objective Optimization","Sensitivity & Tolerance Analysis","Symbolic Computation","Linkage Synthesis","Visualization Backends"],"titleterms":{"2d":[37,41],"3d":41,"Do":29,"How":25,"I":29,"It":29,"Offs":37,"Our":24,"The":34,"Up":36,"What":[22,25,29],"When":[34,37],"Where":22,"Which":29,"Your":33,"acceler":16,"actuat":2,"add":23,"advanc":[30,35,37,40],"agent":13,"algorithm":37,"altern":29,"analysi":[3,10,19,29,31,34,37,38,39,40],"analyz":38,"angl":[31,38],"angular":36,"anim":[21,40,41],"api":[29,38],"appear":41,"applic":34,"arc_crank":2,"architectur":29,"assur":[3,34],"assur_mechan":3,"assurmechan":34,"async":30,"async_optim":12,"attach":34,"attribut":24,"avail":31,"away":25,"back":39,"backend":41,"ban":24,"bar":[26,29,31,33],"base":[34,36,38],"basic":[30,31,37,38,40,41],"benchmark":22,"best":[32,37],"block":33,"bound":30,"bridg":4,"build":[33,34,39],"builder":[11,29],"burmest":[18,40],"cad":41,"cam":[5,31],"can":29,"catalog":[19,34],"chang":23,"changelog":23,"characterist":[36,39],"choos":41,"class":[32,39],"cloud":38,"co_optimization_typ":12,"code":24,"collect":13,"combin":[36,37],"comparison":[37,39],"compil":39,"complet":[32,33,38,39,41],"compon":[6,32,33,39],"compromis":37,"comput":39,"concept":33,"conduct":24,"connect":31,"consider":36,"constraint":[30,33,36,38],"content":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],"contribut":29,"contributor":24,"convers":[17,18],"convert":[34,39],"core":[8,9,18,21,33,35],"correct":24,"count":38,"coven":24,"crank":2,"creat":[18,33,34,39,40],"current":25,"curv":40,"custom":[32,41],"data":[20,30],"datafram":38,"decompos":34,"decomposit":3,"default":37,"defin":[29,30,32,33],"deprec":[23,25],"detect":34,"dimens":[1,34,40,41],"direct":36,"document":28,"domin":37,"downstream":31,"drawsvg":41,"drawsvg_viz":21,"driven":31,"dxf":41,"dxf_export":21,"dyad":[7,25],"effect":39,"els":29,"embed":41,"enforc":24,"engin":26,"enumer":19,"environ":22,"equat":40,"error":33,"evalu":39,"exampl":[26,27,30,31,32,33,36,37,38,39,40,41],"except":1,"export":[25,38,41],"factori":[7,11],"fast":39,"featur":35,"filter":37,"first":[29,33],"fit":[30,38],"five":40,"fix":[7,23],"follow":31,"four":[26,29,31,33,40],"fourbar_symbol":39,"frame":41,"freudenstein":40,"front":37,"function":[30,39,40],"function_gener":18,"functionprofil":31,"general":18,"generat":[30,40],"geometri":[8,17],"get":[33,35],"get_constraint":32,"gif":41,"go":25,"graph":[3,9,34],"grashof":40,"grid":30,"grid_search":12,"ground":6,"group":[3,16,34],"guidelin":[24,38],"handl":33,"hierarch":34,"hierarchi":9,"hyperedg":34,"hypergraph":[9,34],"hypergraph_convers":3,"hypervolum":37,"ii":37,"iii":37,"illustr":39,"implement":32,"import":33,"includ":38,"indic":[28,37],"initi":30,"instal":[29,33,37],"interact":[36,41],"interfac":32,"introduct":[28,31],"invert":26,"isomorph":[19,34],"joint":[11,16,17,32,36,38],"kinemat":[21,36,41],"latex":41,"law":31,"length":[18,39],"linear":2,"link":[11,18,28,29,34,39],"linkag":[10,15,17,18,26,29,31,33,34,39,40,41],"loci":30,"matplotlib":[36,41],"mechan":[11,31,33,34],"mechanism_convers":[3,9],"method":39,"migrat":25,"minim":36,"mixed_vari":12,"mobil":34,"mobilityresult":25,"modul":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],"motion":[31,33,40],"motion_gener":18,"motion_law":5,"multi":[30,37],"multi_object":12,"multi_topolog":18,"multipl":41,"mutable_ag":13,"n_orientation_sampl":25,"name":[25,38],"next":[30,31,32,33,34,36,37,38,39,40,41],"nsga":37,"number":22,"numer":39,"object":[30,37,39],"oper":12,"optim":[12,13,17,29,30,31,36,37,38,39,40],"oscil":[31,32],"oscillating_cam":7,"output":[36,38,41],"overview":[18,30,34,36,38,39,40],"packag":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,28],"page":41,"paramet":30,"pareto":[13,37],"particl":30,"particle_swarm":12,"path":[30,36,40],"path_gener":[18,22],"peak":36,"penalti":38,"perform":[36,39],"perman":24,"perturb":38,"pitch":31,"pledg":24,"plot":[36,41],"plotly_viz":21,"point":40,"point_track":6,"pointarrayprofil":31,"popul":14,"pose":40,"posit":30,"pp":7,"practic":[32,38],"pre":39,"precis":40,"preserv":30,"pressur":31,"profil":[5,31,36],"progress":30,"project":29,"pso":[22,29,41],"pso_plot":21,"public":[25,36],"pylinkag":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,28,29],"qualiti":36,"queri":36,"quick":[18,28,29,35,39,40,41],"radius":31,"rank":18,"re":25,"read":39,"recommend":39,"refer":[35,38,41],"relat":29,"reload":32,"remov":23,"represent":34,"reproduc":[22,37],"requir":29,"respons":24,"result":[18,38,39,40],"right":41,"roller":31,"rrp":7,"rrr":7,"run":36,"s":[28,40],"sampl":38,"scipy_optim":12,"scope":24,"script":26,"search":30,"secant":8,"select":[37,38],"sensit":[10,38,39],"serial":[3,9,11,34],"set":36,"set_constraint":32,"setup":38,"shape":30,"show":41,"signatur":[3,34],"sim_convers":9,"simul":[15,16,33,36],"singl":37,"six_bar":18,"size":38,"slider":[32,41],"solut":[37,40],"solv":16,"solver":[16,17,22],"solver_convers":4,"specif":38,"spend":22,"stabil":29,"standard":24,"start":[18,29,33,35,39,40],"static":[21,41],"step":[30,31,32,33,34,36,37,38,39,40,41],"step_export":21,"strider":26,"stroke":26,"structuralanalysi":25,"style":41,"submodul":[1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,21],"subpackag":[1,12,19],"svg":[36,41],"swarm":30,"symbol":[17,21,29,39],"symbolicoptim":39,"symjoint":39,"synthesi":[18,22,40],"system":33,"tabl":28,"techniqu":30,"temporari":24,"ternari":34,"theori":[18,34,40],"three":[37,40],"throughput":22,"time":[22,40],"toler":[38,39],"topic":35,"topolog":[19,20,34],"topology_neighborhood":12,"topology_typ":18,"trade":37,"trajectori":39,"translat":31,"translating_cam":7,"transmiss":[10,37,38],"troubleshoot":[30,37],"tutori":[28,29,35],"type":[16,33],"typic":38,"understand":[32,33,37,38,39],"uniform":36,"unreleas":23,"usag":[37,38],"use":[29,32,34,37,38],"util":[12,18],"valu":39,"vector":36,"veloc":[16,36],"verifi":[39,40],"via":34,"visual":[21,29,30,33,36,37,38,41],"vs":[37,40],"warm_start":12,"warn":24,"web":41,"welcom":28,"whi":25,"work":[18,25,30,40],"workflow":[38,39,41]}}) \ No newline at end of file diff --git a/docs/tutorials/advanced_optimization.html b/docs/tutorials/advanced_optimization.html index 94d2699..fd897f2 100644 --- a/docs/tutorials/advanced_optimization.html +++ b/docs/tutorials/advanced_optimization.html @@ -6,14 +6,14 @@ - Advanced Optimization Techniques — pylinkage 1.2.2 documentation + Advanced Optimization Techniques — pylinkage 1.3.0 documentation - + @@ -144,7 +144,7 @@

    Basic Fitness Function@pl.kinematic_minimization def fitness(loci, **kwargs): - """Evaluate linkage fitness. + """Evaluate linkage fitness. :param loci: Joint positions for each simulation step. Structure: tuple[tuple[tuple[float, float], ...], ...] @@ -154,7 +154,7 @@

    Basic Fitness Function :param kwargs: ``linkage``, ``params`` (the candidate constraints) and ``init_pos`` (the joint positions the simulation started from). :return: Fitness score (lower is better for minimization) - """ + """ # Get the locus (path) of the last joint output_locus = [step[-1] for step in loci] @@ -181,7 +181,7 @@

    Working with Loci DataUnderstanding the loci structure is key to writing good fitness functions:

    @@ -214,22 +214,22 @@

    Example: Optimizing for Path Shapedef create_linkage(): - """Create the base linkage to optimize.""" - A = Ground(0.0, 0.0, name="A") - D = Ground(3.0, 0.0, name="D") + """Create the base linkage to optimize.""" + A = Ground(0.0, 0.0, name="A") + D = Ground(3.0, 0.0, name="D") crank = Crank( - anchor=A, radius=1.0, angular_velocity=0.31, name="Crank", + anchor=A, radius=1.0, angular_velocity=0.31, name="Crank", ) output = RRRDyad( anchor1=crank.output, anchor2=D, - distance1=3.0, distance2=1.0, name="Output", + distance1=3.0, distance2=1.0, name="Output", ) return Linkage([A, D, crank, output]) @pl.kinematic_minimization def rectangle_fitness(loci, **kwargs): - """Minimize distance from a target rectangle.""" + """Minimize distance from a target rectangle.""" output_path = [step[-1] for step in loci] bbox = pl.bounding_box(output_path) @@ -259,8 +259,8 @@

    Example: Optimizing for Path Shape# Every optimizer returns an Ensemble: the optimized linkage plus one # Member per candidate kept, best first. best = results[0] -print(f"Best score: {best.score}") -print(f"Best constraints: {best.dimensions}") +print(f"Best score: {best.score}") +print(f"Best constraints: {best.dimensions}") # Animate the best member: the Ensemble simulates it from the joint # positions the search started from, then hands the loci to show_linkage @@ -297,8 +297,8 @@

    Particle Swarm Optimization Parametersdimensions=None, # Swarm dynamics - leader=3.0, # Pull towards the neighbourhood's best - follower=0.1, # Pull towards the particle's own best + leader=3.0, # Pull towards the neighbourhood's best + follower=0.1, # Pull towards the particle's own best inertia=0.6, # Momentum neighbors=17, # Ring-topology neighbourhood size @@ -346,7 +346,7 @@

    Grid Search Optimizationorder_relation=min, # min or max verbose=False, ) -print(f"{len(results)} candidates kept, best score {results[0].score:.3f}") +print(f"{len(results)} candidates kept, best score {results[0].score:.3f}") # Note: Grid search is O(divisions^n) where n = number of constraints # Use sparingly for high-dimensional problems @@ -359,7 +359,7 @@

    Multi-Objective Optimization
    @pl.kinematic_minimization
     def weighted_objectives(loci, **kwargs):
    -    """Combine objectives with weights (simple approach)."""
    +    """Combine objectives with weights (simple approach)."""
         output_path = [step[-1] for step in loci]
     
         # Objective 1: Match target bounding box
    @@ -384,11 +384,11 @@ 

    Constraint PreservationSometimes you want to optimize only certain constraints while keeping others fixed:

    The pylinkage.visualizer PSO plots (parallel_coordinates_plot, @@ -470,9 +470,9 @@

    Async Optimizationdef on_progress(progress): if progress.current_iteration % 10 == 0: print( - f"Iteration {progress.current_iteration}" - f"/{progress.total_iterations}: " - f"best = {progress.best_score}" + f"Iteration {progress.current_iteration}" + f"/{progress.total_iterations}: " + f"best = {progress.best_score}" ) results = await particle_swarm_optimization_async( @@ -489,7 +489,7 @@

    Async Optimization# Run async optimization results = asyncio.run(optimize_with_progress()) -print(f"Async result: {results[0].score:.3f}") +print(f"Async result: {results[0].score:.3f}")

    The optimization runs in a thread-pool executor, so the event loop stays diff --git a/docs/tutorials/cam_follower.html b/docs/tutorials/cam_follower.html index bbd7daa..7e1c9ab 100644 --- a/docs/tutorials/cam_follower.html +++ b/docs/tutorials/cam_follower.html @@ -6,14 +6,14 @@ - Cam-Follower Mechanisms — pylinkage 1.2.2 documentation + Cam-Follower Mechanisms — pylinkage 1.3.0 documentation - + @@ -241,14 +241,14 @@

    Basic Examplefrom pylinkage.cam import FunctionProfile, HarmonicMotionLaw # Fixed cam center -cam_center = Ground(0.0, 0.0, name="cam_center") +cam_center = Ground(0.0, 0.0, name="cam_center") # Cam driver (rotating crank) cam_crank = Crank( anchor=cam_center, radius=0.1, # Small radius (just for visualization) angular_velocity=0.1, # Rotation speed - name="cam" + name="cam" ) # Cam profile @@ -263,7 +263,7 @@

    Basic Example) # Guide point (defines direction of follower motion) -guide = Ground(0.0, 1.5, name="guide") +guide = Ground(0.0, 1.5, name="guide") # Translating follower follower = TranslatingCamFollower( @@ -272,19 +272,19 @@

    Basic Exampleguide=guide, guide_angle=math.pi/2, # Vertical motion roller_radius=0.0, # Knife-edge follower - name="follower" + name="follower" ) # Create linkage linkage = Linkage( components=[cam_center, guide, cam_crank, follower], - name="Cam mechanism" + name="Cam mechanism" ) # Simulate for positions in linkage.step(): follower_pos = follower.output.position - print(f"Follower at: {follower_pos}") + print(f"Follower at: {follower_pos}")

    @@ -315,8 +315,8 @@

    Basic Example from pylinkage.cam import FunctionProfile, CycloidalMotionLaw # Fixed points -cam_center = Ground(0.0, 0.0, name="cam_center") -pivot = Ground(2.0, 0.0, name="pivot") +cam_center = Ground(0.0, 0.0, name="cam_center") +pivot = Ground(2.0, 0.0, name="pivot") # Cam driver cam_crank = Crank( @@ -352,7 +352,7 @@

    Basic Example for positions in linkage.step(): output_pos = follower.output.position - print(f"Arm end at: {output_pos}") + print(f"Arm end at: {output_pos}")

    @@ -371,9 +371,9 @@

    Example: Cam-Driven Four-Barfrom pylinkage.cam import FunctionProfile, HarmonicMotionLaw # Ground points -cam_center = Ground(0.0, 0.0, name="cam_center") -guide = Ground(0.0, 2.0, name="guide") -rocker_pivot = Ground(3.0, 0.0, name="rocker_pivot") +cam_center = Ground(0.0, 0.0, name="cam_center") +guide = Ground(0.0, 2.0, name="guide") +rocker_pivot = Ground(3.0, 0.0, name="rocker_pivot") # Cam mechanism cam_crank = Crank(anchor=cam_center, radius=0.1, angular_velocity=0.1) @@ -414,7 +414,7 @@

    Example: Cam-Driven Four-Bar# solves, so its position is read directly; only actuators and cam # followers expose a separate ``output``. for positions in linkage.step(): - print(f"Rocker joint at: {rocker.position}") + print(f"Rocker joint at: {rocker.position}")

    @@ -431,7 +431,7 @@

    Pressure Angle# Check pressure angle at various cam positions for angle in [0, math.pi/4, math.pi/2, math.pi]: pressure = profile.pressure_angle(angle) - print(f"At {math.degrees(angle):.0f} deg: pressure angle = {math.degrees(pressure):.1f} deg") + print(f"At {math.degrees(angle):.0f} deg: pressure angle = {math.degrees(pressure):.1f} deg")

    @@ -441,7 +441,7 @@

    Pitch Radius
    roller_radius = 0.1
     for angle in [0, math.pi/4, math.pi/2]:
         pitch = profile.pitch_radius(angle, roller_radius)
    -    print(f"Pitch radius at {math.degrees(angle):.0f} deg: {pitch:.3f}")
    +    print(f"Pitch radius at {math.degrees(angle):.0f} deg: {pitch:.3f}")
     

    diff --git a/docs/tutorials/custom_joints.html b/docs/tutorials/custom_joints.html index a5713fc..7f09eab 100644 --- a/docs/tutorials/custom_joints.html +++ b/docs/tutorials/custom_joints.html @@ -6,14 +6,14 @@ - Custom Components — pylinkage 1.2.2 documentation + Custom Components — pylinkage 1.3.0 documentation - + @@ -155,23 +155,23 @@

    Step 1: Define the Classclass Slider(BinaryDyad): - """A joint that sits a fraction ``t`` of the way from anchor1 to anchor2. + """A joint that sits a fraction ``t`` of the way from anchor1 to anchor2. - t=0 puts the joint on anchor1 - t=1 puts the joint on anchor2 - values in between interpolate linearly - """ + """ - __slots__ = ("t",) + __slots__ = ("t",) def __init__(self, anchor1, anchor2, t=0.5, name=None): - """Create a Slider joint. + """Create a Slider joint. :param anchor1: Parent component at the start of the slide. :param anchor2: Parent component at the end of the slide. :param t: Position parameter (0 to 1). :param name: Joint name. - """ + """ super().__init__(None, None, name) # position is computed below self.anchor1 = anchor1 self.anchor2 = anchor2 @@ -184,7 +184,7 @@

    Step 1: Define the Class

    Return the geometric parameters that define this joint’s motion:

    def get_constraints(self):
    -    """Return the slide parameter as constraint."""
    +    """Return the slide parameter as constraint."""
         return (self.t,)
     
    @@ -195,10 +195,10 @@

    Step 3: Implement set_constraintsget_constraints returned; the trailing *args keeps the signature compatible with the built-in dyads:

    def set_constraints(self, t=None, *args):
    -    """Set the slide parameter.
    +    """Set the slide parameter.
     
         :param t: New position parameter (0 to 1).
    -    """
    +    """
         if t is not None:
             self.t = t
     
    @@ -210,14 +210,14 @@

    Step 4: Implement reload_get_anchor_position reads either a component or an actuator’s output proxy:

    @@ -273,28 +273,28 @@

    Using the Custom Componentfrom pylinkage.simulation import Linkage # The rail -p1 = Ground(0.0, 0.0, name="P1") -p2 = Ground(4.0, 0.0, name="P2") +p1 = Ground(0.0, 0.0, name="P1") +p2 = Ground(4.0, 0.0, name="P2") # A pivot halfway along it (custom component, see above) -pivot = Slider(anchor1=p1, anchor2=p2, t=0.5, name="Pivot") +pivot = Slider(anchor1=p1, anchor2=p2, t=0.5, name="Pivot") # A crank, and a rocker between the crank tip and the pivot -motor = Ground(1.0, 3.0, name="Motor") -crank = Crank(anchor=motor, radius=1.0, angular_velocity=0.1, name="Crank") +motor = Ground(1.0, 3.0, name="Motor") +crank = Crank(anchor=motor, radius=1.0, angular_velocity=0.1, name="Crank") rocker = RRRDyad( anchor1=crank.output, anchor2=pivot, distance1=3.0, distance2=2.5, - name="Rocker", + name="Rocker", ) -linkage = Linkage([p1, p2, motor, pivot, crank, rocker], name="Sliding pivot") +linkage = Linkage([p1, p2, motor, pivot, crank, rocker], name="Sliding pivot") loci = list(linkage.step()) -print(f"Pivot at {pivot.position}, {len(loci)} steps simulated") -print(f"Constraints: {linkage.get_constraints()}") +print(f"Pivot at {pivot.position}, {len(loci)} steps simulated") +print(f"Constraints: {linkage.get_constraints()}") pl.show_linkage(linkage)

    @@ -310,7 +310,7 @@

    Using the Custom Component

    @@ -340,18 +340,18 @@

    Example: Oscillating Jointclass Oscillator(ConnectedComponent): - """A joint that moves sinusoidally around a center point.""" + """A joint that moves sinusoidally around a center point.""" - __slots__ = ("anchor", "amplitude", "period", "_time") + __slots__ = ("anchor", "amplitude", "period", "_time") def __init__(self, anchor, amplitude=1.0, period=60, name=None): - """Create an oscillating joint. + """Create an oscillating joint. :param anchor: Center point of oscillation. :param amplitude: Maximum displacement from center. :param period: Steps per oscillation. :param name: Joint name. - """ + """ super().__init__(None, None, name) self.anchor = anchor self.amplitude = amplitude @@ -378,12 +378,12 @@

    Example: Oscillating Jointself._time += dt -centre = Ground(0.0, 2.0, name="Centre") -oscillator = Oscillator(centre, amplitude=1.0, period=60, name="Oscillator") +centre = Ground(0.0, 2.0, name="Centre") +oscillator = Oscillator(centre, amplitude=1.0, period=60, name="Oscillator") linkage = Linkage([centre, oscillator]) xs = [step[-1][0] for step in linkage.step(iterations=60)] -print(f"x swings between {min(xs):.2f} and {max(xs):.2f}") +print(f"x swings between {min(xs):.2f} and {max(xs):.2f}")

    Expected output:

    diff --git a/docs/tutorials/getting_started.html b/docs/tutorials/getting_started.html index 7a65d53..0c48e52 100644 --- a/docs/tutorials/getting_started.html +++ b/docs/tutorials/getting_started.html @@ -6,14 +6,14 @@ - Getting Started — pylinkage 1.2.2 documentation + Getting Started — pylinkage 1.3.0 documentation - + @@ -180,15 +180,15 @@

    Step 2: Define the componentsfrom pylinkage.simulation import Linkage # Ground anchors — two fixed points on the frame. -A = Ground(0.0, 0.0, name="A") -D = Ground(3.0, 0.0, name="D") +A = Ground(0.0, 0.0, name="A") +D = Ground(3.0, 0.0, name="D") # Crank — rotates about A with radius 1, one step = 0.31 rad. crank = Crank( anchor=A, radius=1.0, angular_velocity=0.31, - name="Crank", + name="Crank", ) # Coupler-rocker pin joint — closes the loop between the crank tip @@ -198,7 +198,7 @@

    Step 2: Define the componentsanchor2=D, distance1=3.0, # coupler length (B → C) distance2=1.0, # rocker length (C → D) - name="Output", + name="Output", )

    @@ -208,7 +208,7 @@

    Step 3: Create the linkageLinkage:

    linkage = Linkage(
         [A, D, crank, pin],
    -    name="Four-bar linkage",
    +    name="Four-bar linkage",
     )
     
    @@ -220,9 +220,9 @@

    Step 4: Simulate the motionloci = tuple(linkage.step()) # loci[i] is a tuple of (x, y) coordinates in the component order. -print(f"Simulation steps: {len(loci)}") -print(f"Final crank tip: {loci[-1][2]}") -print(f"Final output point: {loci[-1][3]}") +print(f"Simulation steps: {len(loci)}") +print(f"Final crank tip: {loci[-1][2]}") +print(f"Final output point: {loci[-1][3]}")

    For a numba-accelerated simulation that returns a contiguous numpy array, @@ -269,19 +269,19 @@

    Complete Examplefrom pylinkage.simulation import Linkage # Components -A = Ground(0.0, 0.0, name="A") -D = Ground(3.0, 0.0, name="D") -crank = Crank(anchor=A, radius=1.0, angular_velocity=0.31, name="Crank") +A = Ground(0.0, 0.0, name="A") +D = Ground(3.0, 0.0, name="D") +crank = Crank(anchor=A, radius=1.0, angular_velocity=0.31, name="Crank") pin = RRRDyad( anchor1=crank.output, anchor2=D, distance1=3.0, distance2=1.0, - name="Output", + name="Output", ) # Linkage -linkage = Linkage([A, D, crank, pin], name="Four-bar linkage") +linkage = Linkage([A, D, crank, pin], name="Four-bar linkage") # Visualize pl.show_linkage(linkage) @@ -296,7 +296,7 @@

    Understanding the Constraint System

    @@ -317,7 +317,7 @@

    Handling Errors
    try:
         tuple(linkage.step())
     except pl.UnbuildableError:
    -    print("Linkage cannot be built with these constraints")
    +    print("Linkage cannot be built with these constraints")
     

    diff --git a/docs/tutorials/graph_representation.html b/docs/tutorials/graph_representation.html index ac503b8..38f1af7 100644 --- a/docs/tutorials/graph_representation.html +++ b/docs/tutorials/graph_representation.html @@ -6,14 +6,14 @@ - Graph-Based Linkage Representation — pylinkage 1.2.2 documentation + Graph-Based Linkage Representation — pylinkage 1.3.0 documentation - + @@ -159,29 +159,29 @@

    Creating a Hypergraph Linkage# A four-bar: two grounded joints, one motor-driven crank pin, one # passive coupler-rocker pin -hg = HypergraphLinkage(name="FourBar") -hg.add_node(Node("A", role=NodeRole.GROUND)) -hg.add_node(Node("B", role=NodeRole.DRIVER)) -hg.add_node(Node("C", role=NodeRole.DRIVEN)) -hg.add_node(Node("D", role=NodeRole.GROUND)) +hg = HypergraphLinkage(name="FourBar") +hg.add_node(Node("A", role=NodeRole.GROUND)) +hg.add_node(Node("B", role=NodeRole.DRIVER)) +hg.add_node(Node("C", role=NodeRole.DRIVEN)) +hg.add_node(Node("D", role=NodeRole.GROUND)) # Three binary links: crank A-B, coupler B-C, rocker C-D. The ground # link between A and D is implied by their role. -hg.add_edge(Edge("AB", "A", "B")) -hg.add_edge(Edge("BC", "B", "C")) -hg.add_edge(Edge("CD", "C", "D")) - -print(f"Nodes: {list(hg.nodes)}") -print(f"Edges: {[(e.id, e.source, e.target) for e in hg.edges.values()]}") -print(f"Grounds: {[n.id for n in hg.ground_nodes()]}") -print(f"Drivers: {[n.id for n in hg.driver_nodes()]}") +hg.add_edge(Edge("AB", "A", "B")) +hg.add_edge(Edge("BC", "B", "C")) +hg.add_edge(Edge("CD", "C", "D")) + +print(f"Nodes: {list(hg.nodes)}") +print(f"Edges: {[(e.id, e.source, e.target) for e in hg.edges.values()]}") +print(f"Grounds: {[n.id for n in hg.ground_nodes()]}") +print(f"Drivers: {[n.id for n in hg.driver_nodes()]}")

    Expected output:

    -
    Nodes: ['A', 'B', 'C', 'D']
    -Edges: [('AB', 'A', 'B'), ('BC', 'B', 'C'), ('CD', 'C', 'D')]
    -Grounds: ['A', 'D']
    -Drivers: ['B']
    +
    Nodes: ['A', 'B', 'C', 'D']
    +Edges: [('AB', 'A', 'B'), ('BC', 'B', 'C'), ('CD', 'C', 'D')]
    +Grounds: ['A', 'D']
    +Drivers: ['B']
     
    @@ -205,9 +205,9 @@

    Attaching Dimensionscx, cy = (bx + dx) / 2, math.sqrt(COUPLER**2 - half**2) dims = Dimensions( - node_positions={"A": (0, 0), "B": (bx, by), "C": (cx, cy), "D": (dx, dy)}, - driver_angles={"B": DriverAngle(angular_velocity=OMEGA)}, - edge_distances={"AB": CRANK, "BC": COUPLER, "CD": ROCKER}, + node_positions={"A": (0, 0), "B": (bx, by), "C": (cx, cy), "D": (dx, dy)}, + driver_angles={"B": DriverAngle(angular_velocity=OMEGA)}, + edge_distances={"AB": CRANK, "BC": COUPLER, "CD": ROCKER}, ) # Consistency check without raising: an empty list means valid @@ -222,8 +222,8 @@

    Converting to a Mechanismmechanism = to_mechanism(hg, dims) loci = list(mechanism.step()) -print(f"Mechanism joints: {[j.id for j in mechanism.joints]}") -print(f"Simulation steps: {len(loci)}") +print(f"Mechanism joints: {[j.id for j in mechanism.joints]}") +print(f"Simulation steps: {len(loci)}") # The Mechanism draws and animates like a Linkage import pylinkage as pl @@ -231,7 +231,7 @@

    Converting to a Mechanism
    Mechanism joints: ['A', 'D', 'B', 'C']
    +
    Mechanism joints: ['A', 'D', 'B', 'C']
     Simulation steps: 60
     
    @@ -246,39 +246,39 @@

    Ternary Links via HyperedgeDimensions fully describes the triangle.

    from pylinkage.hypergraph import Hyperedge
     
    -hg_coupler = HypergraphLinkage(name="CouplerFourBar")
    +hg_coupler = HypergraphLinkage(name="CouplerFourBar")
     for node_id, role in [
    -    ("A", NodeRole.GROUND), ("B", NodeRole.DRIVER), ("C", NodeRole.DRIVEN),
    -    ("P", NodeRole.DRIVEN), ("D", NodeRole.GROUND),
    +    ("A", NodeRole.GROUND), ("B", NodeRole.DRIVER), ("C", NodeRole.DRIVEN),
    +    ("P", NodeRole.DRIVEN), ("D", NodeRole.GROUND),
     ]:
         hg_coupler.add_node(Node(node_id, role=role))
     
    -hg_coupler.add_edge(Edge("AB", "A", "B"))
    -hg_coupler.add_edge(Edge("CD", "C", "D"))
    +hg_coupler.add_edge(Edge("AB", "A", "B"))
    +hg_coupler.add_edge(Edge("CD", "C", "D"))
     # All three sides of the coupler triangle: this is what makes it rigid
    -hg_coupler.add_edge(Edge("BC", "B", "C"))
    -hg_coupler.add_edge(Edge("BP", "B", "P"))
    -hg_coupler.add_edge(Edge("CP", "C", "P"))
    +hg_coupler.add_edge(Edge("BC", "B", "C"))
    +hg_coupler.add_edge(Edge("BP", "B", "P"))
    +hg_coupler.add_edge(Edge("CP", "C", "P"))
     # The hyperedge labels the triangle as one body for topology analysis
    -hg_coupler.add_hyperedge(Hyperedge("coupler", ("B", "C", "P"), name="coupler triangle"))
    +hg_coupler.add_hyperedge(Hyperedge("coupler", ("B", "C", "P"), name="coupler triangle"))
     
     # P sits one unit above the middle of B-C
     ux, uy = (cx - bx) / COUPLER, (cy - by) / COUPLER
     px, py = bx + 0.5 * (cx - bx) - uy, by + 0.5 * (cy - by) + ux
     
     dims_coupler = Dimensions(
    -    node_positions={"A": (0, 0), "B": (bx, by), "C": (cx, cy), "P": (px, py), "D": (dx, dy)},
    -    driver_angles={"B": DriverAngle(angular_velocity=OMEGA)},
    +    node_positions={"A": (0, 0), "B": (bx, by), "C": (cx, cy), "P": (px, py), "D": (dx, dy)},
    +    driver_angles={"B": DriverAngle(angular_velocity=OMEGA)},
         edge_distances={
    -        "AB": CRANK, "CD": ROCKER, "BC": COUPLER,
    -        "BP": math.hypot(px - bx, py - by),
    -        "CP": math.hypot(px - cx, py - cy),
    +        "AB": CRANK, "CD": ROCKER, "BC": COUPLER,
    +        "BP": math.hypot(px - bx, py - by),
    +        "CP": math.hypot(px - cx, py - cy),
         },
     )
     
     coupler_mechanism = to_mechanism(hg_coupler, dims_coupler)
     coupler_path = [step[-1] for step in coupler_mechanism.step()]
    -print(f"P traces {len(coupler_path)} points")
    +print(f"P traces {len(coupler_path)} points")
     
    @@ -291,29 +291,29 @@

    Building Hierarchical Linkages
    from pylinkage.hypergraph import ComponentInstance, Connection, HierarchicalLinkage
     
     # A reusable leg: motor M, knee K, foot F, hip H
    -leg = HypergraphLinkage(name="leg")
    -leg.add_node(Node("M", role=NodeRole.GROUND))
    -leg.add_node(Node("K", role=NodeRole.DRIVER))
    -leg.add_node(Node("F", role=NodeRole.DRIVEN))
    -leg.add_node(Node("H", role=NodeRole.GROUND))
    -leg.add_edge(Edge("MK", "M", "K"))
    -leg.add_edge(Edge("KF", "K", "F"))
    -leg.add_edge(Edge("FH", "F", "H"))
    +leg = HypergraphLinkage(name="leg")
    +leg.add_node(Node("M", role=NodeRole.GROUND))
    +leg.add_node(Node("K", role=NodeRole.DRIVER))
    +leg.add_node(Node("F", role=NodeRole.DRIVEN))
    +leg.add_node(Node("H", role=NodeRole.GROUND))
    +leg.add_edge(Edge("MK", "M", "K"))
    +leg.add_edge(Edge("KF", "K", "F"))
    +leg.add_edge(Edge("FH", "F", "H"))
     
     # Two legs sharing their hip pivot
    -left = ComponentInstance(id="left", topology=leg, ports={"hip": "H"})
    -right = ComponentInstance(id="right", topology=leg, ports={"hip": "H"})
    +left = ComponentInstance(id="left", topology=leg, ports={"hip": "H"})
    +right = ComponentInstance(id="right", topology=leg, ports={"hip": "H"})
     
     chassis = HierarchicalLinkage(
    -    instances={"left": left, "right": right},
    -    connections=[Connection("left", "hip", "right", "hip")],
    -    name="two-leg chassis",
    +    instances={"left": left, "right": right},
    +    connections=[Connection("left", "hip", "right", "hip")],
    +    name="two-leg chassis",
     )
     
     flat = chassis.flatten()
    -print(f"Flattened: {len(flat.nodes)} nodes, {len(flat.edges)} edges")
    +print(f"Flattened: {len(flat.nodes)} nodes, {len(flat.edges)} edges")
     for edge in flat.edges.values():
    -    print(f"  {edge.id}: {edge.source} -> {edge.target}")
    +    print(f"  {edge.id}: {edge.source} -> {edge.target}")
     

    Expected output:

    @@ -363,20 +363,20 @@

    Decomposing a Linkagegraph = from_hypergraph(hg) result = decompose_assur_groups(graph) -print(f"Ground joints: {result.ground}") -print(f"Drivers: {result.drivers}") -print(f"Assur groups: {len(result.groups)}") +print(f"Ground joints: {result.ground}") +print(f"Drivers: {result.drivers}") +print(f"Assur groups: {len(result.groups)}") for group in result.groups: - print(f" {type(group).__name__} {group.joint_signature}: " - f"solves {group.internal_nodes} from {group.anchor_nodes} " - f"through links {group.internal_edges}") + print(f" {type(group).__name__} {group.joint_signature}: " + f"solves {group.internal_nodes} from {group.anchor_nodes} " + f"through links {group.internal_edges}")

    Expected output:

    -

    Expected output:

    @@ -410,7 +410,7 @@

    Converting Graph to Mechanismedge_0 … and includes the ground @@ -424,17 +424,17 @@

    AssurMechanismassur = AssurMechanism.from_mechanism(fourbar(crank=1.0, coupler=3.0, rocker=3.0, ground=4.0)) -print(f"DOF: {assur.degree_of_freedom}") -print(f"Assur groups: {assur.num_assur_groups}") -print(f"Valid: {assur.is_valid()}") -print(f"Group signatures: {[g.joint_signature for g in assur.assur_groups]}") +print(f"DOF: {assur.degree_of_freedom}") +print(f"Assur groups: {assur.num_assur_groups}") +print(f"Valid: {assur.is_valid()}") +print(f"Group signatures: {[g.joint_signature for g in assur.assur_groups]}")

    Expected output:

    DOF: 1
     Assur groups: 1
     Valid: True
    -Group signatures: ['RRR']
    +Group signatures: ['RRR']
     
    @@ -446,18 +446,18 @@

    Assur Signatures
    from pylinkage.assur import parse_signature, signature_to_hypergraph
     
    -signature = parse_signature("RRP")
    -print(f"{signature.raw_string}: {signature.group_class.name}, joints {[j.name for j in signature.joints]}")
    +signature = parse_signature("RRP")
    +print(f"{signature.raw_string}: {signature.group_class.name}, joints {[j.name for j in signature.joints]}")
     
    -dyad = signature_to_hypergraph("RRR", prefix="d1_")
    -print(f"Nodes: {list(dyad.nodes)}")
    -print(f"Edges: {list(dyad.edges)}")
    +dyad = signature_to_hypergraph("RRR", prefix="d1_")
    +print(f"Nodes: {list(dyad.nodes)}")
    +print(f"Edges: {list(dyad.edges)}")
     

    Expected output:

    -

    The hypergraph module has the same four functions for HypergraphLinkage @@ -499,15 +499,15 @@

    Mobility Analysis
    from pylinkage.topology import compute_dof, compute_mobility
     
     info = compute_mobility(hg)
    -print(f"Links: {info.num_links}, full joints: {info.num_full_joints}, DOF: {info.dof}")
    +print(f"Links: {info.num_links}, full joints: {info.num_full_joints}, DOF: {info.dof}")
     
     mobility = compute_dof(hg)
     if mobility == 1:
    -    print("Single-DOF mechanism (typical linkage)")
    +    print("Single-DOF mechanism (typical linkage)")
     elif mobility == 0:
    -    print("Structure (no motion)")
    +    print("Structure (no motion)")
     else:
    -    print(f"Under-constrained ({mobility} DOF)")
    +    print(f"Under-constrained ({mobility} DOF)")
     

    Expected output:

    @@ -518,7 +518,7 @@

    Mobility Analysis
    info = compute_mobility(hg_coupler)
    -print(f"Coupler four-bar: {info.num_links} links, DOF {info.dof}")
    +print(f"Coupler four-bar: {info.num_links} links, DOF {info.dof}")
     

    Expected output:

    @@ -536,18 +536,18 @@

    Isomorphism Detection
    from pylinkage.topology import are_isomorphic, canonical_hash
     
    -other = HypergraphLinkage(name="renamed")
    +other = HypergraphLinkage(name="renamed")
     for node_id, role in [
    -    ("p", NodeRole.GROUND), ("q", NodeRole.DRIVER), ("r", NodeRole.DRIVEN), ("s", NodeRole.GROUND),
    +    ("p", NodeRole.GROUND), ("q", NodeRole.DRIVER), ("r", NodeRole.DRIVEN), ("s", NodeRole.GROUND),
     ]:
         other.add_node(Node(node_id, role=role))
    -other.add_edge(Edge("e1", "p", "q"))
    -other.add_edge(Edge("e2", "q", "r"))
    -other.add_edge(Edge("e3", "r", "s"))
    +other.add_edge(Edge("e1", "p", "q"))
    +other.add_edge(Edge("e2", "q", "r"))
    +other.add_edge(Edge("e3", "r", "s"))
     
    -print(f"Same topology: {are_isomorphic(hg, other)}")
    -print(f"Same hash: {canonical_hash(hg) == canonical_hash(other)}")
    -print(f"Coupler four-bar is a four-bar: {are_isomorphic(hg, hg_coupler)}")
    +print(f"Same topology: {are_isomorphic(hg, other)}")
    +print(f"Same hash: {canonical_hash(hg) == canonical_hash(other)}")
    +print(f"Coupler four-bar is a four-bar: {are_isomorphic(hg, hg_coupler)}")
     

    Expected output:

    @@ -565,15 +565,15 @@

    The Topology Catalogcatalog = load_catalog() for entry in catalog.by_num_links(6): - print(f"{entry.id}: {entry.name}, {entry.num_joints} joints, groups {entry.assur_groups}") + print(f"{entry.id}: {entry.name}, {entry.num_joints} joints, groups {entry.assur_groups}") -stephenson = catalog.get("stephenson").to_graph() -print(f"Stephenson: {len(stephenson.nodes)} nodes, {len(stephenson.hyperedges)} ternary links") +stephenson = catalog.get("stephenson").to_graph() +print(f"Stephenson: {len(stephenson.nodes)} nodes, {len(stephenson.hyperedges)} ternary links")

    Expected output:

    -
    watt: Watt six-bar, 7 joints, groups ('RRR', 'RRR')
    -stephenson: Stephenson six-bar, 7 joints, groups ('RRRRRR',)
    +
    watt: Watt six-bar, 7 joints, groups ('RRR', 'RRR')
    +stephenson: Stephenson six-bar, 7 joints, groups ('RRRRRR',)
     Stephenson: 7 nodes, 2 ternary links
     
    diff --git a/docs/tutorials/index.html b/docs/tutorials/index.html index edecc0d..cad12cf 100644 --- a/docs/tutorials/index.html +++ b/docs/tutorials/index.html @@ -6,14 +6,14 @@ - Tutorials — pylinkage 1.2.2 documentation + Tutorials — pylinkage 1.3.0 documentation - + diff --git a/docs/tutorials/kinematics_optimization.html b/docs/tutorials/kinematics_optimization.html index 5cc8133..366a3d6 100644 --- a/docs/tutorials/kinematics_optimization.html +++ b/docs/tutorials/kinematics_optimization.html @@ -6,14 +6,14 @@ - Kinematics-Based Optimization — pylinkage 1.2.2 documentation + Kinematics-Based Optimization — pylinkage 1.3.0 documentation - + @@ -147,12 +147,12 @@

    Setting Up Angular Velocityfrom pylinkage.simulation import Linkage # Create a four-bar linkage -A = Ground(0.0, 0.0, name="A") -D = Ground(3.0, 0.0, name="D") -crank = Crank(anchor=A, radius=1.0, angular_velocity=0.1, name="Crank") +A = Ground(0.0, 0.0, name="A") +D = Ground(3.0, 0.0, name="D") +crank = Crank(anchor=A, radius=1.0, angular_velocity=0.1, name="Crank") output = RRRDyad( anchor1=crank.output, anchor2=D, - distance1=3.0, distance2=2.0, name="Output", + distance1=3.0, distance2=2.0, name="Output", ) linkage = Linkage([A, D, crank, output]) @@ -181,7 +181,7 @@

    Running Kinematics Simulationframe = 25 for i, component in enumerate(linkage.components): vx, vy = velocities[frame, i] - print(f"{component.name}: velocity = ({vx:.2f}, {vy:.2f})") + print(f"{component.name}: velocity = ({vx:.2f}, {vy:.2f})")

    Positions the solver could not assemble come out as NaN rather than an @@ -194,12 +194,12 @@

    Querying Joint Velocitiesall_velocities = linkage.get_velocities() # Returns: [(vx0, vy0), (vx1, vy1), ...] -# Access an individual component's velocity +# Access an individual component's velocity output_velocity = linkage.components[-1].velocity if output_velocity is not None: vx, vy = output_velocity speed = (vx**2 + vy**2) ** 0.5 - print(f"Output speed: {speed:.2f} units/s") + print(f"Output speed: {speed:.2f} units/s")

    @@ -217,19 +217,19 @@

    Example: Minimize Peak Velocitydef create_linkage(): - A = Ground(0.0, 0.0, name="A") - D = Ground(3.0, 0.0, name="D") - crank = _Crank(anchor=A, radius=1.0, angular_velocity=0.1, name="Crank") + A = Ground(0.0, 0.0, name="A") + D = Ground(3.0, 0.0, name="D") + crank = _Crank(anchor=A, radius=1.0, angular_velocity=0.1, name="Crank") output = RRRDyad( anchor1=crank.output, anchor2=D, - distance1=3.0, distance2=2.0, name="Output", + distance1=3.0, distance2=2.0, name="Output", ) return Linkage([A, D, crank, output]) @pl.kinematic_minimization def minimize_peak_velocity(loci, linkage=None, **kwargs): - """Minimize the peak velocity at the output joint.""" + """Minimize the peak velocity at the output joint.""" crank = next(c for c in linkage.components if isinstance(c, _Crank)) linkage.set_input_velocity(crank, omega=10.0) @@ -242,7 +242,7 @@

    Example: Minimize Peak Velocity# Return peak velocity (we want to minimize this) peak_velocity = np.nanmax(speeds) - return peak_velocity if not np.isnan(peak_velocity) else float('inf') + return peak_velocity if not np.isnan(peak_velocity) else float('inf') # Run optimization @@ -260,8 +260,8 @@

    Example: Minimize Peak Velocity) best = results[0] -print(f"Minimum peak velocity: {best.score:.2f} units/s") -print(f"Dimensions: {best.dimensions}") +print(f"Minimum peak velocity: {best.score:.2f} units/s") +print(f"Dimensions: {best.dimensions}")

    The trivial answer to “lowest peak velocity” is a tiny crank, and that is @@ -273,7 +273,7 @@

    Example: Uniform Velocity Profile

    @@ -317,7 +317,7 @@

    Example: Velocity Direction Constraint

    @@ -359,7 +359,7 @@

    Combined Path and Velocity Optimization

    @@ -408,7 +408,7 @@

    Matplotlib Visualization# Show single frame with velocity vectors fig = show_kinematics(linkage, frame_index=25, show_velocity=True) -fig.savefig("velocity_frame.png") +fig.savefig("velocity_frame.png") # Create animation with velocity vectors (saved as GIF via Pillow) fig = animate_kinematics( @@ -416,7 +416,7 @@

    Matplotlib Visualizationshow_velocity=True, fps=24, duration=2.0, - save_path="velocity_animation.gif", + save_path="velocity_animation.gif", )

    @@ -430,9 +430,9 @@

    Plotly Interactive Visualizationlinkage, frame_index=25, velocity_scale=0.1, - title="Four-bar with Velocity Vectors", + title="Four-bar with Velocity Vectors", ) -fig.write_html("velocity_plot.html") +fig.write_html("velocity_plot.html")

    @@ -445,10 +445,10 @@

    SVG Publication-Quality Output# Save SVG with velocity vectors save_linkage_svg_with_velocity( linkage, - "linkage_velocity.svg", + "linkage_velocity.svg", positions[25], velocities[25], - velocity_color="#0066CC" + velocity_color="#0066CC" )

    @@ -470,7 +470,7 @@

    Performance Considerationslinkage.set_input_velocity(crank, omega=10.0) positions, velocities, accelerations = linkage.step_fast_with_kinematics() if np.isnan(positions).any(): - return float("inf") + return float("inf") # Compute all metrics from the same arrays speeds = np.linalg.norm(velocities[:, -1, :], axis=1) diff --git a/docs/tutorials/multi_objective.html b/docs/tutorials/multi_objective.html index 08604b9..990cc2f 100644 --- a/docs/tutorials/multi_objective.html +++ b/docs/tutorials/multi_objective.html @@ -6,14 +6,14 @@ - Multi-Objective Optimization — pylinkage 1.2.2 documentation + Multi-Objective Optimization — pylinkage 1.3.0 documentation - + @@ -161,12 +161,12 @@

    Basic Example# Create the linkage def create_fourbar(): - A = Ground(0.0, 0.0, name="A") - D = Ground(3.0, 0.0, name="D") - crank = Crank(anchor=A, radius=1.0, angular_velocity=0.31, name="Crank") + A = Ground(0.0, 0.0, name="A") + D = Ground(3.0, 0.0, name="D") + crank = Crank(anchor=A, radius=1.0, angular_velocity=0.31, name="Crank") output = RRRDyad( anchor1=crank.output, anchor2=D, - distance1=3.0, distance2=2.0, name="Output", + distance1=3.0, distance2=2.0, name="Output", ) return Linkage([A, D, crank, output]) @@ -174,7 +174,7 @@

    Basic Example# Objective 1: Minimize path error @kinematic_minimization def path_error(loci, **kwargs): - """Distance from output path to target circle.""" + """Distance from output path to target circle.""" output_path = [step[-1] for step in loci] target_center = (4, 1) target_radius = 1.5 @@ -189,7 +189,7 @@

    Basic Example# Objective 2: Minimize transmission angle deviation from 90 degrees @kinematic_minimization def transmission_penalty(loci, linkage=None, **kwargs): - """Penalize poor transmission angles (coupler-rocker angle far from 90°).""" + """Penalize poor transmission angles (coupler-rocker angle far from 90°).""" analysis = linkage.analyze_transmission() return analysis.max_deviation @@ -202,14 +202,14 @@

    Basic Exampleobjectives=[path_error, transmission_penalty], linkage=linkage, bounds=bounds, - objective_names=["Path Error", "Transmission Penalty"], + objective_names=["Path Error", "Transmission Penalty"], n_generations=30, pop_size=40, seed=42, verbose=False, ) -print(f"Found {len(results)} Pareto-optimal solutions") +print(f"Found {len(results)} Pareto-optimal solutions")

    @@ -220,16 +220,16 @@

    Understanding the Pareto Front
    # Iterate over solutions
     for member in results:
    -    print(f"Scores: {member.scores}")
    -    print(f"Constraints: {member.dimensions}")
    +    print(f"Scores: {member.scores}")
    +    print(f"Constraints: {member.dimensions}")
     
     # Scores as numpy arrays, one per objective
    -print(f"Objectives: {list(results.scores)}")
    -path_errors = results.scores["Path Error"]  # shape (n_solutions,)
    +print(f"Objectives: {list(results.scores)}")
    +path_errors = results.scores["Path Error"]  # shape (n_solutions,)
     
     # Rank along one objective
    -most_accurate = results.rank("Path Error")[0]
    -print(f"Most accurate path: {most_accurate.scores}")
    +most_accurate = results.rank("Path Error")[0]
    +print(f"Most accurate path: {most_accurate.scores}")
     

    The front’s own tools live on ParetoFront; to_pareto_front() @@ -240,7 +240,7 @@

    Understanding the Pareto Frontscores = pareto.scores_array() # Number of objectives -print(f"Objectives: {pareto.n_objectives}") +print(f"Objectives: {pareto.n_objectives}")

    @@ -251,9 +251,9 @@

    Pareto Dominancesol_b = pareto[1] if sol_a.dominates(sol_b): - print("Solution A is strictly better than B") + print("Solution A is strictly better than B") else: - print("Solutions are non-dominated (trade-offs)") + print("Solutions are non-dominated (trade-offs)")

    @@ -267,11 +267,11 @@

    2D Pareto Front# Default 2D plot fig = pareto.plot() -plt.savefig("pareto_front.png") +plt.savefig("pareto_front.png") plt.show() # Custom styling -fig = pareto.plot(s=100, alpha=0.8, c='blue') +fig = pareto.plot(s=100, alpha=0.8, c='blue') plt.show()

    @@ -303,7 +303,7 @@

    Filtering Solutions
    # Keep 10 well-distributed solutions
     filtered = pareto.filter(max_solutions=10)
     
    -print(f"Reduced from {len(pareto)} to {len(filtered)} solutions")
    +print(f"Reduced from {len(pareto)} to {len(filtered)} solutions")
     

    @@ -314,7 +314,7 @@

    Hypervolume Indicatorreference = scores.max(axis=0) * 1.1 hv = pareto.hypervolume(reference_point=reference) -print(f"Hypervolume: {hv}") +print(f"Hypervolume: {hv}")

    @@ -326,7 +326,7 @@

    Combining with Transmission Analysis
    @kinematic_minimization
     def transmission_objective(loci, linkage=None, **kwargs):
    -    """Use built-in transmission analysis."""
    +    """Use built-in transmission analysis."""
         analysis = linkage.analyze_transmission()
         # Minimize deviation of the mean from the ideal 90 degrees
         return abs(90 - analysis.mean_angle)
    @@ -334,7 +334,7 @@ 

    Combining with Transmission Analysis@kinematic_minimization def worst_transmission(loci, linkage=None, **kwargs): - """Minimize the worst transmission angle.""" + """Minimize the worst transmission angle.""" analysis = linkage.analyze_transmission() # Return how far the worst angle is from acceptable range if analysis.min_angle < 40: @@ -349,7 +349,7 @@

    Combining with Transmission Analysis

    diff --git a/docs/tutorials/sensitivity_analysis.html b/docs/tutorials/sensitivity_analysis.html index 6046457..6dfeb5a 100644 --- a/docs/tutorials/sensitivity_analysis.html +++ b/docs/tutorials/sensitivity_analysis.html @@ -6,14 +6,14 @@ - Sensitivity & Tolerance Analysis — pylinkage 1.2.2 documentation + Sensitivity & Tolerance Analysis — pylinkage 1.3.0 documentation - + @@ -146,12 +146,12 @@

    Basic Setupfrom pylinkage.simulation import Linkage # Create a four-bar linkage (a crank-rocker: 1 + 3.5 < 3 + 2) -A = Ground(0.0, 0.0, name="A") -D = Ground(3.5, 0.0, name="D") -crank = Crank(anchor=A, radius=1.0, angular_velocity=0.1, name="crank") +A = Ground(0.0, 0.0, name="A") +D = Ground(3.5, 0.0, name="D") +crank = Crank(anchor=A, radius=1.0, angular_velocity=0.1, name="crank") coupler = RRRDyad( anchor1=crank.output, anchor2=D, - distance1=3.0, distance2=2.0, name="coupler", + distance1=3.0, distance2=2.0, name="coupler", ) linkage = Linkage([A, D, crank, coupler])

    @@ -169,11 +169,11 @@

    Basic Usageanalysis = linkage.analyze_sensitivity(delta=0.01) # View the most sensitive constraint -print(f"Most sensitive: {analysis.most_sensitive}") +print(f"Most sensitive: {analysis.most_sensitive}") # View all constraints ranked by sensitivity for name, sensitivity in analysis.sensitivity_ranking: - print(f" {name}: {sensitivity:.4f}") + print(f" {name}: {sensitivity:.4f}")

    Output:

    @@ -205,7 +205,7 @@

    Analyzing Specific Output Joints# ...or by component object analysis = linkage.analyze_sensitivity(output_joint=crank) -print(f"Crank path: {analysis.sensitivity_ranking}") +print(f"Crank path: {analysis.sensitivity_ranking}")

    @@ -217,12 +217,12 @@

    Including Transmission Angleinclude_transmission=True, # the default ) -print(f"Baseline transmission: {analysis.baseline_transmission:.1f}°") +print(f"Baseline transmission: {analysis.baseline_transmission:.1f}°") # Transmission angles for each perturbation if analysis.perturbed_transmission is not None: for name, trans in zip(analysis.constraint_names, analysis.perturbed_transmission): - print(f" {name}: {trans:.1f}°") + print(f" {name}: {trans:.1f}°")

    @@ -250,9 +250,9 @@

    Basic Usage

    Tolerance analysis uses Monte Carlo simulation to assess manufacturing variability:

    Output:

    @@ -297,8 +297,8 @@

    Visualizing the Tolerance Cloudshow_nominal=True, # Show nominal path as red line alpha=0.1 # Transparency for sample points ) -plt.title("Output Path Tolerance Cloud") -plt.savefig("tolerance_cloud.png", dpi=150) +plt.title("Output Path Tolerance Cloud") +plt.savefig("tolerance_cloud.png", dpi=150) plt.show() @@ -314,11 +314,11 @@

    Selective Tolerance Analysis
    # Only analyze crank radius tolerance
     result = linkage.analyze_tolerance(
    -    tolerances={"crank_radius": 0.1},
    +    tolerances={"crank_radius": 0.1},
         n_samples=500
     )
     
    -print(f"Crank-only max deviation: {result.max_deviation:.4f}")
    +print(f"Crank-only max deviation: {result.max_deviation:.4f}")
     
    @@ -333,7 +333,7 @@

    Sensitivity as Fitness Penalty@pl.kinematic_minimization def robust_linkage(loci, linkage=None, **kwargs): - """Optimize for path shape while minimizing sensitivity.""" + """Optimize for path shape while minimizing sensitivity.""" # Path shape objective: a wide, flat output path output_path = [step[-1] for step in loci] @@ -353,7 +353,7 @@

    Sensitivity as Fitness Penaltyrobust_linkage, linkage, bounds=bounds, order_relation=min, n_particles=10, iterations=10, verbose=False, ) -print(f"Best robust score: {results[0].score:.3f}") +print(f"Best robust score: {results[0].score:.3f}")

    Sensitivity analysis simulates the linkage once per constraint, so this @@ -365,14 +365,14 @@

    Tolerance-Based Constraints

    Returning inf (or -inf under @kinematic_maximization) is how a @@ -434,51 +434,51 @@

    Example Complete Workflowfrom pylinkage.simulation import Linkage # Create linkage -A = Ground(0.0, 0.0, name="A") -D = Ground(3.5, 0.0, name="D") -crank = Crank(anchor=A, radius=1.0, angular_velocity=0.1, name="crank") +A = Ground(0.0, 0.0, name="A") +D = Ground(3.5, 0.0, name="D") +crank = Crank(anchor=A, radius=1.0, angular_velocity=0.1, name="crank") coupler = RRRDyad( anchor1=crank.output, anchor2=D, - distance1=3.0, distance2=2.0, name="coupler", + distance1=3.0, distance2=2.0, name="coupler", ) linkage = Linkage([A, D, crank, coupler]) # Step 1: Sensitivity analysis -print("=== Sensitivity Analysis ===") +print("=== Sensitivity Analysis ===") sens = linkage.analyze_sensitivity(delta=0.01) -print(f"Most sensitive: {sens.most_sensitive}") +print(f"Most sensitive: {sens.most_sensitive}") for name, val in sens.sensitivity_ranking: - print(f" {name}: {val:.4f}") + print(f" {name}: {val:.4f}") # Step 2: Tolerance analysis with realistic tolerances -print("\n=== Tolerance Analysis ===") +print("\n=== Tolerance Analysis ===") tolerances = { - "crank_radius": 0.05, # Tight tolerance (sensitive) - "coupler_dist1": 0.1, # Normal tolerance - "coupler_dist2": 0.1, # Normal tolerance + "crank_radius": 0.05, # Tight tolerance (sensitive) + "coupler_dist1": 0.1, # Normal tolerance + "coupler_dist2": 0.1, # Normal tolerance } tol = linkage.analyze_tolerance(tolerances, n_samples=500, seed=42) -print(f"Mean deviation: {tol.mean_deviation:.4f}") -print(f"Max deviation: {tol.max_deviation:.4f}") -print(f"Std deviation: {tol.std_deviation:.4f}") +print(f"Mean deviation: {tol.mean_deviation:.4f}") +print(f"Max deviation: {tol.max_deviation:.4f}") +print(f"Std deviation: {tol.std_deviation:.4f}") # Step 3: Visualize fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6)) # Plot tolerance cloud tol.plot_cloud(ax=ax1) -ax1.set_title("Tolerance Cloud") +ax1.set_title("Tolerance Cloud") # Plot per-position std ax2.plot(tol.position_std) -ax2.set_xlabel("Simulation Step") -ax2.set_ylabel("Position Std Dev") -ax2.set_title("Per-Position Variation") +ax2.set_xlabel("Simulation Step") +ax2.set_ylabel("Position Std Dev") +ax2.set_title("Per-Position Variation") ax2.grid(True) plt.tight_layout() -plt.savefig("tolerance_analysis.png", dpi=150) +plt.savefig("tolerance_analysis.png", dpi=150) plt.show() diff --git a/docs/tutorials/symbolic.html b/docs/tutorials/symbolic.html index 97cb2bd..5cae355 100644 --- a/docs/tutorials/symbolic.html +++ b/docs/tutorials/symbolic.html @@ -6,14 +6,14 @@ - Symbolic Computation — pylinkage 1.2.2 documentation + Symbolic Computation — pylinkage 1.3.0 documentation - + @@ -183,18 +183,18 @@

    Quick Start# Create a four-bar with symbolic parameters linkage = fourbar_symbolic( ground_length=4, # Fixed: distance between ground pivots - crank_length="L1", # Symbolic: input crank length - coupler_length="L2", # Symbolic: coupler bar length - rocker_length="L3", # Symbolic: output rocker length + crank_length="L1", # Symbolic: input crank length + coupler_length="L2", # Symbolic: coupler bar length + rocker_length="L3", # Symbolic: output rocker length ) # Get closed-form trajectory expressions solutions = solve_linkage_symbolically(linkage) # Print the crank position (simple expression) -x_crank, y_crank = solutions["B"] -print(f"Crank x: {x_crank}") -print(f"Crank y: {y_crank}") +x_crank, y_crank = solutions["B"] +print(f"Crank x: {x_crank}") +print(f"Crank y: {y_crank}")

    Output:

    @@ -233,22 +233,22 @@

    Illustrated Example: Effect of Link Lengthslinkage = fourbar_symbolic( ground_length=4, - crank_length="L1", - coupler_length="L2", - rocker_length="L3", + crank_length="L1", + coupler_length="L2", + rocker_length="L3", ) theta_vals = np.linspace(0, 2*np.pi, 360) # Compare different crank lengths for L1 in [0.5, 1.0, 1.5]: - params = {"L1": L1, "L2": 3.0, "L3": 3.0} + params = {"L1": L1, "L2": 3.0, "L3": 3.0} traj = compute_trajectory_numeric(linkage, params, theta_vals) - output = traj["C"] + output = traj["C"] x_range = np.ptp(output[:, 0]) # peak-to-peak y_range = np.ptp(output[:, 1]) - print(f"L1={L1}: X range={x_range:.3f}, Y range={y_range:.3f}") + print(f"L1={L1}: X range={x_range:.3f}, Y range={y_range:.3f}")

    Output:

    @@ -273,28 +273,28 @@

    Method 1: fourbar_symbolic (Recommended)coupler_length=3, rocker_length=3, ) -print(f"Parameters: {list(linkage1.parameters.keys())}") +print(f"Parameters: {list(linkage1.parameters.keys())}") # Output: Parameters: [] (no symbolic parameters) # Mixed symbolic/numeric - for optimization linkage2 = fourbar_symbolic( ground_length=4, # Fixed - crank_length="L1", # Optimize this - coupler_length="L2", # Optimize this + crank_length="L1", # Optimize this + coupler_length="L2", # Optimize this rocker_length=3, # Fixed ) -print(f"Parameters: {list(linkage2.parameters.keys())}") -# Output: Parameters: ['L1', 'L2'] +print(f"Parameters: {list(linkage2.parameters.keys())}") +# Output: Parameters: ['L1', 'L2'] # All symbolic - for general analysis linkage3 = fourbar_symbolic( - ground_length="L0", - crank_length="L1", - coupler_length="L2", - rocker_length="L3", + ground_length="L0", + crank_length="L1", + coupler_length="L2", + rocker_length="L3", ) -print(f"Parameters: {list(linkage3.parameters.keys())}") -# Output: Parameters: ['L0', 'L1', 'L2', 'L3'] +print(f"Parameters: {list(linkage3.parameters.keys())}") +# Output: Parameters: ['L0', 'L1', 'L2', 'L3'] @@ -307,18 +307,18 @@

    Method 2: Building from SymJoint Classesimport sympy as sp # Define symbolic parameters -L1, L2, L3 = sp.symbols('L1 L2 L3', positive=True, real=True) +L1, L2, L3 = sp.symbols('L1 L2 L3', positive=True, real=True) # Create joints in order -ground_A = SymStatic(x=0, y=0, name="A") -ground_D = SymStatic(x=4, y=0, name="D") -crank_B = SymCrank(parent=ground_A, radius=L1, name="B") +ground_A = SymStatic(x=0, y=0, name="A") +ground_D = SymStatic(x=4, y=0, name="D") +crank_B = SymCrank(parent=ground_A, radius=L1, name="B") coupler_C = SymRevolute( parent0=crank_B, parent1=ground_D, distance0=L2, distance1=L3, - name="C" + name="C" ) # Assemble linkage @@ -326,8 +326,8 @@

    Method 2: Building from SymJoint Classesjoints=[ground_A, ground_D, crank_B, coupler_C] ) -print(f"Joints: {[j.name for j in linkage.joints]}") -# Output: Joints: ['A', 'D', 'B', 'C'] +print(f"Joints: {[j.name for j in linkage.joints]}") +# Output: Joints: ['A', 'D', 'B', 'C'] @@ -346,12 +346,12 @@

    Reading Back Numeric Valuesrocker_length=3.0, ) -print(f"Parameters: {list(linkage.parameters.keys())}") +print(f"Parameters: {list(linkage.parameters.keys())}") # If you populated ``_numeric_*`` attributes on each SymJoint, they # are surfaced back out here. values = get_numeric_parameters(linkage) -print(f"Current numeric values: {values}") +print(f"Current numeric values: {values}") @@ -366,13 +366,13 @@

    Numeric Evaluationlinkage = fourbar_symbolic( ground_length=4, - crank_length="L1", - coupler_length="L2", - rocker_length="L3", + crank_length="L1", + coupler_length="L2", + rocker_length="L3", ) # Define parameter values -params = {"L1": 1.0, "L2": 3.0, "L3": 3.0} +params = {"L1": 1.0, "L2": 3.0, "L3": 3.0} # Compute trajectory over full rotation theta_values = np.linspace(0, 2 * np.pi, 100) @@ -380,12 +380,12 @@

    Numeric Evaluation# Results are returned as a dictionary # Each joint maps to an (N, 2) array of [x, y] positions -coupler = trajectories["C"] +coupler = trajectories["C"] -print(f"Shape: {coupler.shape}") -print(f"Start: ({coupler[0, 0]:.3f}, {coupler[0, 1]:.3f})") -print(f"At 90 deg: ({coupler[25, 0]:.3f}, {coupler[25, 1]:.3f})") -print(f"At 180 deg: ({coupler[50, 0]:.3f}, {coupler[50, 1]:.3f})") +print(f"Shape: {coupler.shape}") +print(f"Start: ({coupler[0, 0]:.3f}, {coupler[0, 1]:.3f})") +print(f"At 90 deg: ({coupler[25, 0]:.3f}, {coupler[25, 1]:.3f})") +print(f"At 180 deg: ({coupler[50, 0]:.3f}, {coupler[50, 1]:.3f})")

    Output:

    @@ -412,7 +412,7 @@

    Fast Pre-Compiled Functionsfuncs = create_trajectory_functions(linkage) # Each joint has (x_func, y_func, param_symbols) -x_func, y_func, params = funcs["C"] +x_func, y_func, params = funcs["C"] # Time comparison from pylinkage.symbolic import compute_trajectory_numeric @@ -430,9 +430,9 @@

    Fast Pre-Compiled Functionsy_func(theta_vals) compiled_time = time.perf_counter() - start -print(f"Direct: {direct_time:.3f}s") -print(f"Compiled: {compiled_time:.3f}s") -print(f"Speedup: {direct_time/compiled_time:.1f}x") +print(f"Direct: {direct_time:.3f}s") +print(f"Compiled: {compiled_time:.3f}s") +print(f"Speedup: {direct_time/compiled_time:.1f}x")

    Output:

    @@ -465,19 +465,19 @@

    Understanding SymbolicOptimizerlinkage = fourbar_symbolic( ground_length=4, - crank_length="L1", - coupler_length="L2", - rocker_length="L3", + crank_length="L1", + coupler_length="L2", + rocker_length="L3", ) # Symbolic objective: minimize squared distance to point (3, 1.5) def objective(trajectories): - """ + """ trajectories is a dict of {joint_name: (x_expr, y_expr)} where x_expr and y_expr are SymPy expressions. Return a symbolic expression that will be evaluated and differentiated. - """ - x, y = trajectories["C"] # SymPy expressions + """ + x, y = trajectories["C"] # SymPy expressions target_x, target_y = 3.0, 1.5 return (x - target_x)**2 + (y - target_y)**2 @@ -486,16 +486,16 @@

    Understanding SymbolicOptimizer# Run optimization result = optimizer.optimize( - initial_params={"L1": 1.0, "L2": 3.0, "L3": 3.0}, - bounds={"L1": (0.3, 2.0), "L2": (1.5, 5.0), "L3": (1.5, 5.0)}, + initial_params={"L1": 1.0, "L2": 3.0, "L3": 3.0}, + bounds={"L1": (0.3, 2.0), "L2": (1.5, 5.0), "L3": (1.5, 5.0)}, ) -print(f"Success: {result.success}") -print(f"Iterations: {result.iterations}") -print(f"Optimal L1: {result.params['L1']:.4f}") -print(f"Optimal L2: {result.params['L2']:.4f}") -print(f"Optimal L3: {result.params['L3']:.4f}") -print(f"Final objective: {result.objective_value:.6f}") +print(f"Success: {result.success}") +print(f"Iterations: {result.iterations}") +print(f"Optimal L1: {result.params['L1']:.4f}") +print(f"Optimal L2: {result.params['L2']:.4f}") +print(f"Optimal L3: {result.params['L3']:.4f}") +print(f"Final objective: {result.objective_value:.6f}")

    Output:

    @@ -519,17 +519,17 @@

    Verifying Results# Initial trajectory initial_traj = compute_trajectory_numeric( - linkage, {"L1": 1.0, "L2": 3.0, "L3": 3.0}, theta_vals + linkage, {"L1": 1.0, "L2": 3.0, "L3": 3.0}, theta_vals ) -initial_dist = np.mean(np.sqrt(np.sum((initial_traj["C"] - target)**2, axis=1))) +initial_dist = np.mean(np.sqrt(np.sum((initial_traj["C"] - target)**2, axis=1))) # Optimized trajectory optimal_traj = compute_trajectory_numeric(linkage, result.params, theta_vals) -optimal_dist = np.mean(np.sqrt(np.sum((optimal_traj["C"] - target)**2, axis=1))) +optimal_dist = np.mean(np.sqrt(np.sum((optimal_traj["C"] - target)**2, axis=1))) -print(f"Initial mean distance: {initial_dist:.4f}") -print(f"Optimal mean distance: {optimal_dist:.4f}") -print(f"Improvement: {(1 - optimal_dist/initial_dist)*100:.1f}%") +print(f"Initial mean distance: {initial_dist:.4f}") +print(f"Optimal mean distance: {optimal_dist:.4f}") +print(f"Improvement: {(1 - optimal_dist/initial_dist)*100:.1f}%")

    Output:

    @@ -544,13 +544,13 @@

    Example Objective Functions
    def point_distance_objective(trajectories):
    -    x, y = trajectories["C"]
    +    x, y = trajectories["C"]
         return (x - 3.0)**2 + (y - 1.5)**2
     

    Maximize y-coordinate:

    def maximize_height(trajectories):
    -    x, y = trajectories["C"]
    +    x, y = trajectories["C"]
         return -y  # Negative because optimizer minimizes
     
    @@ -559,7 +559,7 @@

    Example Objective Functionsimport sympy as sp def minimize_curvature(trajectories): - x, y = trajectories["C"] + x, y = trajectories["C"] # Second derivatives indicate curvature d2x = sp.diff(x, theta, 2) d2y = sp.diff(y, theta, 2) @@ -581,19 +581,19 @@

    Computing Sensitivitylinkage = fourbar_symbolic( ground_length=4, - crank_length="L1", - coupler_length="L2", - rocker_length="L3", + crank_length="L1", + coupler_length="L2", + rocker_length="L3", ) # Get symbolic expressions solutions = solve_linkage_symbolically(linkage) -x_coupler, y_coupler = solutions["C"] +x_coupler, y_coupler = solutions["C"] -# Differentiate with respect to the linkage's own symbols. A fresh -# sp.symbols("L1 L2 L3") would carry different assumptions, count as +# Differentiate with respect to the linkage's own symbols. A fresh +# sp.symbols("L1 L2 L3") would carry different assumptions, count as # unrelated symbols, and give zero gradients. -L1, L2, L3 = (linkage.parameters[name] for name in ("L1", "L2", "L3")) +L1, L2, L3 = (linkage.parameters[name] for name in ("L1", "L2", "L3")) params = [L1, L2, L3] # Compute gradients (sensitivity) @@ -603,10 +603,10 @@

    Computing Sensitivity# Evaluate at a specific configuration values = {L1: 1.0, L2: 3.0, L3: 3.0, theta: 0} -print("Sensitivity of coupler x-position:") +print("Sensitivity of coupler x-position:") for param, g in zip(params, grad_x): sensitivity = float(g.subs(values).evalf()) - print(f" dx/d{param} = {sensitivity:.4f}") + print(f" dx/d{param} = {sensitivity:.4f}") @@ -617,21 +617,21 @@

    Tolerance Analysis Exampleimport numpy as np linkage = fourbar_symbolic( - ground_length=4, crank_length="L1", - coupler_length="L2", rocker_length="L3" + ground_length=4, crank_length="L1", + coupler_length="L2", rocker_length="L3" ) # Nominal parameters -nominal = {"L1": 1.0, "L2": 3.0, "L3": 3.0} +nominal = {"L1": 1.0, "L2": 3.0, "L3": 3.0} tolerance = 0.1 # +/- 0.1 manufacturing tolerance theta_vals = np.linspace(0, 2*np.pi, 100) nominal_traj = compute_trajectory_numeric(linkage, nominal, theta_vals) -print("Effect of +0.1 tolerance on each parameter:") -print("-" * 50) +print("Effect of +0.1 tolerance on each parameter:") +print("-" * 50) -for param in ["L1", "L2", "L3"]: +for param in ["L1", "L2", "L3"]: perturbed = nominal.copy() perturbed[param] += tolerance @@ -639,11 +639,11 @@

    Tolerance Analysis Example# Maximum deviation from nominal deviation = np.max(np.sqrt( - (nominal_traj["C"][:, 0] - perturbed_traj["C"][:, 0])**2 + - (nominal_traj["C"][:, 1] - perturbed_traj["C"][:, 1])**2 + (nominal_traj["C"][:, 0] - perturbed_traj["C"][:, 0])**2 + + (nominal_traj["C"][:, 1] - perturbed_traj["C"][:, 1])**2 )) - print(f" {param}: max deviation = {deviation:.4f}") + print(f" {param}: max deviation = {deviation:.4f}")

    Output:

    @@ -715,21 +715,21 @@

    Converting Back to Numeric# Create symbolic linkage for analysis / gradient-based optimisation sym_linkage = fourbar_symbolic( ground_length=4, - crank_length="L1", - coupler_length="L2", - rocker_length="L3", + crank_length="L1", + coupler_length="L2", + rocker_length="L3", ) # Optimal parameters from symbolic optimisation -optimal_params = {"L1": 0.3, "L2": 3.36, "L3": 1.82} +optimal_params = {"L1": 0.3, "L2": 3.36, "L3": 1.82} # Rebuild the four-bar numerically with those parameters. -A = Ground(0.0, 0.0, name="A") -D = Ground(4.0, 0.0, name="D") -crank = Crank(anchor=A, radius=optimal_params["L1"], angular_velocity=0.1) +A = Ground(0.0, 0.0, name="A") +D = Ground(4.0, 0.0, name="D") +crank = Crank(anchor=A, radius=optimal_params["L1"], angular_velocity=0.1) output = RRRDyad( anchor1=crank.output, anchor2=D, - distance1=optimal_params["L2"], distance2=optimal_params["L3"], + distance1=optimal_params["L2"], distance2=optimal_params["L3"], ) numeric_linkage = Linkage([A, D, crank, output]) @@ -750,14 +750,14 @@

    Converting Back to Numericfitness, numeric_linkage, bounds=bounds, order_relation=min, n_particles=20, iterations=20, verbose=False, ) -print(f"PSO fine-tuning: {results[0].score:.4f}") +print(f"PSO fine-tuning: {results[0].score:.4f}")

    Complete Workflow Example

    Here’s a complete example showing the symbolic workflow:

    -
    """Complete symbolic analysis and optimization workflow."""
    +
    """Complete symbolic analysis and optimization workflow."""
     from pylinkage.actuators import Crank
     from pylinkage.components import Ground
     from pylinkage.dyads import RRRDyad
    @@ -771,68 +771,68 @@ 

    Complete Workflow Exampleimport numpy as np # Step 1: Create symbolic linkage -print("Step 1: Create symbolic linkage") +print("Step 1: Create symbolic linkage") linkage = fourbar_symbolic( ground_length=4, - crank_length="L1", - coupler_length="L2", - rocker_length="L3", + crank_length="L1", + coupler_length="L2", + rocker_length="L3", ) -print(f" Parameters: {list(linkage.parameters.keys())}") +print(f" Parameters: {list(linkage.parameters.keys())}") # Step 2: Explore parameter space -print("\nStep 2: Parameter exploration") +print("\nStep 2: Parameter exploration") theta_vals = np.linspace(0, 2*np.pi, 100) configs = [ - {"L1": 0.5, "L2": 3.0, "L3": 3.0}, - {"L1": 1.0, "L2": 3.0, "L3": 3.0}, - {"L1": 1.5, "L2": 3.0, "L3": 3.0}, + {"L1": 0.5, "L2": 3.0, "L3": 3.0}, + {"L1": 1.0, "L2": 3.0, "L3": 3.0}, + {"L1": 1.5, "L2": 3.0, "L3": 3.0}, ] for params in configs: traj = compute_trajectory_numeric(linkage, params, theta_vals) - area = np.ptp(traj["C"][:, 0]) * np.ptp(traj["C"][:, 1]) - print(f" L1={params['L1']}: workspace area = {area:.3f}") + area = np.ptp(traj["C"][:, 0]) * np.ptp(traj["C"][:, 1]) + print(f" L1={params['L1']}: workspace area = {area:.3f}") # Step 3: Optimize -print("\nStep 3: Gradient-based optimization") +print("\nStep 3: Gradient-based optimization") def objective(trajectories): - x, y = trajectories["C"] + x, y = trajectories["C"] return (x - 3.0)**2 + (y - 1.5)**2 optimizer = SymbolicOptimizer(linkage, objective) result = optimizer.optimize( - initial_params={"L1": 1.0, "L2": 3.0, "L3": 3.0}, - bounds={"L1": (0.3, 2.0), "L2": (1.5, 5.0), "L3": (1.5, 5.0)}, + initial_params={"L1": 1.0, "L2": 3.0, "L3": 3.0}, + bounds={"L1": (0.3, 2.0), "L2": (1.5, 5.0), "L3": (1.5, 5.0)}, ) -print(f" Success: {result.success}") -print(f" Iterations: {result.iterations}") -print(f" Optimal: L1={result.params['L1']:.3f}, " - f"L2={result.params['L2']:.3f}, L3={result.params['L3']:.3f}") +print(f" Success: {result.success}") +print(f" Iterations: {result.iterations}") +print(f" Optimal: L1={result.params['L1']:.3f}, " + f"L2={result.params['L2']:.3f}, L3={result.params['L3']:.3f}") # Step 4: Build a numeric linkage from the optimised parameters. -print("\nStep 4: Convert to numeric and visualize") -A = Ground(0.0, 0.0, name="A") -D = Ground(4.0, 0.0, name="D") +print("\nStep 4: Convert to numeric and visualize") +A = Ground(0.0, 0.0, name="A") +D = Ground(4.0, 0.0, name="D") numeric_crank = Crank( - anchor=A, radius=result.params["L1"], angular_velocity=0.1, + anchor=A, radius=result.params["L1"], angular_velocity=0.1, ) numeric_output = RRRDyad( anchor1=numeric_crank.output, anchor2=D, - distance1=result.params["L2"], distance2=result.params["L3"], + distance1=result.params["L2"], distance2=result.params["L3"], ) numeric = Linkage([A, D, numeric_crank, numeric_output]) -print(f" Numeric linkage created with {len(numeric.components)} components") +print(f" Numeric linkage created with {len(numeric.components)} components") # pl.show_linkage(numeric) # Uncomment to visualize

    Output:

    Step 1: Create symbolic linkage
    -  Parameters: ['L1', 'L2', 'L3']
    +  Parameters: ['L1', 'L2', 'L3']
     
     Step 2: Parameter exploration
       L1=0.5: workspace area = 0.355
    diff --git a/docs/tutorials/synthesis.html b/docs/tutorials/synthesis.html
    index 9a8a06a..d00ac89 100644
    --- a/docs/tutorials/synthesis.html
    +++ b/docs/tutorials/synthesis.html
    @@ -6,14 +6,14 @@
       
     
       
    -  Linkage Synthesis — pylinkage 1.2.2 documentation
    +  Linkage Synthesis — pylinkage 1.3.0 documentation
           
           
     
       
           
           
    -      
    +      
           
           
           
    @@ -163,7 +163,7 @@ 

    Quick Start: Path Generation# Find linkages that achieve this path result = path_generation(precision_points) -print(f"Found {len(result.solutions)} candidate solutions") +print(f"Found {len(result.solutions)} candidate solutions") # Visualize the first solution if result.solutions: @@ -191,7 +191,7 @@

    Animating a Solutiondef show(result, index=0): - """Animate one solution, oscillating the crank when it cannot turn fully.""" + """Animate one solution, oscillating the crank when it cannot turn fully.""" raw = result.raw_solutions[index] limits = crank_angle_limits( raw.crank_length, raw.coupler_length, raw.rocker_length, raw.ground_length @@ -199,7 +199,7 @@

    Animating a Solutionlinkage = result.solutions[index] if limits is not None: lo, hi = (math.degrees(a) for a in limits) - print(f"crank oscillates between {lo:.1f} and {hi:.1f} deg") + print(f"crank oscillates between {lo:.1f} and {hi:.1f} deg") linkage = solution_to_linkage(raw._replace(arc_limits=limits), name=linkage.name) pl.show_linkage(linkage) @@ -247,21 +247,21 @@

    Example: Three Precision Pointsresult = function_generation(angle_pairs, ground_length=2.0) if result.solutions: - print(f"Found {len(result.solutions)} solutions") + print(f"Found {len(result.solutions)} solutions") for i, sol in enumerate(result.raw_solutions): - print(f"\nSolution {i + 1}:") - print(f" Crank length (L1): {sol.crank_length:.4f}") - print(f" Coupler length (L2): {sol.coupler_length:.4f}") - print(f" Rocker length (L3): {sol.rocker_length:.4f}") - print(f" Ground length (L4): {sol.ground_length:.4f}") + print(f"\nSolution {i + 1}:") + print(f" Crank length (L1): {sol.crank_length:.4f}") + print(f" Coupler length (L2): {sol.coupler_length:.4f}") + print(f" Rocker length (L3): {sol.rocker_length:.4f}") + print(f" Ground length (L4): {sol.ground_length:.4f}") # Visualize the first solution linkage = result.solutions[0] show(result) else: - print("No valid solutions found") + print("No valid solutions found") for warning in result.warnings: - print(f"Warning: {warning}") + print(f"Warning: {warning}")

    Expected output:

    @@ -296,10 +296,10 @@

    Verifying Function Generation# Check if synthesized linkage achieves the angle pairs is_valid, errors = verify_function_generation(linkage, angle_pairs) -print(f"Verification {'passed' if is_valid else 'failed'}:") +print(f"Verification {'passed' if is_valid else 'failed'}:") for i, ((phi, psi), error) in enumerate(zip(angle_pairs, errors)): - print(f" Point {i+1}: phi={math.degrees(phi):.1f}°, " - f"psi={math.degrees(psi):.1f}°, error={math.degrees(error):.4f}°") + print(f" Point {i+1}: phi={math.degrees(phi):.1f}°, " + f"psi={math.degrees(psi):.1f}°, error={math.degrees(error):.4f}°")

    @@ -331,24 +331,24 @@

    Basic Path Generationresult = path_generation(points, max_solutions=3) -print(f"Found {len(result.solutions)} solutions") -print(f"Warnings: {result.warnings}") +print(f"Found {len(result.solutions)} solutions") +print(f"Warnings: {result.warnings}") # Examine each solution for i, (linkage, raw) in enumerate(zip(result.solutions, result.raw_solutions)): - print(f"\nSolution {i + 1}:") + print(f"\nSolution {i + 1}:") # Link lengths from the raw solution - print(f" Crank {raw.crank_length:.3f}, coupler {raw.coupler_length:.3f}, " - f"rocker {raw.rocker_length:.3f}, ground {raw.ground_length:.3f}") - # The Linkage's own constraints: crank radius, the two RRRDyad - # distances, then the coupler point's distance and angle + print(f" Crank {raw.crank_length:.3f}, coupler {raw.coupler_length:.3f}, " + f"rocker {raw.rocker_length:.3f}, ground {raw.ground_length:.3f}") + # The Linkage's own constraints: crank radius, the two RRRDyad + # distances, then the coupler point's distance and angle constraints = [round(float(c), 3) for c in linkage.get_constraints()] - print(f" Constraints: {constraints}") + print(f" Constraints: {constraints}")

    Example result (may vary):

    @@ -403,13 +403,13 @@

    Three-Pose Synthesisresult = motion_generation(poses) -print(f"Found {len(result.solutions)} solutions") +print(f"Found {len(result.solutions)} solutions") if result.solutions: linkage = result.solutions[0] - print("\nLinkage configuration:") + print("\nLinkage configuration:") for component in linkage.components: - print(f" {component.name}: ({component.x:.2f}, {component.y:.2f})") + print(f" {component.name}: ({component.x:.2f}, {component.y:.2f})") show(result) @@ -442,16 +442,16 @@

    Four-Pose and Five-Pose SynthesisPose(3.0, 0.6, 0.6), ] -# With four poses the circle points reduce to Burmester's curve, with +# With four poses the circle points reduce to Burmester's curve, with # five to at most four Burmester points; motion_generation handles both. result = motion_generation(poses) if result.solutions: - print(f"Found {len(result.solutions)} solutions") + print(f"Found {len(result.solutions)} solutions") else: - print("No solution; five poses in particular are often unreachable") + print("No solution; five poses in particular are often unreachable") for warning in result.warnings: - print(f" {warning}") + print(f" {warning}") @@ -465,10 +465,10 @@

    Working with Synthesis Results# Check if solutions were found if result.solutions: - print("Solutions found!") + print("Solutions found!") # Number of solutions -print(f"Count: {len(result.solutions)}") +print(f"Count: {len(result.solutions)}") # Iterate over linkages for linkage in result.solutions: @@ -477,20 +477,20 @@

    Working with Synthesis Results# Or take them as an Ensemble: batch simulation, ranking by link # lengths, filtering, and visualization in one object ensemble = result.ensemble -print(f"{ensemble.n_members} members, scores {list(ensemble.scores)}") -shortest_crank = ensemble.rank("crank_length")[0] -print(f"Shortest crank: {shortest_crank.scores['crank_length']:.3f}") +print(f"{ensemble.n_members} members, scores {list(ensemble.scores)}") +shortest_crank = ensemble.rank("crank_length")[0] +print(f"Shortest crank: {shortest_crank.scores['crank_length']:.3f}") # Access the underlying solutions with full parameters for sol in result.raw_solutions: - print(f"Crank: {sol.crank_length}") - print(f"Coupler: {sol.coupler_length}") - print(f"Rocker: {sol.rocker_length}") - print(f"Ground: {sol.ground_length}") + print(f"Crank: {sol.crank_length}") + print(f"Coupler: {sol.coupler_length}") + print(f"Rocker: {sol.rocker_length}") + print(f"Ground: {sol.ground_length}") # Check for warnings for warning in result.warnings: - print(f"Warning: {warning}") + print(f"Warning: {warning}") @@ -511,10 +511,10 @@

    Creating Linkages from Dimensionsfrom pylinkage.synthesis import grashof_check, is_crank_rocker grashof = grashof_check(1.0, 3.0, 3.0, 4.0) -print(f"Grashof type: {grashof.name}") +print(f"Grashof type: {grashof.name}") if is_crank_rocker(1.0, 3.0, 3.0, 4.0): - print("This is a crank-rocker mechanism") + print("This is a crank-rocker mechanism") pl.show_linkage(linkage) @@ -542,23 +542,23 @@

    Grashof AnalysisL1, L2, L3, L4 = 1.0, 3.0, 3.0, 4.0 # Check if Grashof (shortest + longest <= sum of other two) -print(f"Is Grashof: {is_grashof(L1, L2, L3, L4)}") +print(f"Is Grashof: {is_grashof(L1, L2, L3, L4)}") # Get specific type grashof_type = grashof_check(L1, L2, L3, L4) if grashof_type == GrashofType.GRASHOF_CRANK_ROCKER: - print("Crank makes full rotations, rocker oscillates") + print("Crank makes full rotations, rocker oscillates") elif grashof_type == GrashofType.GRASHOF_DOUBLE_CRANK: - print("Both crank and rocker make full rotations") + print("Both crank and rocker make full rotations") elif grashof_type == GrashofType.GRASHOF_ROCKER_CRANK: - print("Rocker makes full rotations, crank oscillates") + print("Rocker makes full rotations, crank oscillates") elif grashof_type == GrashofType.GRASHOF_DOUBLE_ROCKER: - print("Coupler makes full rotations, crank and rocker oscillate") + print("Coupler makes full rotations, crank and rocker oscillate") elif grashof_type == GrashofType.CHANGE_POINT: - print("Change-point mechanism (special case)") + print("Change-point mechanism (special case)") else: - print("Non-Grashof: no link can rotate fully") + print("Non-Grashof: no link can rotate fully") @@ -581,18 +581,18 @@

    Advanced: Burmester Curve Analysis# Compute relative rotation poles between poses, as complex numbers poles = compute_all_poles(poses) -print(f"Poles: {poles}") +print(f"Poles: {poles}") # Compute the circle-point and center-point curves (loci of valid # attachment points on the body and on the ground) curves = compute_circle_point_curve(poses) -print(f"{len(curves.circle_curve)} sampled circle points") +print(f"{len(curves.circle_curve)} sampled circle points") # Select compatible dyad pairs to form a complete 4-bar dyads = select_compatible_dyads(curves, max_pairs=20) -print(f"Found {len(dyads)} compatible dyad pairs") +print(f"Found {len(dyads)} compatible dyad pairs") left, right = dyads[0] -print(f"First pair: link lengths {left.link_length:.3f} and {right.link_length:.3f}") +print(f"First pair: link lengths {left.link_length:.3f} and {right.link_length:.3f}") @@ -654,7 +654,7 @@

    Synthesis vs Optimizationverbose=False, ) - print(f"Fine-tuned score: {optimized[0].score:.4f}") + print(f"Fine-tuned score: {optimized[0].score:.4f}") optimized.show(0) diff --git a/docs/tutorials/visualization.html b/docs/tutorials/visualization.html index 0e9b1eb..c31009c 100644 --- a/docs/tutorials/visualization.html +++ b/docs/tutorials/visualization.html @@ -6,14 +6,14 @@ - Visualization Backends — pylinkage 1.2.2 documentation + Visualization Backends — pylinkage 1.3.0 documentation - + @@ -134,18 +134,18 @@

    Visualization Backendsfrom pylinkage.dyads import RRRDyad from pylinkage.simulation import Linkage -A = Ground(0.0, 0.0, name="A") -D = Ground(3.0, 0.0, name="D") -crank = Crank(anchor=A, radius=1.0, angular_velocity=0.31, name="Crank") +A = Ground(0.0, 0.0, name="A") +D = Ground(3.0, 0.0, name="D") +crank = Crank(anchor=A, radius=1.0, angular_velocity=0.31, name="Crank") output = RRRDyad( - anchor1=crank.output, anchor2=D, distance1=3.0, distance2=2.0, name="Output", + anchor1=crank.output, anchor2=D, distance1=3.0, distance2=2.0, name="Output", ) -linkage = Linkage([A, D, crank, output], name="Four-bar") +linkage = Linkage([A, D, crank, output], name="Four-bar") # Every backend accepts precomputed loci; computing them once saves a # simulation per figure loci = list(linkage.step()) -print(f"{len(loci)} frames per turn of the crank") +print(f"{len(loci)} frames per turn of the crank")
    @@ -208,7 +208,7 @@

    Basic Visualizationshow_linkage(linkage) # Longer, with more frames per turn, and a title -show_linkage(linkage, duration=8, fps=30, points=720, title="Four-bar") +show_linkage(linkage, duration=8, fps=30, points=720, title="Four-bar") @@ -226,15 +226,15 @@

    Static Frame Visualizationshow_legend=True, show_labels=True, n_ghosts=6, # outlines at six positions of the cycle - title="Four-bar Linkage - Initial Position", + title="Four-bar Linkage - Initial Position", ) # Customize the plot like any matplotlib axes ax.grid(True, alpha=0.3) -ax.set_aspect("equal") +ax.set_aspect("equal") plt.tight_layout() -plt.savefig("linkage_static.png", dpi=150) +plt.savefig("linkage_static.png", dpi=150) plt.show() @@ -252,9 +252,9 @@

    Animated GIF Outputplot_static_linkage(linkage, ax, loci, show_labels=False) animation = plot_kinematic_linkage(linkage, fig, ax, loci, frames=len(loci), interval=40) -animation.save("four_bar_animation.gif", writer="pillow", fps=24) +animation.save("four_bar_animation.gif", writer="pillow", fps=24) plt.close(fig) -print("Animation saved to four_bar_animation.gif") +print("Animation saved to four_bar_animation.gif")

    Result: An animated GIF showing the linkage cycling through its motion. @@ -265,24 +265,24 @@

    Animated GIF Output

    Compare different configurations side by side:

    def make_fourbar(coupler, rocker, name):
    -    A = Ground(0.0, 0.0, name="A")
    -    D = Ground(3.0, 0.0, name="D")
    +    A = Ground(0.0, 0.0, name="A")
    +    D = Ground(3.0, 0.0, name="D")
         crank = Crank(anchor=A, radius=1.0, angular_velocity=0.31)
         output = RRRDyad(
             anchor1=crank.output, anchor2=D, distance1=coupler, distance2=rocker,
         )
         return Linkage([A, D, crank, output], name=name)
     
    -linkage1 = make_fourbar(3.0, 2.0, "Short rocker")
    -linkage2 = make_fourbar(3.0, 3.0, "Long rocker")
    +linkage1 = make_fourbar(3.0, 2.0, "Short rocker")
    +linkage2 = make_fourbar(3.0, 3.0, "Long rocker")
     
     fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
     for lk, ax in ((linkage1, ax1), (linkage2, ax2)):
         plot_static_linkage(lk, ax, list(lk.step()), n_ghosts=4, title=lk.name)
    -    ax.set_aspect("equal")
    +    ax.set_aspect("equal")
     
     plt.tight_layout()
    -plt.savefig("comparison.png", dpi=150)
    +plt.savefig("comparison.png", dpi=150)
     plt.show()
     
    @@ -299,7 +299,7 @@

    Basic Interactive Plotfig = plot_linkage_plotly( linkage, loci, - title="Four-bar", + title="Four-bar", show_loci=True, # joint trajectories show_labels=True, # joint names show_dimensions=True, # link lengths @@ -311,7 +311,7 @@

    Basic Interactive Plotfig.show() # Save to HTML -fig.write_html("interactive_linkage.html") +fig.write_html("interactive_linkage.html")

    Result: An interactive HTML page where you can zoom and pan, hover over @@ -325,11 +325,11 @@

    Animation with Sliderfig = animate_linkage_plotly( linkage, loci, - title="Interactive Four-bar", + title="Interactive Four-bar", frame_duration=50, # ms per frame ) -fig.write_html("animated_linkage.html") +fig.write_html("animated_linkage.html")

    Result: HTML with a slider to scrub through the animation manually.

    @@ -340,18 +340,18 @@

    Animation with SliderCustomizing Plotly Appearance

    The returned object is a plain plotly Figure: restyle it with the plotly API.

    -
    fig = plot_linkage_plotly(linkage, loci, title="Styled Four-bar")
    +
    fig = plot_linkage_plotly(linkage, loci, title="Styled Four-bar")
     
     # Further customization using the plotly API
     fig.update_layout(
    -    plot_bgcolor="white",
    -    paper_bgcolor="white",
    -    font=dict(family="Arial", size=14),
    +    plot_bgcolor="white",
    +    paper_bgcolor="white",
    +    font=dict(family="Arial", size=14),
     )
    -fig.update_xaxes(showgrid=True, gridwidth=1, gridcolor="lightgray")
    -fig.update_yaxes(showgrid=True, gridwidth=1, gridcolor="lightgray")
    +fig.update_xaxes(showgrid=True, gridwidth=1, gridcolor="lightgray")
    +fig.update_yaxes(showgrid=True, gridwidth=1, gridcolor="lightgray")
     # Thicker bars: the link traces are the ones drawn with lines only
    -fig.update_traces(line_width=6, selector=dict(mode="lines"))
    +fig.update_traces(line_width=6, selector=dict(mode="lines"))
     
     fig.show()
     
    @@ -362,10 +362,10 @@

    Embedding in Web Pages

    @@ -397,7 +397,7 @@

    Basic SVG Output
    from pylinkage.visualizer import save_linkage_svg
     
     # Save as SVG
    -save_linkage_svg(linkage, "linkage.svg", loci)
    +save_linkage_svg(linkage, "linkage.svg", loci)
     

    Result: A crisp SVG file that scales perfectly at any resolution.

    @@ -409,18 +409,18 @@

    Customizing SVG Styledrawing = plot_linkage_svg( linkage, loci, - title="Four-bar", - link_style="bone", # "bar" (default), "bone" or "line" + title="Four-bar", + link_style="bone", # "bar" (default), "bone" or "line" show_dimensions=True, # link lengths along the bars show_loci=True, show_labels=True, scale=60, # pixels per unit padding=80, # canvas margin in pixels ) -print(f"Canvas: {drawing.width} x {drawing.height} px") +print(f"Canvas: {drawing.width} x {drawing.height} px") # The drawsvg Drawing can be edited before saving -drawing.save_svg("styled_linkage.svg") +drawing.save_svg("styled_linkage.svg")

    The same keyword arguments go through save_linkage_svg(linkage, path, @@ -432,7 +432,7 @@

    SVG for LaTeXdrawing.save_png() (needs drawsvg[raster]) or keep the SVG and include it with \includesvg:

    DXF Layers: The exported DXF contains organized layers:

    @@ -483,7 +483,7 @@

    Customizing DXF Output

    3D Geometry: The STEP export creates:

    @@ -520,7 +520,7 @@

    Customizing STEP Dimensions# Define custom link cross-section link_profile = LinkProfile( - width=0.3, # Link bar width (in the linkage's units) + width=0.3, # Link bar width (in the linkage's units) thickness=0.1, # Extrusion depth in Z fillet_radius=0.02, # Edge rounding (0 for sharp) ) @@ -534,7 +534,7 @@

    Customizing STEP Dimensions# Export with custom profiles save_linkage_step( linkage, - "machined_linkage.step", + "machined_linkage.step", loci, link_profile=link_profile, joint_profile=joint_profile, @@ -551,11 +551,11 @@

    Exporting Multiple Framesfor i, frame_idx in enumerate([0, 5, 10, 15]): save_linkage_step( linkage, - f"linkage_position_{i}.step", + f"linkage_position_{i}.step", loci, frame_index=frame_idx, ) - print(f"Exported frame {frame_idx} to linkage_position_{i}.step") + print(f"Exported frame {frame_idx} to linkage_position_{i}.step")

    @@ -572,8 +572,8 @@

    CAD Export Workflowshow_linkage, ) -Path("documentation").mkdir(exist_ok=True) -Path("fabrication").mkdir(exist_ok=True) +Path("documentation").mkdir(exist_ok=True) +Path("fabrication").mkdir(exist_ok=True) # 1. Design and simulate loci = list(linkage.step()) @@ -582,21 +582,21 @@

    CAD Export Workflowshow_linkage(linkage, loci=loci) # 3. Publication figure (SVG) -save_linkage_svg(linkage, "documentation/linkage.svg", loci, show_loci=True) +save_linkage_svg(linkage, "documentation/linkage.svg", loci, show_loci=True) # 4. 2D CAD for laser cutting (DXF) -save_linkage_dxf(linkage, "fabrication/linkage_2d.dxf", loci) +save_linkage_dxf(linkage, "fabrication/linkage_2d.dxf", loci) # 5. 3D CAD for machining/printing (STEP) profile = LinkProfile(width=0.3, thickness=0.1) save_linkage_step( linkage, - "fabrication/linkage_3d.step", + "fabrication/linkage_3d.step", loci, link_profile=profile, ) -print("Export complete! Files ready for fabrication.") +print("Export complete! Files ready for fabrication.") @@ -617,7 +617,7 @@

    PSO Visualization@pl.kinematic_maximization def stride(loci, **kwargs): - """Horizontal travel of the output joint.""" + """Horizontal travel of the output joint.""" xs = [step[-1][0] for step in loci] return max(xs) - min(xs) @@ -643,22 +643,22 @@

    PSO Visualization(i, history[i * n_particles:(i + 1) * n_particles]) for i in range(len(history) // n_particles) ] -dim_names = ["crank radius", "coupler", "rocker"] -dim_types = ["length", "length", "length"] +dim_names = ["crank radius", "coupler", "rocker"] +dim_types = ["length", "length", "length"] # Parallel coordinates of the final swarm, colored by score fig, ax = plt.subplots(figsize=(10, 5)) parallel_coordinates_plot(swarms[-1], dim_names, dim_types, bounds=bounds, ax=ax) -fig.savefig("pso_parallel_coordinates.png", dpi=150) +fig.savefig("pso_parallel_coordinates.png", dpi=150) # Dashboard: score history, the swarm, and the best linkage score_history = [max(agent[0] for agent in swarm) for _, swarm in swarms] fig = dashboard_layout(linkage, swarms[-1], score_history, dim_names, dim_types, bounds=bounds) -fig.savefig("pso_dashboard.png", dpi=150) +fig.savefig("pso_dashboard.png", dpi=150) # Animated dashboard over the iterations animation = animate_dashboard(linkage, swarms, dim_names, dim_types, bounds=bounds, interval=300) -animation.save("pso_dashboard.gif", writer="pillow", fps=3) +animation.save("pso_dashboard.gif", writer="pillow", fps=3)

    The strider example (docs/examples/pso_visualization_demo.py) runs the @@ -677,7 +677,7 @@

    Visualization with Kinematics @@ -753,14 +753,14 @@

    Example: Complete Visualization Workflow) # Create an optimized linkage -A = Ground(0.0, 0.0, name="A") -D = Ground(3.0, 0.0, name="D") -crank = Crank(anchor=A, radius=1.0, angular_velocity=0.31, name="Crank") +A = Ground(0.0, 0.0, name="A") +D = Ground(3.0, 0.0, name="D") +crank = Crank(anchor=A, radius=1.0, angular_velocity=0.31, name="Crank") output = RRRDyad( anchor1=crank.output, anchor2=D, - distance1=2.5, distance2=1.5, name="Output", + distance1=2.5, distance2=1.5, name="Output", ) -linkage = Linkage([A, D, crank, output], name="Optimized Four-bar") +linkage = Linkage([A, D, crank, output], name="Optimized Four-bar") loci = list(linkage.step()) # 1. Quick check with Matplotlib @@ -768,27 +768,27 @@

    Example: Complete Visualization Workflow# 2. Interactive exploration with Plotly fig = animate_linkage_plotly(linkage, loci) -fig.write_html("explore.html") -print("Open explore.html in browser for interactive view") +fig.write_html("explore.html") +print("Open explore.html in browser for interactive view") # 3. Publication figure with drawsvg save_linkage_svg( linkage, - "figure1.svg", + "figure1.svg", loci, show_loci=True, show_labels=True, - link_style="line", + link_style="line", ) -print("Publication figure saved to figure1.svg") +print("Publication figure saved to figure1.svg") # 4. Animation for presentation fig, ax = plt.subplots(figsize=(6, 4.5)) plot_static_linkage(linkage, ax, loci, show_labels=False) animation = plot_kinematic_linkage(linkage, fig, ax, loci, frames=len(loci)) -animation.save("presentation.gif", writer="pillow", fps=30) +animation.save("presentation.gif", writer="pillow", fps=30) plt.close(fig) -print("Animation saved to presentation.gif") +print("Animation saved to presentation.gif") diff --git a/pyproject.toml b/pyproject.toml index bd63f05..d79f1d7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "pylinkage" -version = "1.2.2" +version = "1.3.0" authors = [ {name = "Hugo Farajallah", email = "contact@hugofara.net"}, ] @@ -155,7 +155,7 @@ format = "ruff format ." typecheck = "mypy src/pylinkage" [tool.bumpversion] -current_version = "1.2.2" +current_version = "1.3.0" commit = true tag = true tag_name = "v{new_version}" diff --git a/src/pylinkage/__init__.py b/src/pylinkage/__init__.py index d139ead..113e90b 100644 --- a/src/pylinkage/__init__.py +++ b/src/pylinkage/__init__.py @@ -244,4 +244,4 @@ def __getattr__(name: str) -> object: raise AttributeError(f"module {__name__!r} has no attribute {name!r}") -__version__ = "1.2.2" +__version__ = "1.3.0" diff --git a/uv.lock b/uv.lock index acbeea4..a9abe74 100644 --- a/uv.lock +++ b/uv.lock @@ -3179,7 +3179,7 @@ wheels = [ [[package]] name = "pylinkage" -version = "1.2.2" +version = "1.3.0" source = { editable = "." } dependencies = [ { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },