U. Arizona, Harvard, MIT, Yale, BYU, U. Chicago, Howard University, U. Oregon, UMass Amherst, NAU
Symbolics.jl
and many "backend" libraries.
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
════
express
interface
express(::Symbolic, ::Representation, ::Use)
express_nolookup(::Symbolic, ::Representation, ::Use)
express
julia> op = X;
julia> express(op);
julia> op.metadata
Dict{...}(
(QuantumOpticsRepr(), UseAsState()) => QuantumOptics.Operator
)
julia> express(op, CliffordRepr(), UseAsOperation());
julia> op.metadata
Dict{...}(
(QuantumOpticsRepr(), UseAsState()) => QuantumOptics.Operator,
(CliffordRepr(), UseAsOperation()) => QuantumClifford.sX
)
traits = [Qubit(), Qubit(), Qumode()]
reg = Register(traits)
A register "stores" the states being simulated.
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.
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...
reg = Register([Qubit(), Qubit(), Qubit()])
reg = Register(
[Qubit(), Qubit(), Qubit()]
[T1Decay(T₁), CoherentError(ε*σᶻ), NZ(...)]
)
reg = Register(
[Qubit(), Qubit(), Qubit()]
[T1Decay(T₁), CoherentError(ε*σᶻ), NZ(...)]
)
apply!((reg[1],reg[2]), CNOT; time=τ₁)
reg = Register(
[Qubit(), Qubit(), Qubit()]
[T1Decay(T₁), CoherentError(ε*σᶻ), NZ(...)]
)
apply!((reg[1],reg[2]), CNOT; time=τ₁)
apply!((reg[2],reg[3]), CPHASE; time=τ₂)
prerelease...
QuantumOptics.jl, ITensors.jl, Yao.jl, quantum chemistry and solid state tools, EM tools, multiphisics classical tools, etc
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.
As an "algebra" tool: random states, gate enumeration, canonicalization, partial traces, projections.
random_stabilizer(5,10) |>
canonicalize_clip! |>
naive_syndrome_circuit
As an "circuit simulation" tool: Monte Carlo, Pauli frames, and perturbative expansions.
Dict{CircuitStatus, Num} with 3 entries:
failure => 4e*((1 - 3e)^3)
false_success => 6e*((1 - 3e)^3)
true_success => (1 - 3e)^4 + 2e*((1 - 3e)^3)
support for non-Clifford expansions, conversion to QuantumOptics.jl objects and more...
We are hiring both at UMass Amherst and MIT:
software engineering
quantum science
Message at stefankr@mit.edu, skrastanov@umass.edu
Including work done with Vaishnavi Addala, Shu Ge, Shayan Pardis, Chen Zhao, Hong-Ye Hu, Dirk Englund, Saikat Guha.
Consider gradschool or postdoc at UMass Amherst:
Design of optical/mechanical/spin devices with Sandia, Mitre, and MIT.
Working on practical LDPC ECC in networking and computing with CQN.
Creating new tools for the entire community.