Unit testing Q检查阶段的单元测试

Unit testing Q检查阶段的单元测试,unit-testing,quantum-computing,q#,Unit Testing,Quantum Computing,Q#,我想通过测试量子位的相位是否翻转来测试一个相位。 我试着用手做这件事 AssertQubitIsInStateWithinTolerance((Complex(0., 0.), Complex(-1., 0.)), qubit, 1e-5); 但它并没有真正检查阶段,因为相同的输入也适用于没有阶段的测试 AssertQubitIsInStateWithinTolerance((Complex(0., 0.), Complex(1., 0.)), qubit, 1e-5); 有没有办法使用单元

我想通过测试量子位的相位是否翻转来测试一个相位。 我试着用手做这件事

AssertQubitIsInStateWithinTolerance((Complex(0., 0.), Complex(-1., 0.)), qubit, 1e-5);
但它并没有真正检查阶段,因为相同的输入也适用于没有阶段的测试

AssertQubitIsInStateWithinTolerance((Complex(0., 0.), Complex(1., 0.)), qubit, 1e-5);
有没有办法使用单元测试来检查量子位或整个寄存器的相位


感谢您的帮助。

没有物理方法可以观察量子态的全局相位,因此您无法区分| 1⟩ 州自-| 1⟩ 状态您需要找到一种方法将这个全局相位转换为一个相对相位,以便可以观察它

如果要检查特定基态的相位|ψ⟩ 被你的甲骨文翻转,你可以使用一个修改的阶段回扣技巧:准备一个状态| 0⟩ + |1.⟩ ⊗ |ψ⟩, 使用第一个量子位作为控件应用oracle的受控版本,并检查第一个量子位上的状态:如果仍然为| 0⟩ + |1.⟩, 甲骨文不会翻转状态的阶段,如果它更改为| 0⟩ - |1.⟩, 状态的阶段被翻转。您可以使用Measure[PauliX],[q]操作进行此测量。 如果要检查所有基态的相位,可以准备所有基态的叠加,应用oracle并将状态与预期获得的状态进行比较。你可以通过应用显式控制Z门来翻转你知道需要翻转的状态的相位来实现这一点——这应该会让你再次得到所有基态的叠加。您可以通过对寄存器的每个量子位应用H门并使用操作检查结果是否为全零状态来检查它是否成功。 您可以检查中的测试线束,以获取这些方法的示例;它们测试了许多不同的量子条件,因此它们是测试方法的良好来源