def test_fswap_same_modes(self): All(H) | self.reg fswap(self.reg, 1, 1) # expect identity to be applied because of this self.eng.flush() ordered_wvfn = numpy.array(ordered_wavefunction(self.eng)) expected = numpy.array([2. ** -1.5] * 8) self.assertTrue(numpy.allclose(ordered_wvfn, expected * -1j))
def test_fswap_identity(self): fswap(self.reg, 0, 1) self.eng.flush() ordered_wvfn = numpy.array(ordered_wavefunction(self.eng)) expected = numpy.array([1.0] + [0.0] * 7) self.assertTrue(numpy.allclose(numpy.abs(ordered_wvfn), numpy.abs(expected)))
def test_fswap_001(self): X | self.reg[2] fswap(self.reg, 0, 1) self.eng.flush() ordered_wvfn = numpy.array(ordered_wavefunction(self.eng)) expected = numpy.array([0.0] * 4 + [1.0] + [0.0] * 3) self.assertTrue(numpy.allclose(numpy.abs(ordered_wvfn), numpy.abs(expected)))
def test_fswap_superposition(self): All(H) | self.reg fswap(self.reg, 0, 1) self.eng.flush() ordered_wvfn = numpy.array(ordered_wavefunction(self.eng)) expected = numpy.array([2. ** -1.5] * 8) expected[3] *= -1 # bitstring 110 gets sign-flipped by fermionic swap expected[7] *= -1 # bitstring 111 gets sign-flipped by fermionic swap self.assertTrue(numpy.allclose(ordered_wvfn, expected * -1j))