Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compactification can now optionally create a new module with much smaller sum types #267

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

Krastanov
Copy link
Member

The sumtype will contain only the gates that have been seen in the given circuit.

Benchmarks:

using BenchmarkTools
using QuantumClifford

function x_diag_circuit_noisy_measurement(csize)
    circuit = []
    for i in 1:csize
        push!(circuit, PauliError(i, 0.1))
        push!(circuit, sHadamard(i))
        push!(circuit, sCNOT(i, csize+1))
        push!(circuit, sMZ(csize+1,i))
        push!(circuit, ClassicalXOR(1:(i%6+2),i))
    end
    return circuit
end

@benchmark pftrajectories(state,circuit) setup=(state=PauliFrame(1000, 1001, 1001); circuit=x_diag_circuit_noisy_measurement(1000)) evals=1

BenchmarkTools.Trial: 1190 samples with 1 evaluation.
 Range (min … max):  3.341 ms …  4.404 ms  ┊ GC (min … max): 0.00% … 0.00%
 Time  (median):     3.373 ms              ┊ GC (median):    0.00%
 Time  (mean ± σ):   3.383 ms ± 50.728 μs  ┊ GC (mean ± σ):  0.00% ± 0.00%

     ▁▆▄▄▄▄▇█▄▂ ▂▄
  ▃▄▆██████████████▆▆▆▆▅▆▅▅▄▄▄▃▃▄▃▃▂▃▂▂▃▂▃▂▁▁▁▂▂▁▁▁▁▁▁▁▁▁▂▁▂ ▄
  3.34 ms        Histogram: frequency by time        3.51 ms <

 Memory estimate: 281.25 KiB, allocs estimate: 6000.

@benchmark pftrajectories(state,circuit) setup=(state=PauliFrame(1000, 1001, 1001); circuit=compactify_circuit(x_diag_circuit_noisy_measurement(1000); subspecialize=false)) evals=1

BenchmarkTools.Trial: 1049 samples with 1 evaluation.
 Range (min … max):  3.297 ms …  3.783 ms  ┊ GC (min … max): 0.00% … 0.00%
 Time  (median):     3.326 ms              ┊ GC (median):    0.00%
 Time  (mean ± σ):   3.342 ms ± 57.815 μs  ┊ GC (mean ± σ):  0.00% ± 0.00%

   ▆█▇▇█▇▅▅▄▂▄▁▁▁                                            ▁
  ▇██████████████▇▇▆▅▆▇▆▆▇▄▄▄▅▄▄▆▆▄▇▅▆▄▇▇▆▆▁▅▄▅▆▁▁▁▁▆▁▄▄▁▄▁▆ █
  3.3 ms       Histogram: log(frequency) by time      3.6 ms <

 Memory estimate: 48 bytes, allocs estimate: 1.

circuit=compactify_circuit(x_diag_circuit_noisy_measurement(1000); subspecialize=false)
state=PauliFrame(1000, 1001, 1001)
@benchmark pftrajectories($state,$circuit)

BenchmarkTools.Trial: 1494 samples with 1 evaluation.
 Range (min … max):  3.189 ms …  3.620 ms  ┊ GC (min … max): 0.00% … 0.00%
 Time  (median):     3.353 ms              ┊ GC (median):    0.00%
 Time  (mean ± σ):   3.345 ms ± 48.549 μs  ┊ GC (mean ± σ):  0.00% ± 0.00%

                                 ▂▆▄█▆▇▄▂▁
  ▃▂▂▃▃▃▃▃▃▄▃▃▃▃▃▂▂▃▂▂▂▁▂▂▁▁▁▂▃▅▆██████████▅▄▃▃▂▂▂▂▂▂▂▂▂▂▂▂▂ ▃
  3.19 ms        Histogram: frequency by time        3.46 ms <

 Memory estimate: 0 bytes, allocs estimate: 0.

circuit=compactify_circuit(x_diag_circuit_noisy_measurement(1000); subspecialize=true)
state=PauliFrame(1000, 1001, 1001)
@benchmark pftrajectories($state,$circuit)

BenchmarkTools.Trial: 1563 samples with 1 evaluation.
 Range (min … max):  3.179 ms …  3.358 ms  ┊ GC (min … max): 0.00% … 0.00%
 Time  (median):     3.196 ms              ┊ GC (median):    0.00%
 Time  (mean ± σ):   3.197 ms ± 11.439 μs  ┊ GC (mean ± σ):  0.00% ± 0.00%

          ▁▄▇█▇▄▁
  ▂▁▂▂▃▃▄▇███████▆▄▃▄▃▃▂▂▂▂▂▂▂▂▂▂▂▂▂▁▂▁▁▁▁▁▁▁▁▁▁▁▂▂▁▁▁▁▂▂▂▂▂ ▃
  3.18 ms        Histogram: frequency by time        3.26 ms <

 Memory estimate: 0 bytes, allocs estimate: 0.

