|
315 | 315 | @test tab(apply!(copy(s),sMZ(r))).xzs == tab(sz).xzs == tab(ssz).xzs == tab(rssz).xzs |
316 | 316 | end |
317 | 317 | end |
318 | | - @testset "project! projectrand! apply!(...,sM*) consistency" begin |
| 318 | + |
| 319 | + # projext*! should accept AbstractStabilizer, or Stabilizer in particular |
| 320 | + # This testset is not merged with the previous one as "measuring commutating operator out of the stabilizer" |
| 321 | + # is not well supported for pure stabilizer state datastructure. See also "Datastructure Choice" |
| 322 | + @testset "Single Qubit Pure State Projections" begin |
| 323 | + for n in test_sizes |
| 324 | + s = random_stabilizer(n); |
| 325 | + r = rand(1:n) |
| 326 | + px = single_x(n,r); |
| 327 | + py = single_y(n,r); |
| 328 | + pz = single_z(n,r); |
| 329 | + @test project!(copy(s),px) == projectX!(copy(s),r) |
| 330 | + @test project!(copy(s),py) == projectY!(copy(s),r) |
| 331 | + @test project!(copy(s),pz) == projectZ!(copy(s),r) |
| 332 | + sx = project!(copy(s),px)[1] |
| 333 | + sy = project!(copy(s),py)[1] |
| 334 | + sz = project!(copy(s),pz)[1] |
| 335 | + ssx = project!(copy(s),sMX(r))[1] |
| 336 | + ssy = project!(copy(s),sMY(r))[1] |
| 337 | + ssz = project!(copy(s),sMZ(r))[1] |
| 338 | + rssx = projectrand!(copy(s),sMX(r))[1] |
| 339 | + rssy = projectrand!(copy(s),sMY(r))[1] |
| 340 | + rssz = projectrand!(copy(s),sMZ(r))[1] |
| 341 | + @test project!(copy(sx),px) == projectX!(copy(sx),r) |
| 342 | + @test project!(copy(sy),py) == projectY!(copy(sy),r) |
| 343 | + @test project!(copy(sz),pz) == projectZ!(copy(sz),r) |
| 344 | + @test tab(apply!(copy(s),sMX(r))).xzs == tab(sx).xzs == tab(ssx).xzs == tab(rssx).xzs |
| 345 | + @test tab(apply!(copy(s),sMY(r))).xzs == tab(sy).xzs == tab(ssy).xzs == tab(rssy).xzs |
| 346 | + @test tab(apply!(copy(s),sMZ(r))).xzs == tab(sz).xzs == tab(ssz).xzs == tab(rssz).xzs |
| 347 | + end |
| 348 | + end |
| 349 | + @testset "project! projectrand! project*! project*rand! apply!(...,sM*) consistency" begin |
319 | 350 | s = S"XII -IZI IIY" |
320 | 351 | _,_, r1 = project!(MixedDestabilizer(copy(s)), sMX(1)) |
321 | 352 | _,_, r2 = project!(copy(s), P"XII") |
322 | | - _,_, r3 = project!(MixedDestabilizer(copy(s)), sMX(1)) |
323 | | - _, r4 = projectrand!(copy(s), P"XII") |
324 | | - r5 = bitview(apply!(Register(copy(s), [0]),sMX(1)))[1] |
325 | | - @test r1 == r2 == r3 == r4 == r5 |
| 353 | + _, r3 = projectrand!(copy(s), P"XII") |
| 354 | + r4 = bitview(apply!(Register(copy(s), [0]),sMX(1)))[1] |
| 355 | + _, _, r5 = projectX!(copy(s), 1) |
| 356 | + _, r6 = projectXrand!(copy(s), 1) |
| 357 | + @test r1 == r2 == r3 == r4 == r5 == r6 |
326 | 358 | _,_, r1 = project!(MixedDestabilizer(copy(s)), sMZ(2)) |
327 | 359 | _,_, r2 = project!(copy(s), P"IZI") |
328 | | - _,_, r3 = project!(MixedDestabilizer(copy(s)), sMZ(2)) |
329 | | - _, r4 = projectrand!(copy(s), P"IZI") |
330 | | - r5 = bitview(apply!(Register(copy(s), [0]),sMZ(2)))[1] |
331 | | - @test r1%2 == r2%2 == r3%2 == r4%2 == r5 |
| 360 | + _, r3 = projectrand!(copy(s), P"IZI") |
| 361 | + r4 = bitview(apply!(Register(copy(s), [0]),sMZ(2)))[1] |
| 362 | + _, _, r5 = projectZ!(copy(s), 2) |
| 363 | + _, r6 = projectZrand!(copy(s), 2) |
| 364 | + @test r1%2 == r2%2 == r3%2 == r4 == r5%2 == r6%2 |
332 | 365 | _,_, r1 = project!(MixedDestabilizer(copy(s)), sMY(3)) |
333 | 366 | _,_, r2 = project!(copy(s), P"IIY") |
334 | | - _,_, r3 = project!(MixedDestabilizer(copy(s)), sMY(3)) |
335 | | - _, r4 = projectrand!(copy(s), P"IIY") |
336 | | - r5 = bitview(apply!(Register(copy(s), [0]),sMY(3)))[1] |
337 | | - @test r1 == r2 == r3 == r4 == r5 |
| 367 | + _, r3 = projectrand!(copy(s), P"IIY") |
| 368 | + r4 = bitview(apply!(Register(copy(s), [0]),sMY(3)))[1] |
| 369 | + _, _, r5 = projectY!(copy(s), 3) |
| 370 | + _, r6 = projectYrand!(copy(s), 3) |
| 371 | + @test r1 == r2 == r3 == r4 == r5 == r6 |
338 | 372 | end |
339 | 373 | @testset "projectremoverand!" begin |
340 | 374 | for n in test_sizes |
|
0 commit comments