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_13f4726a0cac40c7bd7436432b04074f
6c7d9820f9d54606b264a44eb5a7383d
0
be8445df8c974f9fa3c5df43129b1b27
6c7d9820f9d54606b264a44eb5a7383d--be8445df8c974f9fa3c5df43129b1b27
5e59379050c048b4832f5f8d4dc6945e
1
435463f50cae4be1828bd1a2708de5d4
be8445df8c974f9fa3c5df43129b1b27--435463f50cae4be1828bd1a2708de5d4
c6ccc7413f404134b5ba20d3e9e6a1e1
abb4f60cfe38427dbf7151db67a41a87
AddBlock
5e59379050c048b4832f5f8d4dc6945e--abb4f60cfe38427dbf7151db67a41a87
013bcc9fd3304c1a90c0f239ae04197f
2
abb4f60cfe38427dbf7151db67a41a87--c6ccc7413f404134b5ba20d3e9e6a1e1
36d5cbd07b004759b8a5b026a67f0fcc
05e84c7a3b1748b492dd0d1f074c7475
013bcc9fd3304c1a90c0f239ae04197f--05e84c7a3b1748b492dd0d1f074c7475
6752b328e8b14cf6aa8da61a5148a57c
3
05e84c7a3b1748b492dd0d1f074c7475--36d5cbd07b004759b8a5b026a67f0fcc
9f8ec2827a9a48aabd5d100a014716cd
11f201402dd246a9b076f613e58d71ed
6752b328e8b14cf6aa8da61a5148a57c--11f201402dd246a9b076f613e58d71ed
11f201402dd246a9b076f613e58d71ed--9f8ec2827a9a48aabd5d100a014716cd
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_113f2badd7b445d88c4acc1c7beef179
Tower Chebyshev FM
cluster_5140640b8f9f4cf18700304b44b656da
Tower Chebyshev FM
bc5f604bd98d49798a65bc7c4c9bae26
0
3ec926e9adfa42b28a011d5456383e18
RX(1.0*acos(x))
bc5f604bd98d49798a65bc7c4c9bae26--3ec926e9adfa42b28a011d5456383e18
ac61b1dbfeb940a0b23c7204845bd7d1
1
70681db6612840199024f4c019643d6d
3ec926e9adfa42b28a011d5456383e18--70681db6612840199024f4c019643d6d
fcf48dc0ee364bc79070f2bbaf2bf740
2cb18ea83eb346f68161cf203a87c4a9
RX(2.0*acos(x))
ac61b1dbfeb940a0b23c7204845bd7d1--2cb18ea83eb346f68161cf203a87c4a9
34e937d8486448599a8187bb599f92d3
2
2cb18ea83eb346f68161cf203a87c4a9--fcf48dc0ee364bc79070f2bbaf2bf740
2eac24cb9ea346fcbe0235c098b4d5ec
d9743b59c247444cb1a16f6b04c1228f
RX(1.0*acos(2.0*y - 1.0))
34e937d8486448599a8187bb599f92d3--d9743b59c247444cb1a16f6b04c1228f
06785fa615ad4a7996e56eb47adb11a3
3
d9743b59c247444cb1a16f6b04c1228f--2eac24cb9ea346fcbe0235c098b4d5ec
327d63237fb44e73a4c3a15c4f86f0a4
de6b6e85e6d34d058acc0de7412c9b13
RX(2.0*acos(2.0*y - 1.0))
06785fa615ad4a7996e56eb47adb11a3--de6b6e85e6d34d058acc0de7412c9b13
de6b6e85e6d34d058acc0de7412c9b13--327d63237fb44e73a4c3a15c4f86f0a4
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
1d6fc8382eb2418ab590db6c19857ae4
0
fd854cc5b33f4d1a86f8463657825fbe
RX(theta₀)
1d6fc8382eb2418ab590db6c19857ae4--fd854cc5b33f4d1a86f8463657825fbe
3b8e808cfdca4f14a3a5ad3f814780d7
1
677dff9ded2e45b89b40a4ccca66f2ee
RY(theta₄)
fd854cc5b33f4d1a86f8463657825fbe--677dff9ded2e45b89b40a4ccca66f2ee
a8c90d6fb0b144f88ad3022fab791b7a
RX(theta₈)
677dff9ded2e45b89b40a4ccca66f2ee--a8c90d6fb0b144f88ad3022fab791b7a
b720c0c395e94542b68a8bb415ba3008
a8c90d6fb0b144f88ad3022fab791b7a--b720c0c395e94542b68a8bb415ba3008
9c6f29b57b20495e8d363441d7aef273
b720c0c395e94542b68a8bb415ba3008--9c6f29b57b20495e8d363441d7aef273
c46a8c43fb6f4f9db64d547d189a051d
RX(theta₁₂)
9c6f29b57b20495e8d363441d7aef273--c46a8c43fb6f4f9db64d547d189a051d
b1f22018e0174847a264018c43c25f7a
RY(theta₁₆)
c46a8c43fb6f4f9db64d547d189a051d--b1f22018e0174847a264018c43c25f7a
50448241e06f4bb6aed9d224f4ae2be9
RX(theta₂₀)
b1f22018e0174847a264018c43c25f7a--50448241e06f4bb6aed9d224f4ae2be9
0062b3c1772b4d57ae3901d222b15e9e
50448241e06f4bb6aed9d224f4ae2be9--0062b3c1772b4d57ae3901d222b15e9e
0a812b121c754c54861f8e8a5903c483
0062b3c1772b4d57ae3901d222b15e9e--0a812b121c754c54861f8e8a5903c483
0dab95a7f9ce4d7e9f6b4a846fa90376
0a812b121c754c54861f8e8a5903c483--0dab95a7f9ce4d7e9f6b4a846fa90376
f45042eb0bb24f8f8bf5f53e8cbaa489
b2ddbaa3505d4175ba8e6c7a33baad81
RX(theta₁)
3b8e808cfdca4f14a3a5ad3f814780d7--b2ddbaa3505d4175ba8e6c7a33baad81
d78be058e3b04c519305c68ff77815f3
2
8b2aa2c205a348a589e4454e07815333
RY(theta₅)
b2ddbaa3505d4175ba8e6c7a33baad81--8b2aa2c205a348a589e4454e07815333
5bcbf7e128ff4a91bc1c201831cd5422
RX(theta₉)
8b2aa2c205a348a589e4454e07815333--5bcbf7e128ff4a91bc1c201831cd5422
9a6eb33b46e846f982c69f3467a5d714
X
5bcbf7e128ff4a91bc1c201831cd5422--9a6eb33b46e846f982c69f3467a5d714
9a6eb33b46e846f982c69f3467a5d714--b720c0c395e94542b68a8bb415ba3008
03f36db9a8d14796b03d3ca826be2a4e
9a6eb33b46e846f982c69f3467a5d714--03f36db9a8d14796b03d3ca826be2a4e
e40cf9b1003f4777aa5cd84294d143c4
RX(theta₁₃)
03f36db9a8d14796b03d3ca826be2a4e--e40cf9b1003f4777aa5cd84294d143c4
7a3e5501efdb4be98a630a28f5e0b7d6
RY(theta₁₇)
e40cf9b1003f4777aa5cd84294d143c4--7a3e5501efdb4be98a630a28f5e0b7d6
2ec4363fd7c14633bba2d9f69b74ce10
RX(theta₂₁)
7a3e5501efdb4be98a630a28f5e0b7d6--2ec4363fd7c14633bba2d9f69b74ce10
f8d26f1e6f8940ef9958d5e82e12297d
X
2ec4363fd7c14633bba2d9f69b74ce10--f8d26f1e6f8940ef9958d5e82e12297d
f8d26f1e6f8940ef9958d5e82e12297d--0062b3c1772b4d57ae3901d222b15e9e
789db5e104704f64b6fffc92e5e15cca
f8d26f1e6f8940ef9958d5e82e12297d--789db5e104704f64b6fffc92e5e15cca
789db5e104704f64b6fffc92e5e15cca--f45042eb0bb24f8f8bf5f53e8cbaa489
e1a37c6e67424910a046f6f6beb6485d
8d789813fdc44f808a2184eb326292d9
RX(theta₂)
d78be058e3b04c519305c68ff77815f3--8d789813fdc44f808a2184eb326292d9
655399ababa8405fab1838b0cd8e03f5
3
1c4d5c8845b748ff88771012535e3e53
RY(theta₆)
8d789813fdc44f808a2184eb326292d9--1c4d5c8845b748ff88771012535e3e53
3f4e9f297ca24144be6e2ee4885b698a
RX(theta₁₀)
1c4d5c8845b748ff88771012535e3e53--3f4e9f297ca24144be6e2ee4885b698a
0028096e3fd3455faa6255a850911ffc
3f4e9f297ca24144be6e2ee4885b698a--0028096e3fd3455faa6255a850911ffc
3678b5fff8fa41649724cbf976be6a8d
X
0028096e3fd3455faa6255a850911ffc--3678b5fff8fa41649724cbf976be6a8d
3678b5fff8fa41649724cbf976be6a8d--03f36db9a8d14796b03d3ca826be2a4e
d64137c701624e1082baec7f0141fdf5
RX(theta₁₄)
3678b5fff8fa41649724cbf976be6a8d--d64137c701624e1082baec7f0141fdf5
f17dd742c8db474e9782d7dd4957b561
RY(theta₁₈)
d64137c701624e1082baec7f0141fdf5--f17dd742c8db474e9782d7dd4957b561
1aa30fca5d4b429a8e4cff55753aca1d
RX(theta₂₂)
f17dd742c8db474e9782d7dd4957b561--1aa30fca5d4b429a8e4cff55753aca1d
6c2921d38ff94456ac511be82fac3ca8
1aa30fca5d4b429a8e4cff55753aca1d--6c2921d38ff94456ac511be82fac3ca8
5aa75f84d3ae469da2a13f4c5e5a9892
X
6c2921d38ff94456ac511be82fac3ca8--5aa75f84d3ae469da2a13f4c5e5a9892
5aa75f84d3ae469da2a13f4c5e5a9892--789db5e104704f64b6fffc92e5e15cca
5aa75f84d3ae469da2a13f4c5e5a9892--e1a37c6e67424910a046f6f6beb6485d
241aede1334c4976810dccc28ce24d57
beb2ff8a02b14e79b641ca1e66714f3c
RX(theta₃)
655399ababa8405fab1838b0cd8e03f5--beb2ff8a02b14e79b641ca1e66714f3c
0ba2dac77fd141a9a8733f481e3ef572
RY(theta₇)
beb2ff8a02b14e79b641ca1e66714f3c--0ba2dac77fd141a9a8733f481e3ef572
393f25410b1b488cb42c0e734b3397ec
RX(theta₁₁)
0ba2dac77fd141a9a8733f481e3ef572--393f25410b1b488cb42c0e734b3397ec
6cbd7c9dbe814d3db3196e5eb6bda7a5
X
393f25410b1b488cb42c0e734b3397ec--6cbd7c9dbe814d3db3196e5eb6bda7a5
6cbd7c9dbe814d3db3196e5eb6bda7a5--0028096e3fd3455faa6255a850911ffc
59869a5fa15e4e4c9d9db33217c04dbc
6cbd7c9dbe814d3db3196e5eb6bda7a5--59869a5fa15e4e4c9d9db33217c04dbc
08be19b99c06411281c7e701a67ee35b
RX(theta₁₅)
59869a5fa15e4e4c9d9db33217c04dbc--08be19b99c06411281c7e701a67ee35b
cd8ff4af83764bcea5ee883b095de42f
RY(theta₁₉)
08be19b99c06411281c7e701a67ee35b--cd8ff4af83764bcea5ee883b095de42f
94191541093a49fe84c07e2efaf324bf
RX(theta₂₃)
cd8ff4af83764bcea5ee883b095de42f--94191541093a49fe84c07e2efaf324bf
c07e5678f5e949e082df86e3b93cbeab
X
94191541093a49fe84c07e2efaf324bf--c07e5678f5e949e082df86e3b93cbeab
c07e5678f5e949e082df86e3b93cbeab--6c2921d38ff94456ac511be82fac3ca8
81b82c241c114cbd8c69e26b6487aaf9
c07e5678f5e949e082df86e3b93cbeab--81b82c241c114cbd8c69e26b6487aaf9
81b82c241c114cbd8c69e26b6487aaf9--241aede1334c4976810dccc28ce24d57
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_5dab52e6156b44d394a673899c2a6245
Obs.
cluster_57c09f020d574c1187c62d3c4e0d0411
cluster_a5bfdcb5220a4d7f917560648e86bbae
Tower Chebyshev FM
cluster_f7270bb0c4c4495aa899d014410d1a2c
Tower Chebyshev FM
cluster_45ac531800654002abcda8e4cf6f7d92
HEA
4153be9fcae64c74a915e355cab01f56
0
0ccf554e8e344909aa3a6cb8f2d67b79
RX(1.0*acos(x))
4153be9fcae64c74a915e355cab01f56--0ccf554e8e344909aa3a6cb8f2d67b79
f3b59fcc461346fab146a58e6351fde8
1
ef6c29ff41174bb6b55f26fe151a37ed
RX(theta₀)
0ccf554e8e344909aa3a6cb8f2d67b79--ef6c29ff41174bb6b55f26fe151a37ed
d919f9ef6f00444aa66441afbc5d1068
RY(theta₄)
ef6c29ff41174bb6b55f26fe151a37ed--d919f9ef6f00444aa66441afbc5d1068
c3c3db6304d1417c81fb5c5bf636fef7
RX(theta₈)
d919f9ef6f00444aa66441afbc5d1068--c3c3db6304d1417c81fb5c5bf636fef7
92d373ec1039481b8faf5a97c43cf496
c3c3db6304d1417c81fb5c5bf636fef7--92d373ec1039481b8faf5a97c43cf496
c5739b256b854703b59883050ef6108c
92d373ec1039481b8faf5a97c43cf496--c5739b256b854703b59883050ef6108c
e93503fa159448408d91b649a539a5d8
RX(theta₁₂)
c5739b256b854703b59883050ef6108c--e93503fa159448408d91b649a539a5d8
e5953805e4274cc68c3aa748a99f2734
RY(theta₁₆)
e93503fa159448408d91b649a539a5d8--e5953805e4274cc68c3aa748a99f2734
881ca58d7be941b98e93ee0dd2da4761
RX(theta₂₀)
e5953805e4274cc68c3aa748a99f2734--881ca58d7be941b98e93ee0dd2da4761
ec67dd65a5074799a753953f9d6dd32f
881ca58d7be941b98e93ee0dd2da4761--ec67dd65a5074799a753953f9d6dd32f
fb004cbcd2754590b8df9579897c4722
ec67dd65a5074799a753953f9d6dd32f--fb004cbcd2754590b8df9579897c4722
93b4058232404e2a8fe86fd95138d34e
fb004cbcd2754590b8df9579897c4722--93b4058232404e2a8fe86fd95138d34e
21c8cdde90624135adb26ae571092caf
93b4058232404e2a8fe86fd95138d34e--21c8cdde90624135adb26ae571092caf
d9a7b45acbb5460d8eb7e2690c967adb
991d4e3571db46c5b416966736073635
RX(2.0*acos(x))
f3b59fcc461346fab146a58e6351fde8--991d4e3571db46c5b416966736073635
c9d1288229114bb9880ea2b69ec90040
2
8b66366305b440d183556e6e324e080f
RX(theta₁)
991d4e3571db46c5b416966736073635--8b66366305b440d183556e6e324e080f
6409aae372614a6ea967449dcff41102
RY(theta₅)
8b66366305b440d183556e6e324e080f--6409aae372614a6ea967449dcff41102
7cee038e5e1249679e5708a323792bcb
RX(theta₉)
6409aae372614a6ea967449dcff41102--7cee038e5e1249679e5708a323792bcb
fc2c0adc45dd4f08bdc99505b9f5516d
X
7cee038e5e1249679e5708a323792bcb--fc2c0adc45dd4f08bdc99505b9f5516d
fc2c0adc45dd4f08bdc99505b9f5516d--92d373ec1039481b8faf5a97c43cf496
c38aa648741b48c0ae84e5ab490e1ffe
fc2c0adc45dd4f08bdc99505b9f5516d--c38aa648741b48c0ae84e5ab490e1ffe
e10852fe5d6b4d978362b612b14e9d5e
RX(theta₁₃)
c38aa648741b48c0ae84e5ab490e1ffe--e10852fe5d6b4d978362b612b14e9d5e
fea06a6edc934c45b4effb545317a67e
RY(theta₁₇)
e10852fe5d6b4d978362b612b14e9d5e--fea06a6edc934c45b4effb545317a67e
7b0728bcddcb42668642906e39a4ebc0
RX(theta₂₁)
fea06a6edc934c45b4effb545317a67e--7b0728bcddcb42668642906e39a4ebc0
f50843b1f3134fd7a6b3209917fed4ca
X
7b0728bcddcb42668642906e39a4ebc0--f50843b1f3134fd7a6b3209917fed4ca
f50843b1f3134fd7a6b3209917fed4ca--ec67dd65a5074799a753953f9d6dd32f
ea2978adb0904bcba6e321227d6cb039
f50843b1f3134fd7a6b3209917fed4ca--ea2978adb0904bcba6e321227d6cb039
7610b252de6e4727a83e465f6dc595df
AddBlock
ea2978adb0904bcba6e321227d6cb039--7610b252de6e4727a83e465f6dc595df
7610b252de6e4727a83e465f6dc595df--d9a7b45acbb5460d8eb7e2690c967adb
a19a4de02fa84e1fb510f15066963510
c72bdebef68b488c91902b74aad505dc
RX(1.0*acos(2.0*y - 1.0))
c9d1288229114bb9880ea2b69ec90040--c72bdebef68b488c91902b74aad505dc
9f9e73794efb4af183ce038df9ae89c8
3
0d065ee98c184aad8bcf476fc5287c06
RX(theta₂)
c72bdebef68b488c91902b74aad505dc--0d065ee98c184aad8bcf476fc5287c06
810533759632401581b022350d1e7e36
RY(theta₆)
0d065ee98c184aad8bcf476fc5287c06--810533759632401581b022350d1e7e36
985d7aedb7a3406f81054c80c9d9f34a
RX(theta₁₀)
810533759632401581b022350d1e7e36--985d7aedb7a3406f81054c80c9d9f34a
645c3cf296ba4bb7b0ae7e45288a54fb
985d7aedb7a3406f81054c80c9d9f34a--645c3cf296ba4bb7b0ae7e45288a54fb
6a188f0a04674996a1eef9d5f586b037
X
645c3cf296ba4bb7b0ae7e45288a54fb--6a188f0a04674996a1eef9d5f586b037
6a188f0a04674996a1eef9d5f586b037--c38aa648741b48c0ae84e5ab490e1ffe
0c923bbba5db454cb82be8530261ed06
RX(theta₁₄)
6a188f0a04674996a1eef9d5f586b037--0c923bbba5db454cb82be8530261ed06
0f32abdb7ca14c8a8382defbe8d3e8a0
RY(theta₁₈)
0c923bbba5db454cb82be8530261ed06--0f32abdb7ca14c8a8382defbe8d3e8a0
a8ddfc61359646c0acef833767c00698
RX(theta₂₂)
0f32abdb7ca14c8a8382defbe8d3e8a0--a8ddfc61359646c0acef833767c00698
2d130a33a3bf467c951f888fe4207635
a8ddfc61359646c0acef833767c00698--2d130a33a3bf467c951f888fe4207635
56aeab0547dd4cd08bdffc74cd5f9925
X
2d130a33a3bf467c951f888fe4207635--56aeab0547dd4cd08bdffc74cd5f9925
56aeab0547dd4cd08bdffc74cd5f9925--ea2978adb0904bcba6e321227d6cb039
8691eac467e84461bd2f6244629d5684
56aeab0547dd4cd08bdffc74cd5f9925--8691eac467e84461bd2f6244629d5684
8691eac467e84461bd2f6244629d5684--a19a4de02fa84e1fb510f15066963510
b74b782a555d4460b510045fb34eb7e8
8d297d9d3d4c44dc8e297cbee297dcda
RX(2.0*acos(2.0*y - 1.0))
9f9e73794efb4af183ce038df9ae89c8--8d297d9d3d4c44dc8e297cbee297dcda
9c34f3d735cb460a8b528a9f1e6d928e
RX(theta₃)
8d297d9d3d4c44dc8e297cbee297dcda--9c34f3d735cb460a8b528a9f1e6d928e
dbb25ea945f34ce1bbea866c0c3d8e27
RY(theta₇)
9c34f3d735cb460a8b528a9f1e6d928e--dbb25ea945f34ce1bbea866c0c3d8e27
82303f99ba374a918bb990bced25b3d3
RX(theta₁₁)
dbb25ea945f34ce1bbea866c0c3d8e27--82303f99ba374a918bb990bced25b3d3
284df9024d3042f7bb110ff89cebfef4
X
82303f99ba374a918bb990bced25b3d3--284df9024d3042f7bb110ff89cebfef4
284df9024d3042f7bb110ff89cebfef4--645c3cf296ba4bb7b0ae7e45288a54fb
a30d75dacc1e430fa1e5775813df37a9
284df9024d3042f7bb110ff89cebfef4--a30d75dacc1e430fa1e5775813df37a9
8ead45be5bdf4ecb8641e929b7b26776
RX(theta₁₅)
a30d75dacc1e430fa1e5775813df37a9--8ead45be5bdf4ecb8641e929b7b26776
8478d40c95f84bee898e047f7dd9c960
RY(theta₁₉)
8ead45be5bdf4ecb8641e929b7b26776--8478d40c95f84bee898e047f7dd9c960
d997de94af534618943ac4b56877b609
RX(theta₂₃)
8478d40c95f84bee898e047f7dd9c960--d997de94af534618943ac4b56877b609
ffe4767d096041f4a909c7f9dae8fd8e
X
d997de94af534618943ac4b56877b609--ffe4767d096041f4a909c7f9dae8fd8e
ffe4767d096041f4a909c7f9dae8fd8e--2d130a33a3bf467c951f888fe4207635
8eea000cf0f24893bc4bbf7dc757db1d
ffe4767d096041f4a909c7f9dae8fd8e--8eea000cf0f24893bc4bbf7dc757db1d
a0a0f909b9cf4244b35c0c6652b2e671
8eea000cf0f24893bc4bbf7dc757db1d--a0a0f909b9cf4244b35c0c6652b2e671
a0a0f909b9cf4244b35c0c6652b2e671--b74b782a555d4460b510045fb34eb7e8