Configuring a QNN
In qadence
, the QNN
is a variational quantum model that can potentially take multi-dimensional input.
The QNN
class needs a circuit and a list of observables; the number of feature parameters in the input circuit determines the number of input features (i.e. the dimensionality of the classical data given as input) whereas the number of observables determines the number of outputs of the quantum neural network.
The circuit has two parts, the feature map and the ansatz. The feature map is responsible for encoding the input data into the quantum state, while the ansatz is responsible for the variational part of the model. In addition, a third part of the QNN is the observables, which is (a list of) operators that are measured at the end of the circuit.
In QML Constructors we have seen how to construct the feature map and the ansatz. In this tutorial, we will see how to do the same using configs.
One convenient way to construct these three parts of the model is to use the config classes, namely,
ObservableConfig
, FeatureMapConfig
, AnsatzConfig
. These classes allow you to specify the type of circuit and the parameters of the circuit in a structured way.
Defining the Observable
The model output is the expectation value of the defined observable(s). We use the ObservableConfig
class to specify the observable.
We can specify any Hamiltonian that we want to measure at the end of the circuit. Let us say we want to measure the \(Z\) operator.
from qadence import observable_from_config , ObservableConfig , Z
observable_config = ObservableConfig (
detuning = Z ,
scale = 3.0 ,
shift =- 1.0 ,
)
observable = observable_from_config ( register = 4 , config = observable_config )
%3
cluster_7907d3080a6e4b6ead2b9c3a7553eeaa
2596829d04f24868a5d35595d34bdaa0
0
ee3c71f86be746e2a862912181fa3816
2596829d04f24868a5d35595d34bdaa0--ee3c71f86be746e2a862912181fa3816
081489e8a6554d23b86fc5f24d3f6444
1
8a4c1b8e6934421bba999f0ed02590d8
ee3c71f86be746e2a862912181fa3816--8a4c1b8e6934421bba999f0ed02590d8
1eb72caa88f44c40a09b038c85665b4d
76a70e4b5e624d32bec212073201b457
AddBlock
081489e8a6554d23b86fc5f24d3f6444--76a70e4b5e624d32bec212073201b457
68fc56286c0a4476ba9efdb7434251fc
2
76a70e4b5e624d32bec212073201b457--1eb72caa88f44c40a09b038c85665b4d
f21ac171bd3245bc90b955a76eeedd43
e0a2d2ffe47c4b93b4f9aa08e22ae2e5
68fc56286c0a4476ba9efdb7434251fc--e0a2d2ffe47c4b93b4f9aa08e22ae2e5
2f693bdda63c4d60a5283d8e95bd6838
3
e0a2d2ffe47c4b93b4f9aa08e22ae2e5--f21ac171bd3245bc90b955a76eeedd43
be12ce14e1674079be22e60c70a863b5
cbdab11db55249d18a7d786202b5ccb4
2f693bdda63c4d60a5283d8e95bd6838--cbdab11db55249d18a7d786202b5ccb4
cbdab11db55249d18a7d786202b5ccb4--be12ce14e1674079be22e60c70a863b5
We have specified the observable Hamiltonian to be one with \(Z\) -detuning. The result is linearly scaled by 3.0 and shifted by -1.0. These parameters can optionally also be FeatureParameter or VariationalParameter
One can also specify the observable as a list of observables, in which case the QNN will output a list of values.
For full details on the ObservableConfig
class, see the API documentation .
Defining the Feature Map
Let us say we want to build a 4-qubit QNN that takes two inputs, namely, the \(x\) and the \(y\) coordinates of a point in the plane. We can use the FeatureMapConfig
class to specify the feature map.
from qadence import BasisSet , chain , create_fm_blocks , FeatureMapConfig , ReuploadScaling
fm_config = FeatureMapConfig (
num_features = 2 ,
inputs = [ "x" , "y" ],
basis_set = BasisSet . CHEBYSHEV ,
reupload_scaling = ReuploadScaling . TOWER ,
feature_range = {
"x" : ( - 1.0 , 1.0 ),
"y" : ( 0.0 , 1.0 ),
},
)
fm_blocks = create_fm_blocks ( register = 4 , config = fm_config )
feature_map = chain ( * fm_blocks )
%3
cluster_f5093eb17a9f4fe99a2c08913180ce9d
Tower Chebyshev FM
cluster_47fa4bb6101441fbbaa16bf41ec91c72
Tower Chebyshev FM
8f57775742214d86aa8c3ebb0dabd565
0
031b85d21c664f459efdcedc48b1f872
RX(1.0*acos(x))
8f57775742214d86aa8c3ebb0dabd565--031b85d21c664f459efdcedc48b1f872
442b03b696e945b48628a84c03f394fa
1
736f85c8a70844b8a2d7e991df426065
031b85d21c664f459efdcedc48b1f872--736f85c8a70844b8a2d7e991df426065
baa7418f298944fc9fc529b6d9647e4a
c299d42d848e4a1b9a41193c6783ed0d
RX(2.0*acos(x))
442b03b696e945b48628a84c03f394fa--c299d42d848e4a1b9a41193c6783ed0d
27e5629015f340ed98cf73930ad001d3
2
c299d42d848e4a1b9a41193c6783ed0d--baa7418f298944fc9fc529b6d9647e4a
01f391acb25e4f6d936aa6fec67d1cf0
ea53444d76264f27a0d1cb103f3874fc
RX(1.0*acos(2.0*y - 1.0))
27e5629015f340ed98cf73930ad001d3--ea53444d76264f27a0d1cb103f3874fc
29434cd33f9143529e956fe68f85791c
3
ea53444d76264f27a0d1cb103f3874fc--01f391acb25e4f6d936aa6fec67d1cf0
99b477df51a7476d9e4ad22e7e982637
9054f76b09954e3e8b2aff781751fc02
RX(2.0*acos(2.0*y - 1.0))
29434cd33f9143529e956fe68f85791c--9054f76b09954e3e8b2aff781751fc02
9054f76b09954e3e8b2aff781751fc02--99b477df51a7476d9e4ad22e7e982637
We have specified that the feature map should take two features, and have named the FeatureParameter
"x" and "y" respectively. Both these parameters are encoded using the Chebyshev basis set, and the reupload scaling is set to ReuploadScaling.TOWER
. One can optionally add the basis and the reupload scaling for each parameter separately.
The feature_range
parameter is a dictionary that specifies the range of values that each feature comes from. This is useful for scaling the input data to the range that the encoding function can handle. In default case, this range is mapped to the target range of the Chebyshev basis set which is \([-1, 1]\) . One can also specify the target range for each feature separately.
For full details on the FeatureMapConfig
class, see the API documentation .
Defining the Ansatz
The next part of the QNN is the ansatz. We use AnsatzConfig
class to specify the type of ansatz.
Let us say, we want to follow this feature map with 2 layers of hardware efficient ansatz.
from qadence import AnsatzConfig , AnsatzType , create_ansatz , Strategy
ansatz_config = AnsatzConfig (
depth = 2 ,
ansatz_type = AnsatzType . HEA ,
ansatz_strategy = Strategy . DIGITAL ,
)
ansatz = create_ansatz ( register = 4 , config = ansatz_config )
%3
85399d14ba604db09e93a98655089a82
0
6c56ffd16b0e4b42a4767294f260b5a2
RX(theta₀)
85399d14ba604db09e93a98655089a82--6c56ffd16b0e4b42a4767294f260b5a2
5a18fe40aa69459e906e15e41fd494bd
1
d575e1e8c2a74f3d847265cb1892cb35
RY(theta₄)
6c56ffd16b0e4b42a4767294f260b5a2--d575e1e8c2a74f3d847265cb1892cb35
cf5ec3fd5cfd4c6bab4964a8e22b2a50
RX(theta₈)
d575e1e8c2a74f3d847265cb1892cb35--cf5ec3fd5cfd4c6bab4964a8e22b2a50
d699c847a8524a4db7735cbb21c4c257
cf5ec3fd5cfd4c6bab4964a8e22b2a50--d699c847a8524a4db7735cbb21c4c257
b1e4e7b7230c4ce7952366046a164c00
d699c847a8524a4db7735cbb21c4c257--b1e4e7b7230c4ce7952366046a164c00
424ffebd34a243908fe6e554d19571fc
RX(theta₁₂)
b1e4e7b7230c4ce7952366046a164c00--424ffebd34a243908fe6e554d19571fc
06db0d06b876447e942019f9824f38c1
RY(theta₁₆)
424ffebd34a243908fe6e554d19571fc--06db0d06b876447e942019f9824f38c1
2a1a8b632d22470eaaa83363fa410b2f
RX(theta₂₀)
06db0d06b876447e942019f9824f38c1--2a1a8b632d22470eaaa83363fa410b2f
641ae6ed4a464489a483535b09d6b3d3
2a1a8b632d22470eaaa83363fa410b2f--641ae6ed4a464489a483535b09d6b3d3
0aff7d6c84164ae8ac906d0f858156be
641ae6ed4a464489a483535b09d6b3d3--0aff7d6c84164ae8ac906d0f858156be
b12c039a378f460d85c25f2c2a243115
0aff7d6c84164ae8ac906d0f858156be--b12c039a378f460d85c25f2c2a243115
a8502dbeeb2645a8a37231d5f71a2c6f
2f0e628c916042229a48e3bcaba4dc5b
RX(theta₁)
5a18fe40aa69459e906e15e41fd494bd--2f0e628c916042229a48e3bcaba4dc5b
a5483a82c5764d779578ba83e7325b05
2
21c4e410c6084df18d54999a3d35039f
RY(theta₅)
2f0e628c916042229a48e3bcaba4dc5b--21c4e410c6084df18d54999a3d35039f
412a0e53712741229aebae9934cdb86c
RX(theta₉)
21c4e410c6084df18d54999a3d35039f--412a0e53712741229aebae9934cdb86c
38b404f1603c48bd86d53baca6bc7d92
X
412a0e53712741229aebae9934cdb86c--38b404f1603c48bd86d53baca6bc7d92
38b404f1603c48bd86d53baca6bc7d92--d699c847a8524a4db7735cbb21c4c257
a7874c00fc1544ccb987797e683fc9d1
38b404f1603c48bd86d53baca6bc7d92--a7874c00fc1544ccb987797e683fc9d1
833392a4c8fe4d5fae83d2f3fd874b4e
RX(theta₁₃)
a7874c00fc1544ccb987797e683fc9d1--833392a4c8fe4d5fae83d2f3fd874b4e
f8a2ba2047fb4f41ad8271f6036a6ca7
RY(theta₁₇)
833392a4c8fe4d5fae83d2f3fd874b4e--f8a2ba2047fb4f41ad8271f6036a6ca7
86221752a9e64c638e3f52ddc1ba024f
RX(theta₂₁)
f8a2ba2047fb4f41ad8271f6036a6ca7--86221752a9e64c638e3f52ddc1ba024f
d0241ec1cf3f485597cb2c817d142cc0
X
86221752a9e64c638e3f52ddc1ba024f--d0241ec1cf3f485597cb2c817d142cc0
d0241ec1cf3f485597cb2c817d142cc0--641ae6ed4a464489a483535b09d6b3d3
ffaa954beeed45d2879a9a93a5cf15d4
d0241ec1cf3f485597cb2c817d142cc0--ffaa954beeed45d2879a9a93a5cf15d4
ffaa954beeed45d2879a9a93a5cf15d4--a8502dbeeb2645a8a37231d5f71a2c6f
694414263e3e4492bc46c31ea06b039c
f4fe4e527bd5403191574ab37cef5304
RX(theta₂)
a5483a82c5764d779578ba83e7325b05--f4fe4e527bd5403191574ab37cef5304
a4945b59d93c47e7ab80996087b5a1ed
3
60c841fffbfd43c990d5d92d25e7365c
RY(theta₆)
f4fe4e527bd5403191574ab37cef5304--60c841fffbfd43c990d5d92d25e7365c
5cda0cd246e14f1ea7e618c236ddecd8
RX(theta₁₀)
60c841fffbfd43c990d5d92d25e7365c--5cda0cd246e14f1ea7e618c236ddecd8
26c5ecb3b632470ea9b21b90bbde190f
5cda0cd246e14f1ea7e618c236ddecd8--26c5ecb3b632470ea9b21b90bbde190f
0fa3d49d735a41c8b5d1b2312b31fde0
X
26c5ecb3b632470ea9b21b90bbde190f--0fa3d49d735a41c8b5d1b2312b31fde0
0fa3d49d735a41c8b5d1b2312b31fde0--a7874c00fc1544ccb987797e683fc9d1
871dc7cf1ffc426ba630259c8425fca4
RX(theta₁₄)
0fa3d49d735a41c8b5d1b2312b31fde0--871dc7cf1ffc426ba630259c8425fca4
6f0f68c02ca744e7a1e679bd2322e562
RY(theta₁₈)
871dc7cf1ffc426ba630259c8425fca4--6f0f68c02ca744e7a1e679bd2322e562
bca2cf808e81431fa1d13d17d746cc7d
RX(theta₂₂)
6f0f68c02ca744e7a1e679bd2322e562--bca2cf808e81431fa1d13d17d746cc7d
34a96e8e94824b7da5cbc51c0f841b5d
bca2cf808e81431fa1d13d17d746cc7d--34a96e8e94824b7da5cbc51c0f841b5d
bb518ccce9c4489fb0f444ec605e4cdd
X
34a96e8e94824b7da5cbc51c0f841b5d--bb518ccce9c4489fb0f444ec605e4cdd
bb518ccce9c4489fb0f444ec605e4cdd--ffaa954beeed45d2879a9a93a5cf15d4
bb518ccce9c4489fb0f444ec605e4cdd--694414263e3e4492bc46c31ea06b039c
1fd8337b46eb4e089f0fca11ae14e6fb
960fd07dcee44600bd00ee70b669be76
RX(theta₃)
a4945b59d93c47e7ab80996087b5a1ed--960fd07dcee44600bd00ee70b669be76
74cec4856983404489635f818c3b0060
RY(theta₇)
960fd07dcee44600bd00ee70b669be76--74cec4856983404489635f818c3b0060
0de5054bd202491e8bab5dbdac58da57
RX(theta₁₁)
74cec4856983404489635f818c3b0060--0de5054bd202491e8bab5dbdac58da57
4b94da7e927343778b4f769733d39f09
X
0de5054bd202491e8bab5dbdac58da57--4b94da7e927343778b4f769733d39f09
4b94da7e927343778b4f769733d39f09--26c5ecb3b632470ea9b21b90bbde190f
c4a42a65a7714878924f0a05870df39c
4b94da7e927343778b4f769733d39f09--c4a42a65a7714878924f0a05870df39c
c25764faf33b4f2c976fd8c00d46c2d7
RX(theta₁₅)
c4a42a65a7714878924f0a05870df39c--c25764faf33b4f2c976fd8c00d46c2d7
dd1d0f10d6804077ad66c8e24e178c1a
RY(theta₁₉)
c25764faf33b4f2c976fd8c00d46c2d7--dd1d0f10d6804077ad66c8e24e178c1a
1f1f94eb49e646199b91e389dd219d3a
RX(theta₂₃)
dd1d0f10d6804077ad66c8e24e178c1a--1f1f94eb49e646199b91e389dd219d3a
04063482efd94f4db950948972be70f1
X
1f1f94eb49e646199b91e389dd219d3a--04063482efd94f4db950948972be70f1
04063482efd94f4db950948972be70f1--34a96e8e94824b7da5cbc51c0f841b5d
35c58d6ced464431bee89f8e6742db83
04063482efd94f4db950948972be70f1--35c58d6ced464431bee89f8e6742db83
35c58d6ced464431bee89f8e6742db83--1fd8337b46eb4e089f0fca11ae14e6fb
We have specified that the ansatz should have a depth of 2, and the ansatz type is "hea" (Hardware Efficient Ansatz). The ansatz strategy is set to "digital", which means digital gates are being used. One could alternatively use "analog" or "rydberg" as the ansatz strategy.
For full details on the AnsatzConfig
class, see the API documentation .
Defining the QNN from the Configs
To build the QNN, we can now use the QNN
class as a QuantumModel
subtype. In addition to the feature map, ansatz and the observable configs, we can also specify options such as the backend
, diff_mode
, etc. For full details on the QNN
class, see the API documentation or the documentation on the config constructor here .
from qadence import BackendName , DiffMode , QNN
qnn = QNN . from_configs (
register = 4 ,
obs_config = observable_config ,
fm_config = fm_config ,
ansatz_config = ansatz_config ,
backend = BackendName . PYQTORCH ,
diff_mode = DiffMode . AD ,
)
%3
cluster_9aa6cb3e23944901bc305bf0bd01ecb6
Obs.
cluster_06e43352f4e44046ac546e75c6654a37
cluster_c909c379d80141dca6ef5569c396cd68
Tower Chebyshev FM
cluster_ed8b7f384417423fb2f311fe6e56b3dd
Tower Chebyshev FM
cluster_e48f48efbc754e648ff6ac4316ab9bc9
HEA
4a41c79f3fdd491da90b0decfda824d7
0
7345ff801da74d1a8008a85406b0810f
RX(1.0*acos(x))
4a41c79f3fdd491da90b0decfda824d7--7345ff801da74d1a8008a85406b0810f
28666bd15f8f4c1e80edd218a006ca56
1
320c1f06a1994bd7ac63cdf87fb84873
RX(theta₀)
7345ff801da74d1a8008a85406b0810f--320c1f06a1994bd7ac63cdf87fb84873
f2f9260de7494d64b3d32e738a6eee30
RY(theta₄)
320c1f06a1994bd7ac63cdf87fb84873--f2f9260de7494d64b3d32e738a6eee30
19267e5c31a144e1b99ad066186c2f1d
RX(theta₈)
f2f9260de7494d64b3d32e738a6eee30--19267e5c31a144e1b99ad066186c2f1d
a196aa0db4f045199213d6a1306a69d3
19267e5c31a144e1b99ad066186c2f1d--a196aa0db4f045199213d6a1306a69d3
44be7bab45074e15accfe7c4dfa48842
a196aa0db4f045199213d6a1306a69d3--44be7bab45074e15accfe7c4dfa48842
4b27e454987b45ae9b0f4c823d561071
RX(theta₁₂)
44be7bab45074e15accfe7c4dfa48842--4b27e454987b45ae9b0f4c823d561071
ee2d4df2e20d4339a060bd374f463547
RY(theta₁₆)
4b27e454987b45ae9b0f4c823d561071--ee2d4df2e20d4339a060bd374f463547
b66a327f4d54452aa4f59962bccfaa41
RX(theta₂₀)
ee2d4df2e20d4339a060bd374f463547--b66a327f4d54452aa4f59962bccfaa41
8a58e93f50e341e2a90bf22e3e9ea05c
b66a327f4d54452aa4f59962bccfaa41--8a58e93f50e341e2a90bf22e3e9ea05c
f9e3a74467da4dae842b8514fd9af785
8a58e93f50e341e2a90bf22e3e9ea05c--f9e3a74467da4dae842b8514fd9af785
f89be34a12d64670b478fb384a603b64
f9e3a74467da4dae842b8514fd9af785--f89be34a12d64670b478fb384a603b64
7c8ccf6bda1542b5bef2b19dca1612e6
f89be34a12d64670b478fb384a603b64--7c8ccf6bda1542b5bef2b19dca1612e6
1b3a625b0a7b4a1c912dbeeafd31d1e1
ebf7a746760c492ebb38c405bad6702f
RX(2.0*acos(x))
28666bd15f8f4c1e80edd218a006ca56--ebf7a746760c492ebb38c405bad6702f
4d30c525d3a141729851645075839c08
2
0bee3ea59bd2488c9ba43adb54dba8d4
RX(theta₁)
ebf7a746760c492ebb38c405bad6702f--0bee3ea59bd2488c9ba43adb54dba8d4
a3b6504e652f439dba770d1586bc64c1
RY(theta₅)
0bee3ea59bd2488c9ba43adb54dba8d4--a3b6504e652f439dba770d1586bc64c1
3de4d3ec0efb418a9e34d59f9c7fc606
RX(theta₉)
a3b6504e652f439dba770d1586bc64c1--3de4d3ec0efb418a9e34d59f9c7fc606
5ee5a3812b814d75b10bd034a1a7600a
X
3de4d3ec0efb418a9e34d59f9c7fc606--5ee5a3812b814d75b10bd034a1a7600a
5ee5a3812b814d75b10bd034a1a7600a--a196aa0db4f045199213d6a1306a69d3
229c9925c3c947f5b3faa14e3430a0de
5ee5a3812b814d75b10bd034a1a7600a--229c9925c3c947f5b3faa14e3430a0de
d0cfe28b0c3d411ca80d6d60dfd14703
RX(theta₁₃)
229c9925c3c947f5b3faa14e3430a0de--d0cfe28b0c3d411ca80d6d60dfd14703
79606d4acb1a4f9783f4701748d4fb13
RY(theta₁₇)
d0cfe28b0c3d411ca80d6d60dfd14703--79606d4acb1a4f9783f4701748d4fb13
c24a4ed6548443e29042a7bd23e3730a
RX(theta₂₁)
79606d4acb1a4f9783f4701748d4fb13--c24a4ed6548443e29042a7bd23e3730a
4777b8d6fa36414b9a6ef51c0d24b933
X
c24a4ed6548443e29042a7bd23e3730a--4777b8d6fa36414b9a6ef51c0d24b933
4777b8d6fa36414b9a6ef51c0d24b933--8a58e93f50e341e2a90bf22e3e9ea05c
9653894d0c5340cb8461705b2f977bb0
4777b8d6fa36414b9a6ef51c0d24b933--9653894d0c5340cb8461705b2f977bb0
d8b3bf75fdf04aceb4c3be137afe4d65
AddBlock
9653894d0c5340cb8461705b2f977bb0--d8b3bf75fdf04aceb4c3be137afe4d65
d8b3bf75fdf04aceb4c3be137afe4d65--1b3a625b0a7b4a1c912dbeeafd31d1e1
419ea11b55814386b817fdaf0af72f17
a8a7bc70f74b4ccea5c2adbc875f4dc4
RX(1.0*acos(2.0*y - 1.0))
4d30c525d3a141729851645075839c08--a8a7bc70f74b4ccea5c2adbc875f4dc4
14586e4156fa401abe911789b7c130a1
3
82349aa283774a0393dcd09204bfca59
RX(theta₂)
a8a7bc70f74b4ccea5c2adbc875f4dc4--82349aa283774a0393dcd09204bfca59
cf24482c962f4ad7910dec4dd78c74f4
RY(theta₆)
82349aa283774a0393dcd09204bfca59--cf24482c962f4ad7910dec4dd78c74f4
e30f01303e824ddcbded5e8bdb0f32f2
RX(theta₁₀)
cf24482c962f4ad7910dec4dd78c74f4--e30f01303e824ddcbded5e8bdb0f32f2
ac072fa3bbc749be961e729671b84f1e
e30f01303e824ddcbded5e8bdb0f32f2--ac072fa3bbc749be961e729671b84f1e
2cb2be31708c4a6d9cc4668d7e784d1e
X
ac072fa3bbc749be961e729671b84f1e--2cb2be31708c4a6d9cc4668d7e784d1e
2cb2be31708c4a6d9cc4668d7e784d1e--229c9925c3c947f5b3faa14e3430a0de
25448ada93404808832f62033e6cf22c
RX(theta₁₄)
2cb2be31708c4a6d9cc4668d7e784d1e--25448ada93404808832f62033e6cf22c
49dfa0f5cdf0451db91c87611dc86070
RY(theta₁₈)
25448ada93404808832f62033e6cf22c--49dfa0f5cdf0451db91c87611dc86070
06cb6f81d4f94a97b4cafbf59dcf45ff
RX(theta₂₂)
49dfa0f5cdf0451db91c87611dc86070--06cb6f81d4f94a97b4cafbf59dcf45ff
dbf63d4bc80a454dbe339084c63616de
06cb6f81d4f94a97b4cafbf59dcf45ff--dbf63d4bc80a454dbe339084c63616de
ac77ea14837742019ba42b08cab03bc3
X
dbf63d4bc80a454dbe339084c63616de--ac77ea14837742019ba42b08cab03bc3
ac77ea14837742019ba42b08cab03bc3--9653894d0c5340cb8461705b2f977bb0
04df885f776c42e58661a05015f7ff1e
ac77ea14837742019ba42b08cab03bc3--04df885f776c42e58661a05015f7ff1e
04df885f776c42e58661a05015f7ff1e--419ea11b55814386b817fdaf0af72f17
3219296be33b4205ae9e41123768be6d
acdcac4a05c24566b97849abf34aef26
RX(2.0*acos(2.0*y - 1.0))
14586e4156fa401abe911789b7c130a1--acdcac4a05c24566b97849abf34aef26
1fd447ab24a64457b99cb2a09ab4a0a7
RX(theta₃)
acdcac4a05c24566b97849abf34aef26--1fd447ab24a64457b99cb2a09ab4a0a7
0ea1c77cd9b9448c85680c76e3b7aee1
RY(theta₇)
1fd447ab24a64457b99cb2a09ab4a0a7--0ea1c77cd9b9448c85680c76e3b7aee1
e878eca5b90c4edd9450a748dfed79c3
RX(theta₁₁)
0ea1c77cd9b9448c85680c76e3b7aee1--e878eca5b90c4edd9450a748dfed79c3
6a54019bd7f743dba5785cd87a904020
X
e878eca5b90c4edd9450a748dfed79c3--6a54019bd7f743dba5785cd87a904020
6a54019bd7f743dba5785cd87a904020--ac072fa3bbc749be961e729671b84f1e
bda609c1c4054cf29df95365dc7b182b
6a54019bd7f743dba5785cd87a904020--bda609c1c4054cf29df95365dc7b182b
5ddf09fd72cf49fb9c5702861aa6ebe5
RX(theta₁₅)
bda609c1c4054cf29df95365dc7b182b--5ddf09fd72cf49fb9c5702861aa6ebe5
7d5bfcd0ec174822a37740eb745b3aaa
RY(theta₁₉)
5ddf09fd72cf49fb9c5702861aa6ebe5--7d5bfcd0ec174822a37740eb745b3aaa
f69c252acf38475d83ea48a1076fd8d4
RX(theta₂₃)
7d5bfcd0ec174822a37740eb745b3aaa--f69c252acf38475d83ea48a1076fd8d4
e9ccbd3e68e845d695f37df4701255f4
X
f69c252acf38475d83ea48a1076fd8d4--e9ccbd3e68e845d695f37df4701255f4
e9ccbd3e68e845d695f37df4701255f4--dbf63d4bc80a454dbe339084c63616de
9a66cec28f3645dbaf2d0fcf32faac22
e9ccbd3e68e845d695f37df4701255f4--9a66cec28f3645dbaf2d0fcf32faac22
e52cd5a9960a425aafb9b9e28c367e38
9a66cec28f3645dbaf2d0fcf32faac22--e52cd5a9960a425aafb9b9e28c367e38
e52cd5a9960a425aafb9b9e28c367e38--3219296be33b4205ae9e41123768be6d