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_c1e5a758d0634debb926167de477fb8a
f223db3c924d4ffeaba373a95abd7666
0
31e4e10711124a77b877f152f471e21e
f223db3c924d4ffeaba373a95abd7666--31e4e10711124a77b877f152f471e21e
f03945071d614efd96d715ed1603e6ed
1
feffe1055bc14f5a8cfa2137cc69a5db
31e4e10711124a77b877f152f471e21e--feffe1055bc14f5a8cfa2137cc69a5db
c3176642a3c747b08a65d6c4dcb360c0
198cc5882a894ee8bc28cab96452f4fb
AddBlock
f03945071d614efd96d715ed1603e6ed--198cc5882a894ee8bc28cab96452f4fb
617e6d15420b43ff9789b23e991a2743
2
198cc5882a894ee8bc28cab96452f4fb--c3176642a3c747b08a65d6c4dcb360c0
f016e0985ce449a8bb3835f40dc6f5d6
593e292c3c264500989820be7b5836cc
617e6d15420b43ff9789b23e991a2743--593e292c3c264500989820be7b5836cc
56457159a89a4e8a9967e4eee1ca7396
3
593e292c3c264500989820be7b5836cc--f016e0985ce449a8bb3835f40dc6f5d6
66bf7a76ac614c5b80477f3367900f51
09f25cfdfb6847ca8e5f8e46727a543c
56457159a89a4e8a9967e4eee1ca7396--09f25cfdfb6847ca8e5f8e46727a543c
09f25cfdfb6847ca8e5f8e46727a543c--66bf7a76ac614c5b80477f3367900f51
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_9568d3c615c44756bd9d21154c0ba8f6
Tower Chebyshev FM
cluster_612f698092a349b0b0ed0909824180b2
Tower Chebyshev FM
c164f769fb024c6f910b35b2ce7b8b83
0
f0e102e13a7c4a3186ebdf59cc4adf38
RX(1.0*acos(x))
c164f769fb024c6f910b35b2ce7b8b83--f0e102e13a7c4a3186ebdf59cc4adf38
2824a60f76684c13a098d1f7ee30ff8f
1
48002cfe7b394cf7b0bdf2e87177670c
f0e102e13a7c4a3186ebdf59cc4adf38--48002cfe7b394cf7b0bdf2e87177670c
5ff2edb7c5bc4a1cad5acc46b2098a2c
df44047eac09470db4d1c2461c2b8c0a
RX(2.0*acos(x))
2824a60f76684c13a098d1f7ee30ff8f--df44047eac09470db4d1c2461c2b8c0a
fcb3338de69b416ab21fb94d9ca20a88
2
df44047eac09470db4d1c2461c2b8c0a--5ff2edb7c5bc4a1cad5acc46b2098a2c
5e775a8467214893a4deac79ca7dce66
c8a8ae27fd0f4aebb5f335363c9a580e
RX(1.0*acos(2.0*y - 1.0))
fcb3338de69b416ab21fb94d9ca20a88--c8a8ae27fd0f4aebb5f335363c9a580e
b72c88dd033341f19d8bc61e690dd61e
3
c8a8ae27fd0f4aebb5f335363c9a580e--5e775a8467214893a4deac79ca7dce66
06fe263bf61c40afb2bac5a51ed3b2d2
082c7079cab64958b052a039e8b6d4fa
RX(2.0*acos(2.0*y - 1.0))
b72c88dd033341f19d8bc61e690dd61e--082c7079cab64958b052a039e8b6d4fa
082c7079cab64958b052a039e8b6d4fa--06fe263bf61c40afb2bac5a51ed3b2d2
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
658f00491808477d95aa3abf279bc5c4
0
95a958e070a7437d80d6d1d1b5dc0a11
RX(theta₀)
658f00491808477d95aa3abf279bc5c4--95a958e070a7437d80d6d1d1b5dc0a11
0969b9704a3e4869b60797cad222ae4c
1
a75df66e26744a4fa7859ad2a7a86a76
RY(theta₄)
95a958e070a7437d80d6d1d1b5dc0a11--a75df66e26744a4fa7859ad2a7a86a76
fba10b7114a04e1fab3a01b19856bf7b
RX(theta₈)
a75df66e26744a4fa7859ad2a7a86a76--fba10b7114a04e1fab3a01b19856bf7b
8a217124af974e3e871bab43cf46093d
fba10b7114a04e1fab3a01b19856bf7b--8a217124af974e3e871bab43cf46093d
ad6fa7a12ba042a9874e81c0b44daadc
8a217124af974e3e871bab43cf46093d--ad6fa7a12ba042a9874e81c0b44daadc
fdec1083016b4ff891e90f319aeda108
RX(theta₁₂)
ad6fa7a12ba042a9874e81c0b44daadc--fdec1083016b4ff891e90f319aeda108
e578032d0256497f91c532fa577dd23b
RY(theta₁₆)
fdec1083016b4ff891e90f319aeda108--e578032d0256497f91c532fa577dd23b
2e45d843945e4195bff96dc25b17d175
RX(theta₂₀)
e578032d0256497f91c532fa577dd23b--2e45d843945e4195bff96dc25b17d175
b233a248e9854a988fb4d97d698392a0
2e45d843945e4195bff96dc25b17d175--b233a248e9854a988fb4d97d698392a0
37785b6ffa9e4e5b8894b65a4601ae8a
b233a248e9854a988fb4d97d698392a0--37785b6ffa9e4e5b8894b65a4601ae8a
0c97e40ac602429a83c03d572821e9ea
37785b6ffa9e4e5b8894b65a4601ae8a--0c97e40ac602429a83c03d572821e9ea
c8323d1a50f84be5908f34e1a5684f72
82100f6d62e840cba6aebcc5cdcd184b
RX(theta₁)
0969b9704a3e4869b60797cad222ae4c--82100f6d62e840cba6aebcc5cdcd184b
9b73d0e140e341599bea35e3c4fd526d
2
6f523ef932c0483a96c5e4ca8b2ede8a
RY(theta₅)
82100f6d62e840cba6aebcc5cdcd184b--6f523ef932c0483a96c5e4ca8b2ede8a
5380642cd25446aabfd3d23f040d0ffe
RX(theta₉)
6f523ef932c0483a96c5e4ca8b2ede8a--5380642cd25446aabfd3d23f040d0ffe
305143c4fd604533a79733932b016a09
X
5380642cd25446aabfd3d23f040d0ffe--305143c4fd604533a79733932b016a09
305143c4fd604533a79733932b016a09--8a217124af974e3e871bab43cf46093d
f0e522f46d9641e7b8b66df406ff4152
305143c4fd604533a79733932b016a09--f0e522f46d9641e7b8b66df406ff4152
5d9d2382f92745df96c6baee2e59ba65
RX(theta₁₃)
f0e522f46d9641e7b8b66df406ff4152--5d9d2382f92745df96c6baee2e59ba65
d50b8e17977e40fdafabe26c0c9e5dc5
RY(theta₁₇)
5d9d2382f92745df96c6baee2e59ba65--d50b8e17977e40fdafabe26c0c9e5dc5
22d1a8d0523f4e20978463c32796a266
RX(theta₂₁)
d50b8e17977e40fdafabe26c0c9e5dc5--22d1a8d0523f4e20978463c32796a266
52e06be574bf427db7ac1b0938084412
X
22d1a8d0523f4e20978463c32796a266--52e06be574bf427db7ac1b0938084412
52e06be574bf427db7ac1b0938084412--b233a248e9854a988fb4d97d698392a0
ecde93308da441dc8b585447e74c7174
52e06be574bf427db7ac1b0938084412--ecde93308da441dc8b585447e74c7174
ecde93308da441dc8b585447e74c7174--c8323d1a50f84be5908f34e1a5684f72
ff5946d00dc845318d4302c9f5c3702c
c454296cf68549779a16f53ad5e36e5e
RX(theta₂)
9b73d0e140e341599bea35e3c4fd526d--c454296cf68549779a16f53ad5e36e5e
e7d679c2454c40f7954c6cfa65657fc2
3
1aa3b72985a84af28ed493c92e3fd8d4
RY(theta₆)
c454296cf68549779a16f53ad5e36e5e--1aa3b72985a84af28ed493c92e3fd8d4
7a96dd2f4eca4308ae741ff3eaac10d4
RX(theta₁₀)
1aa3b72985a84af28ed493c92e3fd8d4--7a96dd2f4eca4308ae741ff3eaac10d4
7f58f1be4766451e916142ad77697b5e
7a96dd2f4eca4308ae741ff3eaac10d4--7f58f1be4766451e916142ad77697b5e
734cd90f81f54328b96365f840635c44
X
7f58f1be4766451e916142ad77697b5e--734cd90f81f54328b96365f840635c44
734cd90f81f54328b96365f840635c44--f0e522f46d9641e7b8b66df406ff4152
2e8b3908f9614a2fa8a92102420675a3
RX(theta₁₄)
734cd90f81f54328b96365f840635c44--2e8b3908f9614a2fa8a92102420675a3
d48a2b52899b41acad422f00ac42999f
RY(theta₁₈)
2e8b3908f9614a2fa8a92102420675a3--d48a2b52899b41acad422f00ac42999f
3947e2c11f86453399e3b89bb1b84a62
RX(theta₂₂)
d48a2b52899b41acad422f00ac42999f--3947e2c11f86453399e3b89bb1b84a62
2b6364d0ff6a4f3797d7f67422a58f22
3947e2c11f86453399e3b89bb1b84a62--2b6364d0ff6a4f3797d7f67422a58f22
c02a7464a485459b840412df3cdd6919
X
2b6364d0ff6a4f3797d7f67422a58f22--c02a7464a485459b840412df3cdd6919
c02a7464a485459b840412df3cdd6919--ecde93308da441dc8b585447e74c7174
c02a7464a485459b840412df3cdd6919--ff5946d00dc845318d4302c9f5c3702c
18a6e8f4dcc7453283a131b59738a008
e4152e60de804e13886099077ccaf1b4
RX(theta₃)
e7d679c2454c40f7954c6cfa65657fc2--e4152e60de804e13886099077ccaf1b4
41d7e72ec58c4541956f6ae59f41e219
RY(theta₇)
e4152e60de804e13886099077ccaf1b4--41d7e72ec58c4541956f6ae59f41e219
ef315455e96748948cb42fc06caeb53f
RX(theta₁₁)
41d7e72ec58c4541956f6ae59f41e219--ef315455e96748948cb42fc06caeb53f
33adb1eadcf54390b9c64cfe0a0c7970
X
ef315455e96748948cb42fc06caeb53f--33adb1eadcf54390b9c64cfe0a0c7970
33adb1eadcf54390b9c64cfe0a0c7970--7f58f1be4766451e916142ad77697b5e
ce51427738914c7dae0b62c954dfefee
33adb1eadcf54390b9c64cfe0a0c7970--ce51427738914c7dae0b62c954dfefee
0ecc703c6b1d45d69c05b23d5eac2c5d
RX(theta₁₅)
ce51427738914c7dae0b62c954dfefee--0ecc703c6b1d45d69c05b23d5eac2c5d
ddc3fd677aa148488eaa1a95fc196bc4
RY(theta₁₉)
0ecc703c6b1d45d69c05b23d5eac2c5d--ddc3fd677aa148488eaa1a95fc196bc4
a88c15c9c05049328b3eac54eb982244
RX(theta₂₃)
ddc3fd677aa148488eaa1a95fc196bc4--a88c15c9c05049328b3eac54eb982244
3caae4f94b9546a795eeffb03ba20de4
X
a88c15c9c05049328b3eac54eb982244--3caae4f94b9546a795eeffb03ba20de4
3caae4f94b9546a795eeffb03ba20de4--2b6364d0ff6a4f3797d7f67422a58f22
c2bdc931bb94447cb2fef66dc63971ac
3caae4f94b9546a795eeffb03ba20de4--c2bdc931bb94447cb2fef66dc63971ac
c2bdc931bb94447cb2fef66dc63971ac--18a6e8f4dcc7453283a131b59738a008
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_e6d2558af0294269a87104bf5cef4321
Obs.
cluster_049adb8beb6c4280b6a9eb1719cad93f
cluster_9a3edcd8000944deac8e01044ebd5559
Tower Chebyshev FM
cluster_47339768e6fe41b6a91f9aa0888b3ece
Tower Chebyshev FM
cluster_cf8db481e06742a28ae699810695870b
HEA
fcf686ba8ec341a0804d779965bff352
0
fa64c249aa8f4ff59b2fb773e0f5f37c
RX(1.0*acos(x))
fcf686ba8ec341a0804d779965bff352--fa64c249aa8f4ff59b2fb773e0f5f37c
edff79019c814afbb16198f5229778d9
1
9b190fc9455846f98f58c4b030bb85d5
RX(theta₀)
fa64c249aa8f4ff59b2fb773e0f5f37c--9b190fc9455846f98f58c4b030bb85d5
72eda3a39d01454389cae97a28a943d4
RY(theta₄)
9b190fc9455846f98f58c4b030bb85d5--72eda3a39d01454389cae97a28a943d4
101dd2dfd4ce4aa5a2e93fbce31c9c22
RX(theta₈)
72eda3a39d01454389cae97a28a943d4--101dd2dfd4ce4aa5a2e93fbce31c9c22
a5c8c6f07aed41df8386d55b2522ed71
101dd2dfd4ce4aa5a2e93fbce31c9c22--a5c8c6f07aed41df8386d55b2522ed71
36fd082986bb4acc8d24ba85c04d1802
a5c8c6f07aed41df8386d55b2522ed71--36fd082986bb4acc8d24ba85c04d1802
8ad6c07839334b0688f1e1a82d6925a5
RX(theta₁₂)
36fd082986bb4acc8d24ba85c04d1802--8ad6c07839334b0688f1e1a82d6925a5
1c70852d616f40c2b2df24da80d67780
RY(theta₁₆)
8ad6c07839334b0688f1e1a82d6925a5--1c70852d616f40c2b2df24da80d67780
c401e216dd414951ad992db7049c0872
RX(theta₂₀)
1c70852d616f40c2b2df24da80d67780--c401e216dd414951ad992db7049c0872
fa04bface6f74064adb5455b879d1649
c401e216dd414951ad992db7049c0872--fa04bface6f74064adb5455b879d1649
4bb35e9109d045478a085392b39b1beb
fa04bface6f74064adb5455b879d1649--4bb35e9109d045478a085392b39b1beb
3bff7af0415e4ecabba557576ac6f057
4bb35e9109d045478a085392b39b1beb--3bff7af0415e4ecabba557576ac6f057
d6c8c441ead24a8c85d669f29437a1b5
3bff7af0415e4ecabba557576ac6f057--d6c8c441ead24a8c85d669f29437a1b5
6ea7e76710f04bb5b86cc8c4fd1e6718
4e4320c062cf42e084b92b5ddf339f1f
RX(2.0*acos(x))
edff79019c814afbb16198f5229778d9--4e4320c062cf42e084b92b5ddf339f1f
a5cfaa4df1d148f2bd0505d2eb8c7013
2
12d0734ffa054fe5b672be88ce5aaf5c
RX(theta₁)
4e4320c062cf42e084b92b5ddf339f1f--12d0734ffa054fe5b672be88ce5aaf5c
9f0446d73dfe4d728fe49170b2abb2c8
RY(theta₅)
12d0734ffa054fe5b672be88ce5aaf5c--9f0446d73dfe4d728fe49170b2abb2c8
0fcc5342a93e462aa06d6f7e5a4c1311
RX(theta₉)
9f0446d73dfe4d728fe49170b2abb2c8--0fcc5342a93e462aa06d6f7e5a4c1311
8bdbf56159a34665837d1bed90ef507e
X
0fcc5342a93e462aa06d6f7e5a4c1311--8bdbf56159a34665837d1bed90ef507e
8bdbf56159a34665837d1bed90ef507e--a5c8c6f07aed41df8386d55b2522ed71
99704caaf7c34ed4a570e7df6832c4af
8bdbf56159a34665837d1bed90ef507e--99704caaf7c34ed4a570e7df6832c4af
63765db98f5e4312b8ac4164072404e8
RX(theta₁₃)
99704caaf7c34ed4a570e7df6832c4af--63765db98f5e4312b8ac4164072404e8
c3e5ce1a96b640a79476bd60039c1af5
RY(theta₁₇)
63765db98f5e4312b8ac4164072404e8--c3e5ce1a96b640a79476bd60039c1af5
b026f86c7d084b90a14ce24a2df64aff
RX(theta₂₁)
c3e5ce1a96b640a79476bd60039c1af5--b026f86c7d084b90a14ce24a2df64aff
a30875a5e4e54114a8b568eb2001aff6
X
b026f86c7d084b90a14ce24a2df64aff--a30875a5e4e54114a8b568eb2001aff6
a30875a5e4e54114a8b568eb2001aff6--fa04bface6f74064adb5455b879d1649
3597b8da175e4b8d83f38b17919596d8
a30875a5e4e54114a8b568eb2001aff6--3597b8da175e4b8d83f38b17919596d8
187c2908236f4b96b02879467dade176
AddBlock
3597b8da175e4b8d83f38b17919596d8--187c2908236f4b96b02879467dade176
187c2908236f4b96b02879467dade176--6ea7e76710f04bb5b86cc8c4fd1e6718
c0c737d4bbae44759a1169e236fd2285
d819c72f0bc94c0dbea2208fc1320455
RX(1.0*acos(2.0*y - 1.0))
a5cfaa4df1d148f2bd0505d2eb8c7013--d819c72f0bc94c0dbea2208fc1320455
ed0f62e6fd0a46dd8017e4d55d81641e
3
dfc8ab66b9b04f08a30f6a0592f3ad81
RX(theta₂)
d819c72f0bc94c0dbea2208fc1320455--dfc8ab66b9b04f08a30f6a0592f3ad81
72cb885eb4bf412080dd12f53449685d
RY(theta₆)
dfc8ab66b9b04f08a30f6a0592f3ad81--72cb885eb4bf412080dd12f53449685d
9166d96588a04853b2a12cb4a89191d9
RX(theta₁₀)
72cb885eb4bf412080dd12f53449685d--9166d96588a04853b2a12cb4a89191d9
52c730bda28148378baae959717ec3d2
9166d96588a04853b2a12cb4a89191d9--52c730bda28148378baae959717ec3d2
69c6a607fa5c4ad28c8d8fdf6392c9ec
X
52c730bda28148378baae959717ec3d2--69c6a607fa5c4ad28c8d8fdf6392c9ec
69c6a607fa5c4ad28c8d8fdf6392c9ec--99704caaf7c34ed4a570e7df6832c4af
1d9b1b6aa82744d9a2cef9802c7e2222
RX(theta₁₄)
69c6a607fa5c4ad28c8d8fdf6392c9ec--1d9b1b6aa82744d9a2cef9802c7e2222
891e54ddec024bd6aae638a7935e6955
RY(theta₁₈)
1d9b1b6aa82744d9a2cef9802c7e2222--891e54ddec024bd6aae638a7935e6955
85913fc3eaf845519b9f8f003788a138
RX(theta₂₂)
891e54ddec024bd6aae638a7935e6955--85913fc3eaf845519b9f8f003788a138
29d01de74d5049d0946ce2162f11438b
85913fc3eaf845519b9f8f003788a138--29d01de74d5049d0946ce2162f11438b
4bb66fd03cff42c789b029f73342687d
X
29d01de74d5049d0946ce2162f11438b--4bb66fd03cff42c789b029f73342687d
4bb66fd03cff42c789b029f73342687d--3597b8da175e4b8d83f38b17919596d8
f759a5b28989460baeb066e66f48753e
4bb66fd03cff42c789b029f73342687d--f759a5b28989460baeb066e66f48753e
f759a5b28989460baeb066e66f48753e--c0c737d4bbae44759a1169e236fd2285
09b8e11f2c284c03a48ac2784b812273
ff6075230d5b4cacb463d6897c0fc050
RX(2.0*acos(2.0*y - 1.0))
ed0f62e6fd0a46dd8017e4d55d81641e--ff6075230d5b4cacb463d6897c0fc050
867f5813065040f2b54e04990ccb395a
RX(theta₃)
ff6075230d5b4cacb463d6897c0fc050--867f5813065040f2b54e04990ccb395a
14d9fd6ed211492794c3f35386c8deac
RY(theta₇)
867f5813065040f2b54e04990ccb395a--14d9fd6ed211492794c3f35386c8deac
4fb2b3099d9a4bac9b82b79cc75e721a
RX(theta₁₁)
14d9fd6ed211492794c3f35386c8deac--4fb2b3099d9a4bac9b82b79cc75e721a
f45a4c4d777d4d13bf7977b37b101448
X
4fb2b3099d9a4bac9b82b79cc75e721a--f45a4c4d777d4d13bf7977b37b101448
f45a4c4d777d4d13bf7977b37b101448--52c730bda28148378baae959717ec3d2
5360dbd679504282a6714fcad64bdeab
f45a4c4d777d4d13bf7977b37b101448--5360dbd679504282a6714fcad64bdeab
fdac466a4f8f43588e9b516ae2921127
RX(theta₁₅)
5360dbd679504282a6714fcad64bdeab--fdac466a4f8f43588e9b516ae2921127
4047bdb09c4440828bd393e8c106c069
RY(theta₁₉)
fdac466a4f8f43588e9b516ae2921127--4047bdb09c4440828bd393e8c106c069
631c56a9f462417593ba5275972eaf95
RX(theta₂₃)
4047bdb09c4440828bd393e8c106c069--631c56a9f462417593ba5275972eaf95
afef56ac99cc4359932453d4da1140c9
X
631c56a9f462417593ba5275972eaf95--afef56ac99cc4359932453d4da1140c9
afef56ac99cc4359932453d4da1140c9--29d01de74d5049d0946ce2162f11438b
859dd239b5ce41acb6f83df916ee95e0
afef56ac99cc4359932453d4da1140c9--859dd239b5ce41acb6f83df916ee95e0
c77d5c23dde44f5e97cbdd9067165b28
859dd239b5ce41acb6f83df916ee95e0--c77d5c23dde44f5e97cbdd9067165b28
c77d5c23dde44f5e97cbdd9067165b28--09b8e11f2c284c03a48ac2784b812273