Skip to content

Move Clifford helpers from QuantumSavory into QuantumSymbolics extension#177

Merged
Krastanov merged 3 commits intoQuantumSavory:mainfrom
Krastanov-agent:move-clifford-should-upstream-codex
Mar 4, 2026
Merged

Move Clifford helpers from QuantumSavory into QuantumSymbolics extension#177
Krastanov merged 3 commits intoQuantumSavory:mainfrom
Krastanov-agent:move-clifford-should-upstream-codex

Conversation

@Krastanov-agent
Copy link
Contributor

@Krastanov-agent Krastanov-agent commented Mar 3, 2026

Summary

  • move the Clifford QCGateSequence and related apply!/apply_popindex! helpers from QuantumSavory into ext/QuantumCliffordExt/should_upstream.jl
  • include that file from QuantumCliffordExt
  • add regression tests for tensor-operator apply! dispatch and stabilizer projector conversion
  • bump version to 0.4.14 and update changelog

Context

This is the upstream companion to QuantumSavory PR #344, so that PR can stop carrying the Clifford should_upstream.jl patch locally.

@github-actions
Copy link
Contributor

github-actions bot commented Mar 3, 2026

Benchmark Results (Julia v1)

Time benchmarks
main 68a4ac4... main / 68a4ac4...
creation/ket 30 ± 0 ns 30 ± 0 ns 1 ± 0
creation/large_trees/10_layers 0.888 ± 0.044 ms 0.898 ± 0.039 ms 0.99 ± 0.066
creation/large_trees/50_layers 0.0383 ± 0.0037 s 0.0389 ± 0.0037 s 0.983 ± 0.13
creation/op 30 ± 0 ns 30 ± 0 ns 1 ± 0
creation/super_op 30 ± 0 ns 30 ± 0 ns 1 ± 0
express/clifford/simple_ket 1.3 ± 0.049 μs 1.29 ± 0.041 μs 1.01 ± 0.05
express/clifford/simple_observable 2.21 ± 0.12 μs 2.21 ± 0.12 μs 1 ± 0.077
express/optics/pauli_op_4 6.7 ± 0.24 μs 6.78 ± 0.31 μs 0.988 ± 0.058
express/optics/pauli_state_8 2.52 ± 0.09 μs 2.56 ± 0.11 μs 0.988 ± 0.055
express/optics/simple_ket 1.2 ± 0.04 μs 1.17 ± 0.07 μs 1.02 ± 0.07
express/optics/simple_op 1.37 ± 0.069 μs 1.36 ± 0.08 μs 1.01 ± 0.078
linalg/anticommutator 0.361 ± 0.02 μs 0.37 ± 0.019 μs 0.976 ± 0.074
linalg/commutator 0.391 ± 0.02 μs 0.39 ± 0.02 μs 1 ± 0.073
linalg/conjugate 0.04 ± 0.001 μs 0.04 ± 0.001 μs 1 ± 0.035
linalg/dagger 0.04 ± 0.009 μs 0.04 ± 0 μs 1 ± 0.23
linalg/inverse 0.04 ± 0.01 μs 0.04 ± 0.001 μs 1 ± 0.25
linalg/ptrace 13.6 ± 0.4 μs 14.2 ± 0.39 μs 0.957 ± 0.039
linalg/trace 0.04 ± 0.01 μs 0.04 ± 0 μs 1 ± 0.25
linalg/transpose 0.04 ± 0.01 μs 0.04 ± 0 μs 1 ± 0.25
manipulation/expand/commutator 2.06 ± 0.22 ms 2.09 ± 0.25 ms 0.984 ± 0.16
manipulation/expand/distribution 1.72 ± 0.11 ms 1.69 ± 0.091 ms 1.02 ± 0.086
manipulation/simplify/applicable_rules 5.81 ± 0.11 ms 5.71 ± 0.097 ms 1.02 ± 0.025
manipulation/simplify/commutator 0.0402 ± 0.00089 ms 0.0417 ± 0.00085 ms 0.964 ± 0.029
manipulation/simplify/irrelevant_rules 0.886 ± 0.03 ms 0.895 ± 0.03 ms 0.99 ± 0.047
operations/addition/ket 1.3 ± 0.051 μs 1.3 ± 0.061 μs 1 ± 0.061
operations/addition/op 1.26 ± 0.069 μs 1.28 ± 0.06 μs 0.985 ± 0.071
operations/multiplication/bra_ket 1.34 ± 0.021 μs 1.3 ± 0.031 μs 1.03 ± 0.029
operations/multiplication/bra_op 1.35 ± 0.021 μs 1.33 ± 0.04 μs 1.01 ± 0.034
operations/multiplication/inner 1.34 ± 0.021 μs 1.3 ± 0.04 μs 1.03 ± 0.036
operations/multiplication/many 8.93 ± 0.15 μs 8.98 ± 0.16 μs 0.994 ± 0.025
operations/multiplication/op 1.2 ± 0.03 μs 1.2 ± 0.03 μs 1 ± 0.035
operations/multiplication/op_ket 1.43 ± 0.021 μs 1.33 ± 0.031 μs 1.08 ± 0.03
operations/multiplication/outer 1.37 ± 0.021 μs 1.34 ± 0.04 μs 1.02 ± 0.034
operations/scaling/ket 0.09 ± 0 μs 0.07 ± 0.01 μs 1.29 ± 0.18
operations/scaling/op 0.09 ± 0 μs 0.08 ± 0.001 μs 1.12 ± 0.014
operations/tensor/ket 1.11 ± 0.03 μs 1.11 ± 0.04 μs 1 ± 0.045
operations/tensor/many 9.47 ± 0.19 μs 9.67 ± 0.23 μs 0.979 ± 0.031
operations/tensor/op 1.13 ± 0.03 μs 1.11 ± 0.04 μs 1.02 ± 0.045
time_to_load 2.3 ± 0.019 s 2.31 ± 0.009 s 0.995 ± 0.0092
Memory benchmarks
main 68a4ac4... main / 68a4ac4...
creation/ket 0 allocs: 0 B 0 allocs: 0 B
creation/large_trees/10_layers 11.6 k allocs: 0.283 MB 11.6 k allocs: 0.283 MB 1
creation/large_trees/50_layers 0.662 M allocs: 13 MB 0.662 M allocs: 13 MB 1
creation/op 0 allocs: 0 B 0 allocs: 0 B
creation/super_op 0 allocs: 0 B 0 allocs: 0 B
express/clifford/simple_ket 16 allocs: 0.641 kB 16 allocs: 0.641 kB 1
express/clifford/simple_observable 0.06 k allocs: 2.66 kB 0.06 k allocs: 2.66 kB 1
express/optics/pauli_op_4 0.055 k allocs: 3.72 kB 0.055 k allocs: 3.72 kB 1
express/optics/pauli_state_8 31 allocs: 1.27 kB 31 allocs: 1.27 kB 1
express/optics/simple_ket 20 allocs: 0.75 kB 20 allocs: 0.75 kB 1
express/optics/simple_op 26 allocs: 1.09 kB 26 allocs: 1.09 kB 1
linalg/anticommutator 11 allocs: 0.438 kB 11 allocs: 0.438 kB 1
linalg/commutator 11 allocs: 0.438 kB 11 allocs: 0.438 kB 1
linalg/conjugate 3 allocs: 0.125 kB 3 allocs: 0.125 kB 1
linalg/dagger 3 allocs: 0.125 kB 3 allocs: 0.125 kB 1
linalg/inverse 3 allocs: 0.125 kB 3 allocs: 0.125 kB 1
linalg/ptrace 0.098 k allocs: 3.56 kB 0.098 k allocs: 3.56 kB 1
linalg/trace 3 allocs: 0.125 kB 3 allocs: 0.125 kB 1
linalg/transpose 3 allocs: 0.125 kB 3 allocs: 0.125 kB 1
manipulation/expand/commutator 14.5 k allocs: 0.453 MB 14.5 k allocs: 0.453 MB 1
manipulation/expand/distribution 15.4 k allocs: 0.492 MB 15.4 k allocs: 0.492 MB 1
manipulation/simplify/applicable_rules 0.0496 M allocs: 1.66 MB 0.0497 M allocs: 1.67 MB 1
manipulation/simplify/commutator 0.444 k allocs: 14.1 kB 0.444 k allocs: 14.1 kB 1
manipulation/simplify/irrelevant_rules 8.5 k allocs: 0.267 MB 8.5 k allocs: 0.267 MB 1
operations/addition/ket 25 allocs: 1.48 kB 25 allocs: 1.48 kB 1
operations/addition/op 25 allocs: 1.48 kB 25 allocs: 1.48 kB 1
operations/multiplication/bra_ket 12 allocs: 0.453 kB 12 allocs: 0.453 kB 1
operations/multiplication/bra_op 13 allocs: 0.484 kB 13 allocs: 0.484 kB 1
operations/multiplication/inner 12 allocs: 0.453 kB 12 allocs: 0.453 kB 1
operations/multiplication/many 0.083 k allocs: 3.17 kB 0.083 k allocs: 3.17 kB 1
operations/multiplication/op 12 allocs: 0.469 kB 12 allocs: 0.469 kB 1
operations/multiplication/op_ket 13 allocs: 0.484 kB 13 allocs: 0.484 kB 1
operations/multiplication/outer 13 allocs: 0.484 kB 13 allocs: 0.484 kB 1
operations/scaling/ket 4 allocs: 0.156 kB 4 allocs: 0.156 kB 1
operations/scaling/op 4 allocs: 0.156 kB 4 allocs: 0.156 kB 1
operations/tensor/ket 12 allocs: 0.469 kB 12 allocs: 0.469 kB 1
operations/tensor/many 0.078 k allocs: 3.44 kB 0.078 k allocs: 3.44 kB 1
operations/tensor/op 12 allocs: 0.469 kB 12 allocs: 0.469 kB 1
time_to_load 0.149 k allocs: 11.2 kB 0.149 k allocs: 11.2 kB 1

@Krastanov Krastanov changed the title Move Clifford should_upstream helpers into QuantumSymbolics extension Move Clifford helpers from QuantumSavory into QuantumSymbolics extension Mar 4, 2026
@Krastanov Krastanov merged commit 8ca7ec2 into QuantumSavory:main Mar 4, 2026
13 of 16 checks passed
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.

2 participants