traits = [Qubit(), Qubit(), Qumode()]
reg = Register(traits)
A register "stores" the states being simulated.
graph = grid([2,3])
registers = [...]
net = RegisterNet(graph, registers)
A "graph" of registers can represent a network.
initialize!(reg[1], X₁)
A register's slot can be initialized to an arbitrary state, e.g. $|x_1\rangle$ an eigenstate of $\hat{\sigma}_x$.
initialize!(reg[1], X₁)
initialize!(reg[2], Z₁)
apply!((reg[1], reg[2]), CNOT)
Arbitrary quantum gates or channels can be applied.
project_traceout!(reg[1], σˣ) # Projective measurement
observable((reg[1],reg[2]), σᶻ⊗σˣ) # Calculate an expectation
Measurements and expectation values...
julia> Z₁
|Z₁⟩
julia> ( Z₁⊗X₂+Y₁⊗Y₁ ) / √2
0.707 (|Y₁⟩|Y₁⟩+|Z₁⟩|X₂⟩)
julia> express( ( Z₁⊗X₂+Y₁⊗Y₁ ) / √2 )
Ket(dim=4)
basis: [Spin(1/2) ⊗ Spin(1/2)]
0.8535533905932736 + 0.0im
0.0 + 0.3535533905932737im
-0.49999999999999994 + 0.3535533905932737im
-0.3535533905932737 + 0.0im
julia> express( Y₁⊗Y₂, CliffordRepr() )
Rank 2 stabilizer
+ Z_
+ _Z
════
+ Y_
- _Y
════
Play with it at areweentangledyet.com
Declarative specification of "imperfections"
Discrete event scheduling
Traveling wavepackets modeling
More formalisms
More symbolic algebra
Digital twin / surrogate modeling
With upcoming "Google Summer of Code" contributors working on GPU acceleration and ECC zoo.
MIT and UMass students working on code generators.
Incoming master student working on code decoders.