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_0fefe75090d84cef9af7da9bd2565bfe
3410afa6966b41a1a0433dd901ad4650
0
9a9bf91a96d84137b558869e3b4917fc
3410afa6966b41a1a0433dd901ad4650--9a9bf91a96d84137b558869e3b4917fc
20525c72b0384cb1bb372c8b0774eec5
1
72b89d2fe8df4bbcace722d45ebc3f46
9a9bf91a96d84137b558869e3b4917fc--72b89d2fe8df4bbcace722d45ebc3f46
20de5a619508482abeea8a23aaa024c1
e95a2c97b9ba48a3bae0afb923bf6dd6
AddBlock
20525c72b0384cb1bb372c8b0774eec5--e95a2c97b9ba48a3bae0afb923bf6dd6
4eb95c14a40b40ae840a890a08039780
2
e95a2c97b9ba48a3bae0afb923bf6dd6--20de5a619508482abeea8a23aaa024c1
4444f6be12ca4ffb92d49cc818b964b5
4dd18fe678ae42e49b7d157677d4fce0
4eb95c14a40b40ae840a890a08039780--4dd18fe678ae42e49b7d157677d4fce0
d20e254127b140c4a961b65e3c981858
3
4dd18fe678ae42e49b7d157677d4fce0--4444f6be12ca4ffb92d49cc818b964b5
2d3d4d695cf04606b6b6443c05fc5e51
4b132899085b489fb9bc6d529c8129d5
d20e254127b140c4a961b65e3c981858--4b132899085b489fb9bc6d529c8129d5
4b132899085b489fb9bc6d529c8129d5--2d3d4d695cf04606b6b6443c05fc5e51
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_a09f989c4e0144eb9e5f9be279234dfc
Tower Chebyshev FM
cluster_829cfada3b914cbea945103d22a39b9c
Tower Chebyshev FM
33b31052470d4393ac32ea9ac15641a0
0
533d3f60afb9412b987c71e211da637c
RX(1.0*acos(x))
33b31052470d4393ac32ea9ac15641a0--533d3f60afb9412b987c71e211da637c
bc4332c13382478694fc1974b6979605
1
7a0cf00f722342e7b6baa1e2b1c97f64
533d3f60afb9412b987c71e211da637c--7a0cf00f722342e7b6baa1e2b1c97f64
4ec4664824064a89b12e4f118ebc1160
c5e9ab460de7467093bcc3b727cf266b
RX(2.0*acos(x))
bc4332c13382478694fc1974b6979605--c5e9ab460de7467093bcc3b727cf266b
029eaabed7af44a6a3a3c69086165c01
2
c5e9ab460de7467093bcc3b727cf266b--4ec4664824064a89b12e4f118ebc1160
750531b9c0dd4756848d0ef1ce6cff7a
54ea485e6b1943829692587b3f4fd5c5
RX(1.0*acos(2.0*y - 1.0))
029eaabed7af44a6a3a3c69086165c01--54ea485e6b1943829692587b3f4fd5c5
50475882981a4dc28e65d14677189dd7
3
54ea485e6b1943829692587b3f4fd5c5--750531b9c0dd4756848d0ef1ce6cff7a
7a40483ec1ba49e3bee4589f0df611b0
c210f2de1eb64a2d9bc3cbda1903aeff
RX(2.0*acos(2.0*y - 1.0))
50475882981a4dc28e65d14677189dd7--c210f2de1eb64a2d9bc3cbda1903aeff
c210f2de1eb64a2d9bc3cbda1903aeff--7a40483ec1ba49e3bee4589f0df611b0
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
963aafb13a5d47da91c8ec482cb32d98
0
6f63209b565a4724a241d12245b65ca1
RX(theta₀)
963aafb13a5d47da91c8ec482cb32d98--6f63209b565a4724a241d12245b65ca1
4d9246f63bc44a5c900bbb9b00bd0178
1
0902229a40b14c049858e3a22f471e67
RY(theta₄)
6f63209b565a4724a241d12245b65ca1--0902229a40b14c049858e3a22f471e67
e573fab638ab4cc9adf67ff1f1d945c9
RX(theta₈)
0902229a40b14c049858e3a22f471e67--e573fab638ab4cc9adf67ff1f1d945c9
bdbfcce536214c7cbd70caef8470a4e3
e573fab638ab4cc9adf67ff1f1d945c9--bdbfcce536214c7cbd70caef8470a4e3
18bc4413a2a24e8b810c26871c17aa47
bdbfcce536214c7cbd70caef8470a4e3--18bc4413a2a24e8b810c26871c17aa47
c3cea064797c4002afcc290f55e2ebbc
RX(theta₁₂)
18bc4413a2a24e8b810c26871c17aa47--c3cea064797c4002afcc290f55e2ebbc
dc5d474ace884d2bb9dafa8e53e9da9b
RY(theta₁₆)
c3cea064797c4002afcc290f55e2ebbc--dc5d474ace884d2bb9dafa8e53e9da9b
2f68119f6dea42c4930bbcc3c6d38a29
RX(theta₂₀)
dc5d474ace884d2bb9dafa8e53e9da9b--2f68119f6dea42c4930bbcc3c6d38a29
dd04e4b07dbc44f4ac5ff92bf9d9270e
2f68119f6dea42c4930bbcc3c6d38a29--dd04e4b07dbc44f4ac5ff92bf9d9270e
2b00b8f8dd2541ad958a3ca432345cb7
dd04e4b07dbc44f4ac5ff92bf9d9270e--2b00b8f8dd2541ad958a3ca432345cb7
f4eb02c1c10b43adb6ea7c623392d474
2b00b8f8dd2541ad958a3ca432345cb7--f4eb02c1c10b43adb6ea7c623392d474
00e21179a3aa4171be2dc14e8ae72d61
b31fe8d9e150417b94b4525a0ccb8682
RX(theta₁)
4d9246f63bc44a5c900bbb9b00bd0178--b31fe8d9e150417b94b4525a0ccb8682
f8fc2aec5a0849c0b598d7f9956545b9
2
bb53f81029db43e38b7e8657065a97b1
RY(theta₅)
b31fe8d9e150417b94b4525a0ccb8682--bb53f81029db43e38b7e8657065a97b1
c65daab5051f4682bcd75b28eec146a5
RX(theta₉)
bb53f81029db43e38b7e8657065a97b1--c65daab5051f4682bcd75b28eec146a5
4e8e6cb6c04e4ac0a969359e216cb478
X
c65daab5051f4682bcd75b28eec146a5--4e8e6cb6c04e4ac0a969359e216cb478
4e8e6cb6c04e4ac0a969359e216cb478--bdbfcce536214c7cbd70caef8470a4e3
c0e97440c36943c4ace6f8d8d149424e
4e8e6cb6c04e4ac0a969359e216cb478--c0e97440c36943c4ace6f8d8d149424e
00fd701a631b41ec9d778cc5e5a1bf13
RX(theta₁₃)
c0e97440c36943c4ace6f8d8d149424e--00fd701a631b41ec9d778cc5e5a1bf13
d082126ce1aa403184739378568bc9b5
RY(theta₁₇)
00fd701a631b41ec9d778cc5e5a1bf13--d082126ce1aa403184739378568bc9b5
8f94125be2ff4bd7869cbce85438aac5
RX(theta₂₁)
d082126ce1aa403184739378568bc9b5--8f94125be2ff4bd7869cbce85438aac5
43397e1c07c34427b2e974a8a8339cba
X
8f94125be2ff4bd7869cbce85438aac5--43397e1c07c34427b2e974a8a8339cba
43397e1c07c34427b2e974a8a8339cba--dd04e4b07dbc44f4ac5ff92bf9d9270e
a1e090ad0ee24a74a47a65546d334f64
43397e1c07c34427b2e974a8a8339cba--a1e090ad0ee24a74a47a65546d334f64
a1e090ad0ee24a74a47a65546d334f64--00e21179a3aa4171be2dc14e8ae72d61
7c132cb762c34bde8ed7b719605beb16
0b0661b08abb4ce586b76a44df7e6cd7
RX(theta₂)
f8fc2aec5a0849c0b598d7f9956545b9--0b0661b08abb4ce586b76a44df7e6cd7
89837559a18549a6ac036a5afd61a3cb
3
a35c1cb3b95a4c2f8c56f50a7912ac60
RY(theta₆)
0b0661b08abb4ce586b76a44df7e6cd7--a35c1cb3b95a4c2f8c56f50a7912ac60
75222c9e27254329bf7063d543a7a4ff
RX(theta₁₀)
a35c1cb3b95a4c2f8c56f50a7912ac60--75222c9e27254329bf7063d543a7a4ff
74f0a198268d474db3056e149d95900e
75222c9e27254329bf7063d543a7a4ff--74f0a198268d474db3056e149d95900e
96eb6ace636f42fe8dca2f72415c25bb
X
74f0a198268d474db3056e149d95900e--96eb6ace636f42fe8dca2f72415c25bb
96eb6ace636f42fe8dca2f72415c25bb--c0e97440c36943c4ace6f8d8d149424e
49fc1859cb33463988b4edb91e475f6c
RX(theta₁₄)
96eb6ace636f42fe8dca2f72415c25bb--49fc1859cb33463988b4edb91e475f6c
74d471efde904c29a2325b105c0d17d0
RY(theta₁₈)
49fc1859cb33463988b4edb91e475f6c--74d471efde904c29a2325b105c0d17d0
f2c07d17da9f4ca1bdca918eba7c8200
RX(theta₂₂)
74d471efde904c29a2325b105c0d17d0--f2c07d17da9f4ca1bdca918eba7c8200
543e087ab7ec4a3da63f838f95d2913f
f2c07d17da9f4ca1bdca918eba7c8200--543e087ab7ec4a3da63f838f95d2913f
c9062bc42c114de2b88a6281aa530098
X
543e087ab7ec4a3da63f838f95d2913f--c9062bc42c114de2b88a6281aa530098
c9062bc42c114de2b88a6281aa530098--a1e090ad0ee24a74a47a65546d334f64
c9062bc42c114de2b88a6281aa530098--7c132cb762c34bde8ed7b719605beb16
71fe836c599d4412b8e6045693bfe553
55d7e0c91b264330a1b8978dc0a0614d
RX(theta₃)
89837559a18549a6ac036a5afd61a3cb--55d7e0c91b264330a1b8978dc0a0614d
d1d4ee7679074bfb85c17d6cf9f77431
RY(theta₇)
55d7e0c91b264330a1b8978dc0a0614d--d1d4ee7679074bfb85c17d6cf9f77431
015f272ba6344e9581b758644f5d8d7d
RX(theta₁₁)
d1d4ee7679074bfb85c17d6cf9f77431--015f272ba6344e9581b758644f5d8d7d
a160b50ddaf84c0f88b530fe9db7e8e1
X
015f272ba6344e9581b758644f5d8d7d--a160b50ddaf84c0f88b530fe9db7e8e1
a160b50ddaf84c0f88b530fe9db7e8e1--74f0a198268d474db3056e149d95900e
8e8c43cca11a49d5b1b2aae4790fca50
a160b50ddaf84c0f88b530fe9db7e8e1--8e8c43cca11a49d5b1b2aae4790fca50
3be47e03dd2b43be98eed7976550a200
RX(theta₁₅)
8e8c43cca11a49d5b1b2aae4790fca50--3be47e03dd2b43be98eed7976550a200
e4e3cdb1c2b44ff0bba4805ba92edc97
RY(theta₁₉)
3be47e03dd2b43be98eed7976550a200--e4e3cdb1c2b44ff0bba4805ba92edc97
b18d7f6f43d24c6cae90b06d793f400b
RX(theta₂₃)
e4e3cdb1c2b44ff0bba4805ba92edc97--b18d7f6f43d24c6cae90b06d793f400b
da995a37f9804fd8817521c2d1851c4c
X
b18d7f6f43d24c6cae90b06d793f400b--da995a37f9804fd8817521c2d1851c4c
da995a37f9804fd8817521c2d1851c4c--543e087ab7ec4a3da63f838f95d2913f
9418037346e240bebeed6d1e85664568
da995a37f9804fd8817521c2d1851c4c--9418037346e240bebeed6d1e85664568
9418037346e240bebeed6d1e85664568--71fe836c599d4412b8e6045693bfe553
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_79a16efc444241a688f2234a0921a2ab
Obs.
cluster_877aa0e9383648e3829da69454551faa
cluster_ad11a3324b8b4b90a0e8b0122d6c5936
Tower Chebyshev FM
cluster_b23061c6dd924d248b09d8562f09e7d9
Tower Chebyshev FM
cluster_093fa6d9585a4c759dd329dd93f814ab
HEA
579db9b9d6814d58960b7fcceb87c383
0
a4bc9465eedc484b9da3169bdcfa3195
RX(1.0*acos(x))
579db9b9d6814d58960b7fcceb87c383--a4bc9465eedc484b9da3169bdcfa3195
533c9f90cc4f45feb3006eb8f6537916
1
38a460b5eb0541d895db5c38837a1101
RX(theta₀)
a4bc9465eedc484b9da3169bdcfa3195--38a460b5eb0541d895db5c38837a1101
79a242f7d5854b4fb1916bda54ce4ade
RY(theta₄)
38a460b5eb0541d895db5c38837a1101--79a242f7d5854b4fb1916bda54ce4ade
9791daad172d46b5b72ae5b502e45b9d
RX(theta₈)
79a242f7d5854b4fb1916bda54ce4ade--9791daad172d46b5b72ae5b502e45b9d
6366b08c27bf41b495aee9f2fb8d1f78
9791daad172d46b5b72ae5b502e45b9d--6366b08c27bf41b495aee9f2fb8d1f78
941f32f0e0ae41a6baba9ae90201c277
6366b08c27bf41b495aee9f2fb8d1f78--941f32f0e0ae41a6baba9ae90201c277
bf4b2e3c45ea42359458c14d4200fdca
RX(theta₁₂)
941f32f0e0ae41a6baba9ae90201c277--bf4b2e3c45ea42359458c14d4200fdca
ab9997f3b9224613b22e655a9de02598
RY(theta₁₆)
bf4b2e3c45ea42359458c14d4200fdca--ab9997f3b9224613b22e655a9de02598
308bbb289b374a8189fa99d1d09294c6
RX(theta₂₀)
ab9997f3b9224613b22e655a9de02598--308bbb289b374a8189fa99d1d09294c6
17685dde6c1a452b85d4be69450b0014
308bbb289b374a8189fa99d1d09294c6--17685dde6c1a452b85d4be69450b0014
283092f27a754640a2b4e2cfe16af2c8
17685dde6c1a452b85d4be69450b0014--283092f27a754640a2b4e2cfe16af2c8
d937d4550c1646f9bd7c6b0b9da5ee09
283092f27a754640a2b4e2cfe16af2c8--d937d4550c1646f9bd7c6b0b9da5ee09
21f94b5d8d3c4a4f9eda3769ddf7655c
d937d4550c1646f9bd7c6b0b9da5ee09--21f94b5d8d3c4a4f9eda3769ddf7655c
638f72649c4c4cb0bdd30537854325f1
80be829f9bb747bf991f3109e964ad20
RX(2.0*acos(x))
533c9f90cc4f45feb3006eb8f6537916--80be829f9bb747bf991f3109e964ad20
3f32a5e375e04445b4e1f7d2a4fc4c65
2
8308e70cb5234871807a569833052376
RX(theta₁)
80be829f9bb747bf991f3109e964ad20--8308e70cb5234871807a569833052376
42652a399eec4223ad8e689ae5d41fab
RY(theta₅)
8308e70cb5234871807a569833052376--42652a399eec4223ad8e689ae5d41fab
4849b84bc21b46ddb090a525a8edf10a
RX(theta₉)
42652a399eec4223ad8e689ae5d41fab--4849b84bc21b46ddb090a525a8edf10a
0bd10fcbcc89472db8b6727eb5ee0e40
X
4849b84bc21b46ddb090a525a8edf10a--0bd10fcbcc89472db8b6727eb5ee0e40
0bd10fcbcc89472db8b6727eb5ee0e40--6366b08c27bf41b495aee9f2fb8d1f78
eb1a865dca444d77b870b1917b7b4b7e
0bd10fcbcc89472db8b6727eb5ee0e40--eb1a865dca444d77b870b1917b7b4b7e
a6e8fb592e5a47ac86837b8c07b8103e
RX(theta₁₃)
eb1a865dca444d77b870b1917b7b4b7e--a6e8fb592e5a47ac86837b8c07b8103e
ceb3a56ae8a24d6385f093e6e64c0f8d
RY(theta₁₇)
a6e8fb592e5a47ac86837b8c07b8103e--ceb3a56ae8a24d6385f093e6e64c0f8d
5202342810d546b9bc42afc964e18996
RX(theta₂₁)
ceb3a56ae8a24d6385f093e6e64c0f8d--5202342810d546b9bc42afc964e18996
dd2e968afae6487ea8fa523f30a9e4c4
X
5202342810d546b9bc42afc964e18996--dd2e968afae6487ea8fa523f30a9e4c4
dd2e968afae6487ea8fa523f30a9e4c4--17685dde6c1a452b85d4be69450b0014
dd5dc3bd761049058487b4b4fd4a3d29
dd2e968afae6487ea8fa523f30a9e4c4--dd5dc3bd761049058487b4b4fd4a3d29
70bf2062198f48128e50261e979309a6
AddBlock
dd5dc3bd761049058487b4b4fd4a3d29--70bf2062198f48128e50261e979309a6
70bf2062198f48128e50261e979309a6--638f72649c4c4cb0bdd30537854325f1
39acbb168a4049ccb9d752897e500b12
98841fca5d0b403294c84a29e0ba0b9a
RX(1.0*acos(2.0*y - 1.0))
3f32a5e375e04445b4e1f7d2a4fc4c65--98841fca5d0b403294c84a29e0ba0b9a
f2294fc82ac3439c82252a6ae92d7f30
3
3cab25faf3de4e95a55d085592b0b3c5
RX(theta₂)
98841fca5d0b403294c84a29e0ba0b9a--3cab25faf3de4e95a55d085592b0b3c5
f929ef0cbbf8488cae62009dbf205040
RY(theta₆)
3cab25faf3de4e95a55d085592b0b3c5--f929ef0cbbf8488cae62009dbf205040
03bb75d1e6384aa48544a43edc259111
RX(theta₁₀)
f929ef0cbbf8488cae62009dbf205040--03bb75d1e6384aa48544a43edc259111
38e626d458f446da8ec3c26dc3f12ccf
03bb75d1e6384aa48544a43edc259111--38e626d458f446da8ec3c26dc3f12ccf
8341a8e2c01f4f92a1e14c0f273c7a8b
X
38e626d458f446da8ec3c26dc3f12ccf--8341a8e2c01f4f92a1e14c0f273c7a8b
8341a8e2c01f4f92a1e14c0f273c7a8b--eb1a865dca444d77b870b1917b7b4b7e
d396a6355807473f861c83f38909b3e1
RX(theta₁₄)
8341a8e2c01f4f92a1e14c0f273c7a8b--d396a6355807473f861c83f38909b3e1
c35950f5337845ddacf7f2302f163736
RY(theta₁₈)
d396a6355807473f861c83f38909b3e1--c35950f5337845ddacf7f2302f163736
3598a6c84b224c888e38a3af1f5d862b
RX(theta₂₂)
c35950f5337845ddacf7f2302f163736--3598a6c84b224c888e38a3af1f5d862b
8fe3827af29d45adbee6b8358e86a776
3598a6c84b224c888e38a3af1f5d862b--8fe3827af29d45adbee6b8358e86a776
4ca33204f39b4c439dde62dfec5bd425
X
8fe3827af29d45adbee6b8358e86a776--4ca33204f39b4c439dde62dfec5bd425
4ca33204f39b4c439dde62dfec5bd425--dd5dc3bd761049058487b4b4fd4a3d29
d6140f4b48844c60852ca5f61601e879
4ca33204f39b4c439dde62dfec5bd425--d6140f4b48844c60852ca5f61601e879
d6140f4b48844c60852ca5f61601e879--39acbb168a4049ccb9d752897e500b12
e10be73a165a408bb2ab47c90ba1ac27
314e087e91564358abb9ff60464c5bac
RX(2.0*acos(2.0*y - 1.0))
f2294fc82ac3439c82252a6ae92d7f30--314e087e91564358abb9ff60464c5bac
1543150a98a34eb2b43e5964ecf4be06
RX(theta₃)
314e087e91564358abb9ff60464c5bac--1543150a98a34eb2b43e5964ecf4be06
ff54c2ab34c1407ea564ece900f48a47
RY(theta₇)
1543150a98a34eb2b43e5964ecf4be06--ff54c2ab34c1407ea564ece900f48a47
8f35b9b999ce4402a2beaa9a9489f89e
RX(theta₁₁)
ff54c2ab34c1407ea564ece900f48a47--8f35b9b999ce4402a2beaa9a9489f89e
2675569f54ad416a82a6373a76ecd940
X
8f35b9b999ce4402a2beaa9a9489f89e--2675569f54ad416a82a6373a76ecd940
2675569f54ad416a82a6373a76ecd940--38e626d458f446da8ec3c26dc3f12ccf
9811e8e9c0944822a53c37a22420160e
2675569f54ad416a82a6373a76ecd940--9811e8e9c0944822a53c37a22420160e
3ef29766f9b346ee96f73c138aee4c66
RX(theta₁₅)
9811e8e9c0944822a53c37a22420160e--3ef29766f9b346ee96f73c138aee4c66
0b4fd58b98ce4c51b9f486a6f62f5ce1
RY(theta₁₉)
3ef29766f9b346ee96f73c138aee4c66--0b4fd58b98ce4c51b9f486a6f62f5ce1
2019ef9c2d824812b073ca61def3f306
RX(theta₂₃)
0b4fd58b98ce4c51b9f486a6f62f5ce1--2019ef9c2d824812b073ca61def3f306
f4e18de4e4644a3bacf04a64e1bda688
X
2019ef9c2d824812b073ca61def3f306--f4e18de4e4644a3bacf04a64e1bda688
f4e18de4e4644a3bacf04a64e1bda688--8fe3827af29d45adbee6b8358e86a776
2216c7ee97184998893e94f5909f2afe
f4e18de4e4644a3bacf04a64e1bda688--2216c7ee97184998893e94f5909f2afe
16dfff26de2c46608d7755f22655e08d
2216c7ee97184998893e94f5909f2afe--16dfff26de2c46608d7755f22655e08d
16dfff26de2c46608d7755f22655e08d--e10be73a165a408bb2ab47c90ba1ac27