| 1246 | } |
| 1247 | |
| 1248 | void applyNonUnitaryPauliGadget(Qureg qureg, PauliStr str, qcomp angle) { |
| 1249 | validate_quregFields(qureg, __func__); |
| 1250 | validate_pauliStrTargets(qureg, str, __func__); |
| 1251 | |
| 1252 | qcomp phase = util_getPhaseFromGateAngle(angle); |
| 1253 | localiser_statevec_anyCtrlPauliGadget(qureg, {}, {}, str, phase); |
| 1254 | |
| 1255 | if (!qureg.isDensityMatrix) |
| 1256 | return; |
| 1257 | |
| 1258 | // conj(e^i(a)P) = e^(-i s conj(a) P) |
| 1259 | phase = - std::conj(phase) * paulis_getSignOfPauliStrConj(str); |
| 1260 | str = paulis_getShiftedPauliStr(str, qureg.numQubits); |
| 1261 | localiser_statevec_anyCtrlPauliGadget(qureg, {}, {}, str, phase); |
| 1262 | } |
| 1263 | |
| 1264 | void applyControlledPauliGadget(Qureg qureg, int control, PauliStr str, qreal angle) { |
| 1265 | validate_quregFields(qureg, __func__); |
no test coverage detected