…ller sum types

The sumtype will contain only the gates that have been seen in the given circuit.

Benchmarks:

```
using BenchmarkTools
using QuantumClifford

function x_diag_circuit_noisy_measurement(csize)
    circuit = []
    for i in 1:csize
        push!(circuit, PauliError(i, 0.1))
        push!(circuit, sHadamard(i))
        push!(circuit, sCNOT(i, csize+1))
        push!(circuit, sMZ(csize+1,i))
        push!(circuit, ClassicalXOR(1:(i%6+2),i))
    end
    return circuit
end

@benchmark pftrajectories(state,circuit) setup=(state=PauliFrame(1000, 1001, 1001); circuit=x_diag_circuit_noisy_measurement(1000)) evals=1

BenchmarkTools.Trial: 1190 samples with 1 evaluation.
 Range (min … max):  3.341 ms …  4.404 ms  ┊ GC (min … max): 0.00% … 0.00%
 Time  (median):     3.373 ms              ┊ GC (median):    0.00%
 Time  (mean ± σ):   3.383 ms ± 50.728 μs  ┊ GC (mean ± σ):  0.00% ± 0.00%

     ▁▆▄▄▄▄▇█▄▂ ▂▄
  ▃▄▆██████████████▆▆▆▆▅▆▅▅▄▄▄▃▃▄▃▃▂▃▂▂▃▂▃▂▁▁▁▂▂▁▁▁▁▁▁▁▁▁▂▁▂ ▄
  3.34 ms        Histogram: frequency by time        3.51 ms <

 Memory estimate: 281.25 KiB, allocs estimate: 6000.

@benchmark pftrajectories(state,circuit) setup=(state=PauliFrame(1000, 1001, 1001); circuit=compactify_circuit(x_diag_circuit_noisy_measurement(1000); subspecialize=false)) evals=1

BenchmarkTools.Trial: 1049 samples with 1 evaluation.
 Range (min … max):  3.297 ms …  3.783 ms  ┊ GC (min … max): 0.00% … 0.00%
 Time  (median):     3.326 ms              ┊ GC (median):    0.00%
 Time  (mean ± σ):   3.342 ms ± 57.815 μs  ┊ GC (mean ± σ):  0.00% ± 0.00%

   ▆█▇▇█▇▅▅▄▂▄▁▁▁                                            ▁
  ▇██████████████▇▇▆▅▆▇▆▆▇▄▄▄▅▄▄▆▆▄▇▅▆▄▇▇▆▆▁▅▄▅▆▁▁▁▁▆▁▄▄▁▄▁▆ █
  3.3 ms       Histogram: log(frequency) by time      3.6 ms <

 Memory estimate: 48 bytes, allocs estimate: 1.

circuit=compactify_circuit(x_diag_circuit_noisy_measurement(1000); subspecialize=false)
state=PauliFrame(1000, 1001, 1001)
@benchmark pftrajectories($state,$circuit)

BenchmarkTools.Trial: 1494 samples with 1 evaluation.
 Range (min … max):  3.189 ms …  3.620 ms  ┊ GC (min … max): 0.00% … 0.00%
 Time  (median):     3.353 ms              ┊ GC (median):    0.00%
 Time  (mean ± σ):   3.345 ms ± 48.549 μs  ┊ GC (mean ± σ):  0.00% ± 0.00%

                                 ▂▆▄█▆▇▄▂▁
  ▃▂▂▃▃▃▃▃▃▄▃▃▃▃▃▂▂▃▂▂▂▁▂▂▁▁▁▂▃▅▆██████████▅▄▃▃▂▂▂▂▂▂▂▂▂▂▂▂▂ ▃
  3.19 ms        Histogram: frequency by time        3.46 ms <

 Memory estimate: 0 bytes, allocs estimate: 0.

circuit=compactify_circuit(x_diag_circuit_noisy_measurement(1000); subspecialize=true)
state=PauliFrame(1000, 1001, 1001)
@benchmark pftrajectories($state,$circuit)

BenchmarkTools.Trial: 1563 samples with 1 evaluation.
 Range (min … max):  3.179 ms …  3.358 ms  ┊ GC (min … max): 0.00% … 0.00%
 Time  (median):     3.196 ms              ┊ GC (median):    0.00%
 Time  (mean ± σ):   3.197 ms ± 11.439 μs  ┊ GC (mean ± σ):  0.00% ± 0.00%

          ▁▄▇█▇▄▁
  ▂▁▂▂▃▃▄▇███████▆▄▃▄▃▃▂▂▂▂▂▂▂▂▂▂▂▂▂▁▂▁▁▁▁▁▁▁▁▁▁▁▂▂▁▁▁▁▂▂▂▂▂ ▃
  3.18 ms        Histogram: frequency by time        3.26 ms <

 Memory estimate: 0 bytes, allocs estimate: 0.
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant