AnyonLabs™

Snowflurry™ v0.4.0 is released!

Cover Image for 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