The Quantum Exact Simulation Toolkit v4.0.0
Loading...
Searching...
No Matches

Functions for applying one-qubit rotations around Pauli and arbitrary axis. More...

Functions

void applyControlledRotateAroundAxis (Qureg qureg, int ctrl, int targ, qreal angle, qreal axisX, qreal axisY, qreal axisZ)
 
void applyControlledRotateX (Qureg qureg, int control, int target, qreal angle)
 
void applyControlledRotateY (Qureg qureg, int control, int target, qreal angle)
 
void applyControlledRotateZ (Qureg qureg, int control, int target, qreal angle)
 
void applyMultiControlledRotateAroundAxis (Qureg qureg, int *ctrls, int numCtrls, int targ, qreal angle, qreal axisX, qreal axisY, qreal axisZ)
 
void applyMultiControlledRotateAroundAxis (Qureg qureg, std::vector< int > ctrls, int targ, qreal angle, qreal axisX, qreal axisY, qreal axisZ)
 
void applyMultiControlledRotateX (Qureg qureg, int *controls, int numControls, int target, qreal angle)
 
void applyMultiControlledRotateX (Qureg qureg, std::vector< int > controls, int target, qreal angle)
 
void applyMultiControlledRotateY (Qureg qureg, int *controls, int numControls, int target, qreal angle)
 
void applyMultiControlledRotateY (Qureg qureg, std::vector< int > controls, int target, qreal angle)
 
void applyMultiControlledRotateZ (Qureg qureg, int *controls, int numControls, int target, qreal angle)
 
void applyMultiControlledRotateZ (Qureg qureg, std::vector< int > controls, int target, qreal angle)
 
void applyMultiStateControlledRotateAroundAxis (Qureg qureg, int *ctrls, int *states, int numCtrls, int targ, qreal angle, qreal axisX, qreal axisY, qreal axisZ)
 
void applyMultiStateControlledRotateAroundAxis (Qureg qureg, std::vector< int > ctrls, std::vector< int > states, int targ, qreal angle, qreal axisX, qreal axisY, qreal axisZ)
 
void applyMultiStateControlledRotateX (Qureg qureg, int *controls, int *states, int numControls, int target, qreal angle)
 
void applyMultiStateControlledRotateX (Qureg qureg, std::vector< int > controls, std::vector< int > states, int target, qreal angle)
 
void applyMultiStateControlledRotateY (Qureg qureg, int *controls, int *states, int numControls, int target, qreal angle)
 
void applyMultiStateControlledRotateY (Qureg qureg, std::vector< int > controls, std::vector< int > states, int target, qreal angle)
 
void applyMultiStateControlledRotateZ (Qureg qureg, int *controls, int *states, int numControls, int target, qreal angle)
 
void applyMultiStateControlledRotateZ (Qureg qureg, std::vector< int > controls, std::vector< int > states, int target, qreal angle)
 
void applyRotateAroundAxis (Qureg qureg, int targ, qreal angle, qreal axisX, qreal axisY, qreal axisZ)
 
void applyRotateX (Qureg qureg, int target, qreal angle)
 
void applyRotateY (Qureg qureg, int target, qreal angle)
 
void applyRotateZ (Qureg qureg, int target, qreal angle)
 

Detailed Description

Functions for applying one-qubit rotations around Pauli and arbitrary axis.

Function Documentation

◆ applyControlledRotateAroundAxis()

void applyControlledRotateAroundAxis ( Qureg qureg,
int ctrl,
int targ,
qreal angle,
qreal axisX,
qreal axisY,
qreal axisZ )
Note
Documentation for this function or struct is under construction!

Definition at line 1349 of file operations.cpp.

1349 {
1350 validate_quregFields(qureg, __func__);
1351 validate_controlAndTarget(qureg, ctrl, targ, __func__);
1352 validate_rotationAxisNotZeroVector(axisX, axisY, axisZ, __func__);
1353
1354 applyMultiStateControlledRotateAroundAxis(qureg, &ctrl, nullptr, 1, targ, angle, axisX, axisY, axisZ);
1355}
void applyMultiStateControlledRotateAroundAxis(Qureg qureg, int *ctrls, int *states, int numCtrls, int targ, qreal angle, qreal axisX, qreal axisY, qreal axisZ)

◆ applyControlledRotateX()

