Snowflurry™ v0.4.0 is released!


Snowflurry™ v0.4.0
Snowflurry™ ❄️ v0.4.0 is our fourth release of SnowflurrySDK in 2024, which includes several improvements.
We have implemented several changes to the Thunderhead API.
A user can now query the state of hardware QPUs, and receive a Metadata dict, containing relevant information such as the status of the machine (online/offline), or whether there are qubits disconnected, and other specifications.
julia> using Snowflurry
julia> user = ENV["THUNDERHEAD_USER"];
julia> token = ENV["THUNDERHEAD_API_TOKEN"];
julia> host = ENV["THUNDERHEAD_HOST"];
julia> project_id = ENV["THUNDERHEAD_PROJECT_ID"];
julia> realm = ENV["THUNDERHEAD_REALM"];
julia> qpu = AnyonYukonQPU(
host = host,
user = user,
access_token = token,
project_id = project_id,
realm = realm,
);
julia> get_metadata(qpu)
Dict{String, Union{Int64, String, Vector{Int64}}} with 8 entries:
"qubit_count" => 6
"generation" => "Yukon"
"manufacturer" => "Anyon Systems Inc."
"realm" => "anyon"
"serial_number" => "ANYK202201"
"project_id" => "4f251052-ba3a-42c2-a781-9618d3a521a6"
"connectivity_type" => "linear"
"excluded_positions" => Int64[]
(The machine status is not printed, but a status other that online will throw an assertion error).
Also, in the case of failures when submitting jobs, for instance if a network connection is dropped momentarily, the submission is retried automatically, for up to three attempts. In addition, when a job is completed, the server now returns the time spent on the QPU to perform it, or the qpu_time.
While we previously configured the AnyonYamaskaQPU to use only 12 qubits, it is now deployed with the full 24 qubits:
julia> Snowflurry.AnyonYamaskaConnectivity
LatticeConnectivity{6,4}
1
|
9 ── 5 ── 2
| | |
17 ── 13 ── 10 ── 6 ── 3
| | | | |
21 ── 18 ── 14 ── 11 ── 7 ── 4
| | | | |
22 ── 19 ── 15 ── 12 ── 8
| | |
23 ── 20 ── 16
|
24
In addition, the Snowflurry.RootZZDagger
gate is implemented (along with its complex conjugate Snowflurry.RootZZDagger
), which is a two-quibit gate that, when two are applied in sequence, are equivalent to
one rotation_z(-pi/2) Operator
to qubit_1
and one rotation_z(pi/2) to qubit_2
:
julia> qubit_1 = 1; qubit_2 = 2;
julia> root_zz(qubit_1, qubit_1)
Gate Object: Snowflurry.RootZZ
Connected_qubits : [1, 2]
Operator:
(4,4)-element Snowflurry.DiagonalOperator:
Underlying data type: ComplexF64:
0.7071067811865476 - 0.7071067811865475im . . .
. 0.7071067811865476 + 0.7071067811865475im . .
. . 0.7071067811865476 + 0.7071067811865475im .
. . . 0.7071067811865476 - 0.7071067811865475im
The following minor changes are included in this changelog for completeness:
- project_id is now an optional parameter (defaults to "") for QPU construction
- an off-by-one error in the Wigner function implementation was fixed