void applyControlledRotateX ( Qureg qureg,
int control,
int target,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1223 of file operations.cpp.

1223 {
1224 validate_quregFields(qureg, __func__);
1225 validate_controlAndTarget(qureg, control, target, __func__);
1226
1227 // harmlessly re-validates
1228 applyMultiStateControlledRotateX(qureg, &control, nullptr, 1, target, angle);
1229}
void applyMultiStateControlledRotateX(Qureg qureg, int *controls, int *states, int numControls, int target, qreal angle)

◆ applyControlledRotateY()

void applyControlledRotateY ( Qureg qureg,
int control,
int target,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1231 of file operations.cpp.

1231 {
1232 validate_quregFields(qureg, __func__);
1233 validate_controlAndTarget(qureg, control, target, __func__);
1234
1235 // harmlessly re-validates
1236 applyMultiStateControlledRotateY(qureg, &control, nullptr, 1, target, angle);
1237}
void applyMultiStateControlledRotateY(Qureg qureg, int *controls, int *states, int numControls, int target, qreal angle)

◆ applyControlledRotateZ()

void applyControlledRotateZ ( Qureg qureg,
int control,
int target,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1239 of file operations.cpp.

1239 {
1240 validate_quregFields(qureg, __func__);
1241 validate_controlAndTarget(qureg, control, target, __func__);
1242
1243 // harmlessly re-validates
1244 applyMultiStateControlledRotateZ(qureg, &control, nullptr, 1, target, angle);
1245}
void applyMultiStateControlledRotateZ(Qureg qureg, int *controls, int *states, int numControls, int target, qreal angle)

◆ applyMultiControlledRotateAroundAxis() [1/2]

void applyMultiControlledRotateAroundAxis ( Qureg qureg,
int * ctrls,
int numCtrls,
int targ,
qreal angle,
qreal axisX,
qreal axisY,
qreal axisZ )
Note
Documentation for this function or struct is under construction!

Definition at line 1357 of file operations.cpp.

1357 {
1358 validate_quregFields(qureg, __func__);
1359 validate_controlsAndTarget(qureg, ctrls, numCtrls, targ, __func__);
1360 validate_rotationAxisNotZeroVector(axisX, axisY, axisZ, __func__);
1361
1362 applyMultiStateControlledRotateAroundAxis(qureg, ctrls, nullptr, numCtrls, targ, angle, axisX, axisY, axisZ);
1363}

Referenced by applyMultiControlledRotateAroundAxis().

◆ applyMultiControlledRotateAroundAxis() [2/2]

void applyMultiControlledRotateAroundAxis ( Qureg qureg,
std::vector< int > ctrls,
int targ,
qreal angle,
qreal axisX,
qreal axisY,
qreal axisZ )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.

Definition at line 1389 of file operations.cpp.

1389 {
1390
1391 applyMultiControlledRotateAroundAxis(qureg, ctrls.data(), ctrls.size(), targ, angle, axisX, axisY, axisZ);
1392}
void applyMultiControlledRotateAroundAxis(Qureg qureg, int *ctrls, int numCtrls, int targ, qreal angle, qreal axisX, qreal axisY, qreal axisZ)

◆ applyMultiControlledRotateX() [1/2]

void applyMultiControlledRotateX ( Qureg qureg,
int * controls,
int numControls,
int target,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1247 of file operations.cpp.

1247 {
1248 validate_quregFields(qureg, __func__);
1249 validate_controlsAndTarget(qureg, controls, numControls, target, __func__);
1250
1251 // harmlessly re-validates
1252 applyMultiStateControlledRotateX(qureg, controls, nullptr, numControls, target, angle);
1253}

Referenced by applyMultiControlledRotateX().

◆ applyMultiControlledRotateX() [2/2]

void applyMultiControlledRotateX ( Qureg qureg,
std::vector< int > controls,
int target,
qreal angle )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.

Definition at line 1300 of file operations.cpp.

1300 {
1301
1302 applyMultiControlledRotateX(qureg, controls.data(), controls.size(), target, angle);
1303}
void applyMultiControlledRotateX(Qureg qureg, int *controls, int numControls, int target, qreal angle)

◆ applyMultiControlledRotateY() [1/2]

void applyMultiControlledRotateY ( Qureg qureg,
int * controls,
int numControls,
int target,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1255 of file operations.cpp.

1255 {
1256 validate_quregFields(qureg, __func__);
1257 validate_controlsAndTarget(qureg, controls, numControls, target, __func__);
1258
1259 // harmlessly re-validates
1260 applyMultiStateControlledRotateY(qureg, controls, nullptr, numControls, target, angle);
1261}

Referenced by applyMultiControlledRotateY().

◆ applyMultiControlledRotateY() [2/2]

void applyMultiControlledRotateY ( Qureg qureg,
std::vector< int > controls,
int target,
qreal angle )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.

Definition at line 1305 of file operations.cpp.

1305 {
1306
1307 applyMultiControlledRotateY(qureg, controls.data(), controls.size(), target, angle);
1308}
void applyMultiControlledRotateY(Qureg qureg, int *controls, int numControls, int target, qreal angle)

◆ applyMultiControlledRotateZ() [1/2]

void applyMultiControlledRotateZ ( Qureg qureg,
int * controls,
int numControls,
int target,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1263 of file operations.cpp.

1263 {
1264 validate_quregFields(qureg, __func__);
1265 validate_controlsAndTarget(qureg, controls, numControls, target, __func__);
1266
1267 // harmlessly re-validates
1268 applyMultiStateControlledRotateZ(qureg, controls, nullptr, numControls, target, angle);
1269}

Referenced by applyMultiControlledRotateZ().

◆ applyMultiControlledRotateZ() [2/2]

void applyMultiControlledRotateZ ( Qureg qureg,
std::vector< int > controls,
int target,
qreal angle )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.

Definition at line 1310 of file operations.cpp.

1310 {
1311
1312 applyMultiControlledRotateZ(qureg, controls.data(), controls.size(), target, angle);
1313}
void applyMultiControlledRotateZ(Qureg qureg, int *controls, int numControls, int target, qreal angle)

◆ applyMultiStateControlledRotateAroundAxis() [1/2]

void applyMultiStateControlledRotateAroundAxis ( Qureg qureg,
int * ctrls,
int * states,
int numCtrls,
int targ,
qreal angle,
qreal axisX,
qreal axisY,
qreal axisZ )
Note
Documentation for this function or struct is under construction!

Definition at line 1365 of file operations.cpp.

1365 {
1366 validate_quregFields(qureg, __func__);
1367 validate_controlsAndTarget(qureg, ctrls, numCtrls, targ, __func__);
1368 validate_controlStates(states, numCtrls, __func__); // permits states==nullptr
1369 validate_rotationAxisNotZeroVector(axisX, axisY, axisZ, __func__);
1370
1371 // defer division of vector norm to improve numerical accuracy
1372 qreal norm = std::sqrt(std::pow(axisX,2) + std::pow(axisY,2) + std::pow(axisZ,2)); // != 0
1373
1374 // treat as generic 1-qubit matrix
1375 qreal c = std::cos(angle/2);
1376 qreal s = std::sin(angle/2);
1377 qcomp u11 = c - (s * axisZ * 1_i) / norm;
1378 qcomp u12 = - (s * (axisY + axisX * 1_i)) / norm;
1379 qcomp u21 = (s * (axisY - axisX * 1_i)) / norm;
1380 qcomp u22 = c + (s * axisZ * 1_i) / norm;
1381 auto matr = getCompMatr1({{u11,u12},{u21,u22}});
1382
1383 // harmlessly re-validates, and checks unitarity of matr
1384 applyMultiStateControlledCompMatr1(qureg, ctrls, states, numCtrls, targ, matr);
1385}
static CompMatr1 getCompMatr1(qcomp **in)
Definition matrices.h:311
void applyMultiStateControlledCompMatr1(Qureg qureg, int *controls, int *states, int numControls, int target, CompMatr1 matrix)

Referenced by applyControlledRotateAroundAxis(), applyMultiControlledRotateAroundAxis(), applyMultiStateControlledRotateAroundAxis(), and applyRotateAroundAxis().

◆ applyMultiStateControlledRotateAroundAxis() [2/2]

void applyMultiStateControlledRotateAroundAxis ( Qureg qureg,
std::vector< int > ctrls,
std::vector< int > states,
int targ,
qreal angle,
qreal axisX,
qreal axisY,
qreal axisZ )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.

Definition at line 1394 of file operations.cpp.

1394 {
1395 validate_controlsMatchStates(ctrls.size(), states.size(), __func__);
1396
1397 applyMultiStateControlledRotateAroundAxis(qureg, ctrls.data(), states.data(), ctrls.size(), targ, angle, axisX, axisY, axisZ);
1398}

◆ applyMultiStateControlledRotateX() [1/2]

void applyMultiStateControlledRotateX ( Qureg qureg,
int * controls,
int * states,
int numControls,
int target,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1271 of file operations.cpp.

1271 {
1272 validate_quregFields(qureg, __func__);
1273 validate_controlsAndTarget(qureg, controls, numControls, target, __func__);
1274 validate_controlStates(states, numControls, __func__); // permits states==nullptr
1275
1276 // harmlessly re-validates
1277 applyMultiStateControlledPauliGadget(qureg, controls, states, numControls, getPauliStr("X", {target}), angle);
1278}
void applyMultiStateControlledPauliGadget(Qureg qureg, int *controls, int *states, int numControls, PauliStr str, qreal angle)
PauliStr getPauliStr(const char *paulis, int *indices, int numPaulis)
Definition paulis.cpp:296

Referenced by applyControlledRotateX(), applyMultiControlledRotateX(), applyMultiStateControlledRotateX(), and applyRotateX().

◆ applyMultiStateControlledRotateX() [2/2]

void applyMultiStateControlledRotateX ( Qureg qureg,
std::vector< int > controls,
std::vector< int > states,
int target,
qreal angle )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.

Definition at line 1315 of file operations.cpp.

1315 {
1316 validate_controlsMatchStates(controls.size(), states.size(), __func__);
1317
1318 applyMultiStateControlledRotateX(qureg, controls.data(), states.data(), controls.size(), target, angle);
1319}

◆ applyMultiStateControlledRotateY() [1/2]

void applyMultiStateControlledRotateY ( Qureg qureg,
int * controls,
int * states,
int numControls,
int target,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1280 of file operations.cpp.

1280 {
1281 validate_quregFields(qureg, __func__);
1282 validate_controlsAndTarget(qureg, controls, numControls, target, __func__);
1283 validate_controlStates(states, numControls, __func__); // permits states==nullptr
1284
1285 // harmlessly re-validates
1286 applyMultiStateControlledPauliGadget(qureg, controls, states, numControls, getPauliStr("Y", {target}), angle);
1287}

Referenced by applyControlledRotateY(), applyMultiControlledRotateY(), applyMultiStateControlledRotateY(), and applyRotateY().

◆ applyMultiStateControlledRotateY() [2/2]

void applyMultiStateControlledRotateY ( Qureg qureg,
std::vector< int > controls,
std::vector< int > states,
int target,
qreal angle )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.

Definition at line 1321 of file operations.cpp.

1321 {
1322 validate_controlsMatchStates(controls.size(), states.size(), __func__);
1323
1324 applyMultiStateControlledRotateY(qureg, controls.data(), states.data(), controls.size(), target, angle);
1325}

◆ applyMultiStateControlledRotateZ() [1/2]

void applyMultiStateControlledRotateZ ( Qureg qureg,
int * controls,
int * states,
int numControls,
int target,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1289 of file operations.cpp.

1289 {
1290 validate_quregFields(qureg, __func__);
1291 validate_controlsAndTarget(qureg, controls, numControls, target, __func__);
1292 validate_controlStates(states, numControls, __func__); // permits states==nullptr
1293
1294 // harmlessly re-validates
1295 applyMultiStateControlledPauliGadget(qureg, controls, states, numControls, getPauliStr("Z", {target}), angle);
1296}

Referenced by applyControlledRotateZ(), applyMultiControlledRotateZ(), applyMultiStateControlledRotateZ(), and applyRotateZ().

◆ applyMultiStateControlledRotateZ() [2/2]

void applyMultiStateControlledRotateZ ( Qureg qureg,
std::vector< int > controls,
std::vector< int > states,
int target,
qreal angle )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.

Definition at line 1327 of file operations.cpp.

1327 {
1328 validate_controlsMatchStates(controls.size(), states.size(), __func__);
1329
1330 applyMultiStateControlledRotateZ(qureg, controls.data(), states.data(), controls.size(), target, angle);
1331}

◆ applyRotateAroundAxis()

void applyRotateAroundAxis ( Qureg qureg,
int targ,
qreal angle,
qreal axisX,
qreal axisY,
qreal axisZ )
Note
Documentation for this function or struct is under construction!

Definition at line 1341 of file operations.cpp.

1341 {
1342 validate_quregFields(qureg, __func__);
1343 validate_target(qureg, targ, __func__);
1344 validate_rotationAxisNotZeroVector(axisX, axisY, axisZ, __func__);
1345
1346 applyMultiStateControlledRotateAroundAxis(qureg, nullptr, nullptr, 0, targ, angle, axisX, axisY, axisZ);
1347}

◆ applyRotateX()

void applyRotateX ( Qureg qureg,
int target,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1199 of file operations.cpp.

1199 {
1200 validate_quregFields(qureg, __func__);
1201 validate_target(qureg, target, __func__);
1202
1203 // harmlessly re-validates
1204 applyMultiStateControlledRotateX(qureg, nullptr, nullptr, 0, target, angle);
1205}

◆ applyRotateY()

void applyRotateY ( Qureg qureg,
int target,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1207 of file operations.cpp.

1207 {
1208 validate_quregFields(qureg, __func__);
1209 validate_target(qureg, target, __func__);
1210
1211 // harmlessly re-validates
1212 applyMultiStateControlledRotateY(qureg, nullptr, nullptr, 0, target, angle);
1213}

◆ applyRotateZ()

void applyRotateZ ( Qureg qureg,
int target,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1215 of file operations.cpp.

1215 {
1216 validate_quregFields(qureg, __func__);
1217 validate_target(qureg, target, __func__);
1218
1219 // harmlessly re-validates
1220 applyMultiStateControlledRotateZ(qureg, nullptr, nullptr, 0, target, angle);
1221}