Qiskit SDK v2.2がリリースされました!

量子コンピューター

このブログではQiskit SDK v2.2の主な新機能、パフォーマンス向上、そしてQiskitを世界最高性能な量子SDKにするための継続的な取り組みをご紹介します。

今回、Qiskit SDK v2.2のリリースを発表できることを嬉しく思います。Qiskit v2.x シリーズの最新のマイナー・リリースであるこのバージョンでは、大幅なパフォーマンスの向上と、ハイ・パフォーマンス・コンピューティング (HPC) 環境でシームレスなQCSC(量子中心のスーパーコンピューティング)・ワークフローを可能にする待望の機能が導入されています。

QiskitのC言語APIの大きなマイルストーン

Qiskit SDK v2.2の最大のアップデートは、Qiskitの C言語API に関するものです。今回、C言語から直接呼び出すスタンドアロンのトランスパイラー関数の導入により、HPC環境のサポートについて重要な一歩を踏み出しました。この機能の導入によって、C言語APIを介してC言語およびその他のコンパイル型言語でネイティブに実行できる、エンド・ツー・エンドで完結された量子ワークフローを構築できるようになりました。

これは量子開発者にとても大きな違いをもたらします。今後、多くの重要なアルゴリズムが従来のHPCアプリケーションの高速化に量子を使用することになり、コンパイル型言語で構築されるエンド・ツー・エンドの量子+HPCワークフローが、HPCコミュニティーで広く必要になるものと私たちは予測しています。この重要性を強調するために、C++で Sample-based Quantum Diagonalization (SQD)のフル実装を構築するプロセスを順を追って説明する、新しい量子+HPCワークフロー・デモを作成しました。C++はHPCコミュニティーで最も人気のあるプログラミング言語です。

新しい量子+HPCワークフローのデモの詳細については、IBM Quantum® ブログをご覧いただくか、GitHubでデモをご覧ください

新しい HPCワークフロー・デモは大きな成果ですが、Qiskit v2.2が提供するのはもちろんこれだけではありません。この新バージョンにアップデートすることで得られる主要機能とパフォーマンス向上についてこのブログで解説しますが、ここで説明されていない詳細についてはリリースノートをご確認ください。

要点

このブログで取り上げるその他の主要な更新は次のとおりです。

  • 新しい C言語API トランスパイラー関数: 以下では、新しい C言語API トランスパイラー関数に関して追加項目の詳細とコード例を共有し、トランスパイラーによって生成された量子ビット・レイアウトをサポートするために Qiskit v2.2で追加された新しいツールのいくつかをとりあげます。
  • フォールト・トレランスのためのトランスパイラー最適化: パウリ・ベース計算用の新しい LitinskiTransformationパスなど、フォールト・トレラントなコンパイル・ワークフローに向けていくらかの前進がありました。これは、短期的にはほとんどのユーザーに関係するものではないものの、フォールト・トレラント量子コンピューティングへの道のりについて詳しく知りたい方のために、この新機能の詳細をいくつか後述します。
  • 拡張されたTargetモデル:命令で角度範囲を指定するためのTargetのサポートが追加されました。これは主に、フラクショナル・ゲートをサポートするバックエンドに対するトランスパイルに役立ちます。また、Target内のゲートに角度制約を適用する新しい WrapAnglesパスも導入されました。
  • パフォーマンスの向上: 回路トランスパイルが平均10〜20%高速になりました。
  • アップグレードに関する考慮事項: このブログの最後にある「アップグレードに関する考慮事項」セクションには、Qiskit の Rustバージョン (Qiskit v2.2 でバージョン 1.79からバージョン 1.85へのアップグレード)、Python 3.9 のサポート終了 (Qiskit v2.3 ではサポートされなくなります)、Intel Macのサポート (Qiskit v2.3でダウングレード)、および今後のサーキット・ライブラリの非推奨機能 (Qiskit v3.0で削除されるクラス) に関する重要な情報が含まれています。

主な新機能と改善点

このセクションでは、このリリースに含まれる最も重要な新機能と何点かの機能強化についてご説明します。これらの機能やこの記事に載っていないその他の機能について詳細をお知りになりたい場合は、こちらのリリースノート全文をお読みください

QiskitのC言語APIを使用した回路トランスパイル

Qiskit SDK v2.2では、C言語APIを介して回路をトランスパイルするための新しいqk_transpile()関数が公開されています。これはエキサイティングなニュースです。なぜなら、回路トランスパイルは、C言語APIを用いるC言語およびその他のコンパイル型言語で完結した、完全なエンド・ツー・エンドの量子ワークロード構築を可能にするという点で、欠けていた最後の必要部品だったからです。

この新しい関数は、C言語APIで構築された回路をトランスパイルするためのもので、既存のQiskitの Python APIにおけるプリセット・パス・マネージャーの主要機能を反映しています。これによって、純粋なC言語環境でも回路をトランスパイルできるようになり、コストのかかるPython呼び出しやインタプリタは不要になります。詳細については量子+HPCワークフローのデモのブログをお読みください。

次のコード例は、新しいトランスパイラー関数を使用して回路を構築してトランスパイルし、ゲート数を出力する方法を示しています。

#include <math.h>
#include <qiskit.h>
#include <stdio.h>

// Built a target for a linear connectivity with RZ, SX, X, CZ basis gate set.
QkTarget *build_target(void) {
   const uint32_t n = 100;
   QkTarget *target = qk_target_new(n);
   qk_target_add_instruction(target, qk_target_entry_new(QkGate_SX));
   qk_target_add_instruction(target, qk_target_entry_new(QkGate_X));
   qk_target_add_instruction(target, qk_target_entry_new(QkGate_RZ));

   QkTargetEntry *cx = qk_target_entry_new(QkGate_CZ);
   for (uint32_t i = 0; i < n - 1; i++) {
      uint32_t q[2] = {i, i + 1};
      qk_target_entry_add_property(cx, q, 2, 4e-7, 1e-5);
   }
   qk_target_add_instruction(target, cx);
   return target;
}

/// Build a GHZ state.
QkCircuit *build_circuit(void) {
    const uint32_t n = 10;
    QkCircuit *circuit = qk_circuit_new(n, 0);
    qk_circuit_gate(circuit, QkGate_H, (uint32_t[1]){0}, NULL);
    for (uint32_t i = 0; i < n - 1; i++) {
       uint32_t q[2] = {i + 1, 0};
       qk_circuit_gate(circuit, QkGate_CX, q, NULL);
    }
    return circuit;
}

void print_op_counts(QkCircuit *circuit) {
    QkOpCounts counts = qk_circuit_count_ops(circuit);
    printf(“Num qubits: %u\n”, qk_circuit_num_qubits(circuit));
    printf(“Counts: %zu\n”, counts.len);
    for (size_t i = 0; i < counts.len; i++) {
        printf(“%s: %zu\n”, counts.data[i].name, counts.data[i].count);
    }
    qk_opcounts_clear(&counts);
}

int main(void) {
    /// -- Get a target and a circuit
    QkTarget *target = build_target();
    QkCircuit *circuit = build_circuit();

    printf(“Count before transpilation:\n”);
    print_op_counts(circuit);

    // - For result handling
    char *error = NULL;
    QkTranspileResult result = {NULL, NULL};

    /// -- Transpile circuit with qk_transpile
    QkTranspileOptions options = qk_transpiler_default_options();
    QkExitCode exit = qk_transpile(circuit, target, &options, &result, &error);

    // - Result handling
    if (exit != QkExitCode_Success) {
        printf(“Transpilation failed\n”);
    }
    qk_circuit_free(circuit);
    qk_target_free(target);
    qk_transpile_layout_free(result.layout);
    if (error != NULL) {
        printf(“%s”, error);
        qk_str_free(error);
        qk_circuit_free(result.circuit);
        return 1;
    }

    printf(“Count after transpilation:\n”);
    print_op_counts(result.circuit);
    qk_circuit_free(result.circuit);

    return 0;
}
Count before transpilation:
Num qubits: 10
Counts: 2
cx: 9
h: 1
Count after transpilation:
Num qubits: 100
Counts: 4
sx: 31
rz: 29
cz: 16
x: 6

C言語API を使用したレイアウト情報へのアクセス

トランスパイラーによって生成される量子ビット・レイアウトをサポートするために、量子ビットのマッピングと置換(permutation)を格納する QkTranspileLayout オブジェクトも追加されました。さらに、量子ビット・レイアウトを QkObsオブザーバブルに適用するための新しい qk_obs_apply_layout()関数も追加されました。この関数は、オブザーバブル、新しい量子ビット・インデックス、および量子ビットの出力数を受け取ります。重要なのは、この関数を使用するとトランスパイル・レイアウトをオブザーバブルに適用できることです。トランスパイル・レイアウトは、通常はトランスパイラー・パスによって QkTranspileLayoutとして与えられます。

以下は、これらすべての機能の動作を示すコード断片です。

#include <qiskit.h>
#include <stdio.h>
#include <stdlib.h>

// These are reused from a previous example.
QkTarget *build_target(void);
QkCircuit *build_circuit(void);

int main(void) {
    int ret = 0;

    // Get a target and build a circuit, using the same functions as in the
    // previous code example.
    QkTarget *target = build_target();
    QkCircuit *circuit = build_circuit();
    uint32_t num_target_qubits = qk_target_num_qubits(target);
    uint32_t num_circuit_qubits = qk_circuit_num_qubits(circuit);

    // Set up local storage for each term, to pass to the observable builder.
    QkObsTerm term;
    QkBitTerm x_term = QkBitTerm_X;
    term.coeff = (QkComplex64){1.0, 0.0};
    term.len = 1;
    term.bit_terms = &x_term;
    term.num_qubits = num_circuit_qubits;

    // Create an observable that’s the sum of all single-qubit X measurements.
    QkObs *obs = qk_obs_zero(num_circuit_qubits);
    for (uint32_t qubit = 0; qubit < num_circuit_qubits; qubit++) {
        term.indices = &qubit;
        qk_obs_add_term(obs, &term);
    }

    // Transpile the circuit, as before, but ignoring the error message.
    QkTranspileResult result = {NULL, NULL};
    QkTranspileOptions options = qk_transpiler_default_options();
    options.seed = 20251008;
    QkExitCode exit = qk_transpile(circuit, target, &options, &result, NULL);
    if (exit != QkExitCode_Success) {
        fprintf(stderr, “Transpilation failed unexpectedly.\n”);
        ret = 1;
        goto cleanup;
    }

    // Show the observable in terms of virtual qubits:
    char *obs_repr = qk_obs_str(obs);
    printf(“Before layout: %s\n”, obs_repr);
    qk_str_free(obs_repr);

    // Extract the final layout from the transpilation result.
    uint32_t *layout = malloc(num_circuit_qubits * sizeof(*layout));
    qk_transpile_layout_final_layout(result.layout, true, layout);
    // ... and apply the compiled layout to the observable.
    qk_obs_apply_layout(obs, layout, num_target_qubits);

    // Show the observable after applying the transpilation layout:
    obs_repr = qk_obs_str(obs);
    printf(“After layout: %s\n”, obs_repr);
    qk_str_free(obs_repr);

    free(layout);
cleanup:
    qk_transpile_layout_free(result.layout);
    qk_circuit_free(result.circuit);
    qk_circuit_free(circuit);
    qk_target_free(target);
    return ret;
}
Before layout: SparseObservable { num_qubits: 10, coeffs: [<cut for clarity>],
bit_terms: [X, X, X, X, X, X, X, X, X, X], indices: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
boundaries: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] }
After layout: SparseObservable { num_qubits: 100, coeffs: [<cut for clarity>],
bit_terms: [X, X, X, X, X, X, X, X, X, X], indices: [7, 0, 1, 2, 3, 4, 5, 6, 9, 8],
boundaries: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] }

 qk_obs_strは現在、デバッグ形式の出力を生成していますが、上ではわかりやすくするために省略していることに注意してください。これは、Qiskitの将来のバージョンで改善される予定です。

フォールト・トレランスのためのLitinski変換

最新のQiskit SDKリリースでは、こちらの2019年のQuantum論文で知られるようになった変換を実装する新しいトランスパイル・パスであるLitinskiTransformationが追加されています。このパスは、一部のフォールト・トレラント・アーキテクチャーのコンパイルに使用されるものですが、将来的なフォールト・トレラント量子コンピューティングのワークロードのサポート実現を一歩近づけるものであると言えます。

このパスへの入力は、Cliffordゲートまたは1量子ビットRZ回転ゲートを持つ回路であり、出力はPauliEvolutionGateゲートとして実装された複数量子ビットの Pauli回転とその後にCliffordゲートを持つ回路です。回路をこの形式にするには、get_clifford_gate_namesによって返されるCliffordゲート名と、サポートされている RZ 回転を使用してトランスパイルします。

Qiskit v2.2では、AddersとMCXゲート用の、新しいアンシラの要らない合成方法も導入されています。これらの方法は、連続的で短期的なゲートセット用に最適化された以前の方法よりも、フォールト・トレラント・アーキテクチャーに対してより効率的です。たとえば、MCXはこの 2024年の論文に基づいています。

この新しいメソッドは HighLevelSynthesisパスで利用されていますが、このパスは、短期的ターゲット向けに 2量子ビット・ゲート数の最小化、あるいはフォールト・トレラント・ターゲット向けに Tカウントの最小化いずれかをターゲットにできる新しい optimization_metricキーワードを利用可能にしています。

from qiskit import QuantumCircuit, transpile
from qiskit.circuit.library import PhaseOracleGate, grover_operator
from qiskit.quantum_info import get_clifford_gate_names
from qiskit.transpiler.passes import LitinskiTransformation

# Build an oracle for Grover operation
clause = “(x1 ^ x2) | (x2 & x3)”
oracle = PhaseOracleGate(clause)
circuit = QuantumCircuit(oracle.num_qubits)
circuit.append(oracle, circuit.qubits)

# Construct the Grover operator
grover = grover_operator(circuit)
print(“High-level:”, grover.count_ops())

# Transpile to Clifford+T basis set
basis = [“t”, “tdg”] + get_clifford_gate_names()
cliff = transpile(grover, basis_gates=basis)
print(“Cliff+T:”, cliff.count_ops())

# Apply Litinski transformation, without
# adding the final Cliffords
trafo = LitinskiTransformation(fix_clifford=False)
pbc = trafo(cliff)
print(“PBC:”, pbc.count_ops())

出力がどのようになるかの例を次に示します。

High-level: OrderedDict({‘h’: 8, ‘x’: 6, ‘Phase Oracle’: 1, ‘ccx’: 1})
Cliff+T: OrderedDict({‘cx’: 12, ‘tdg’: 7, ‘t’: 7, ‘x’: 6, ‘h’: 6, ‘cz’: 2, ‘z’: 2,
‘s’: 2, ‘sdg’: 1})
PBC: OrderedDict({‘PauliEvolution’: 14})

拡張されたTargetモデル

新しく拡張されたTargetモデルにより、バックエンドは以前よりもはるかに細かい粒度でパラメーター制約を記述できます。最も注目すべきは、Targetがゲート・パラメーターの範囲をサポートするようになったことです。つまり、たとえば、RZ(θ)を  [0, π] のような範囲に制限できます。これにより、Qiskitは実際のシステムに存在するハードウェア制約を表現することができます。たとえば、IBM Quantum Heronシステムで利用可能なフラクショナル・ゲートは、角度が0からπ/2のRZZゲートのみをサポートします。また別の例として、AQTのIBEX Q1は0からπ/4のRXXをサポートしますし、Rのθの制約は0からπ/2、φの制約は0から2πです。

新しい WrapAnglesトランスパイラー・パスは、範囲外の角度を、ハードウェア上で有効である等価な系列に自動的に書き換えることで、これらの範囲を強制します。また、提案された演算を instruction_supported(..., check_angle_bounds=True)で検証するようにTargetに指示することもできます。

更新された Targetモデルではseconds_to_dt()関数による便利な機能も導入されています。この関数は物理的な秒をデバイスのタイム・ステップ数に変換して、より明確なデバイスの時間処理を実現します。これによって、スケジューリング・パスにおいて、キャリブレーションを考慮した時間間隔の利用が容易になります。これらの変更を組み合わせることで、プロバイダーはハードウェアをより忠実に記述できるようになり、一方でユーザーは特定のデバイスの命令セットとタイミング・グリッドに対して、構築時から正しい回路をコンパイルできるようになります。

Targetの角度範囲を操作するには、いくつかの方法が利用可能です。一つ目はTarget.add_instruction()で、Targetの命令に角度を追加設定するための新しいangle_boundsキーワード引数があります。角度範囲を操作するのに、コールバック関数をグローバル WRAP_ANGLE_REGISTRYレジストリに登録することもできます。これはトランスパイラーと WrapAnglesパスに、角度範囲に対してゲートを調整する方法を指示します。推奨パスは次のマイナーリリースで変更される予定ですが、下位互換性のために現在のパスは維持される計画になっています。

コールバック関数は、ゲート角度を表す任意の浮動小数点値のリストと、ゲートが回路内で作用していた量子ビットのインデックスを回路から取得します。そして、角度範囲とその他のTarget制約を尊重しながら、その角度を持ったゲートの等価な回路を表すDAGCircuitを返します。

このコールバック関数を定義してWRAP_ANGLE_REGISTRYに登録する方法の例を次に示します。

import math

from qiskit.circuit import Parameter, Qubit
from qiskit.circuit.library import RZGate
from qiskit.dagcircuit import DAGCircuit
from qiskit.transpiler import Target
from qiskit.transpiler.passes.utils.wrap_angles import WRAP_ANGLE_REGISTRY

target = Target(num_qubits=1)
target.add_instruction(RZGate(Parameter(“theta”)), angle_bounds=[(-math.pi,
math.pi)])

def callback(angles: list[float], qubits: list[int]) -> DAGCircuit:
    “””Callback function to wrap RZ gate angles

    Args:
       angles: The list of floating point parameter values for the instance of RZGate
in
           the circuit
       qubits: The physical qubit indices that this gate is operating on

    Returns:
       The DAGCircuit of the equivalent circuit”””

    angle = angles[0]
    dag = DAGCircuit()
    dag.add_qubits([Qubit()])
    if angle > 0:
       divisor = math.pi
    else:
       divisor = -math.pi
    gate_counts = int(angles[0] // divisor)
    rem = angles[0] % divisor
    for _ in range(gate_counts):
       dag.apply_operation_back(RZGate(math.pi), [dag.qubits[0]], check=True)
    dag.apply_operation_back(RZGate(rem), [dag.qubits[0]], check=True)
    return dag

WRAP_ANGLE_REGISTRY.add_wrapper(“rz”, callback)   

回路トランスパイルのパフォーマンス向上

Qiskit v2.2 は、トランスパイラーに重要な性能向上をもたらします。さまざまなターゲットのさまざまな回路についてのトランスパイラー・ベンチマークであるBenchpressで、Qiskitのデフォルト・トランスパイラーを使用した場合に、このベンチマーク・スイート全体で一貫して平均10〜20%の高速化がトランスパイル・タスクで観察されました。

この性能向上は、Benchpressの複数回の実行と複数のシステムで一貫して観測されているため、トランスパイラー効率の持続的な改善が確認されていると言うことができます。この改善が何から得られているのか正確には分析されていませんが、簡易的な分析からは、多くのコードが Rust に変換され、Rustコンパイラがソースコードを最適化し、観察されたような高速化につながったということが示唆されています。

アップグレードに関する考慮事項

このセクションでは、Qiskit v2.2 にアップグレードする際に留意すべき重要な考慮事項について説明します。これらの多くは、Qiskit がサポートするさまざまなプラットフォームの変更に関連しています。その他のものは、Qiskit自体の今後の非推奨機能に関わるものです。非推奨機能については警告が出力されること、Qiskitの非推奨ポリシーに従って次のメジャー・リリースへの更新時にコードが動作しなくなる可能性があることに注意してください。Qiskitの非推奨化ポリシーについてはこちらをご参照ください。

非推奨機能の警告に対処する方法のガイダンスについては、前回の記事の「非推奨」セクションをご参照ください。このリリースに固有の非推奨の詳細については、こちらを参照してください

Rustバージョンの更新

QiskitをソースからビルドするQiskitユーザーの方は、現在のv2.2リリースでQiskitがサポートする最小RustバージョンがRust 1.79からRust 1.85に更新されていることに注意してください。この変更は、Rustの線形代数ライブラリを新しいバージョンに移行するために必要でした。以前のバージョンやその他のライブラリでは、一部の関連プラットフォームでビルドの問題や数値精度の問題が発生していました。

Python 3.9のサポート終了

Python 3.9はサポート終了となっており、Qiskit SDK v2.2 は、そのサポートを含む最後の Qiskitリリースになります。12月のv2.3リリース以降も最新バージョンのQiskitを引き続き使用するには、PythonバージョンをPython 3.10以降にアップグレードする必要があります。

Intel Macのサポートのダウングレード

Intelプロセッサ (x86-64) で macOSを実行するマシンで Qiskitを使用する場合、Qiskit v2.3以降、デバイスのサポート階層のダウングレードに注意してください。これは、メーカーが Intel Macのサポートを終了したためであり、その結果、GitHubと Azureでの Intel Mac CIランナーの廃止が促進されました。

サーキット・ライブラリでの非推奨機能

サーキット・ライブラリ内の以下のクラスは、Qiskit v2.2で非推奨となり、Qiskit 3.0で削除されます。これらは、対応する新しいゲートに置き換えられました。

  • ExactReciprocal → ExactReciprocalGate
  • LinearAmplitudeFunction → LinearAmplitudeFunctionGate
  • PhaseOracle → PhaseOracleGate
  • PiecewisePolynomialPauliRotations → PiecewisePolynomialPauliRotationsGate
  • QuantumVolume → quantum_volume()

変更の理由を説明するには、サーキット・ライブラリに二つのカテゴリのオブジェクトがあることが重要です。その一つは、量子データに対して数学演算を実行する算術ゲートなど、単一の論理演算を表すオブジェクトで構成され、もう一つは、変分AnsatzやQuantum Volume回路など、特定の構造を持つ回路で構成されています。

Qiskit v1.3 より前は、両方のタイプの多くのオブジェクトが QuantumCircuitのサブクラスで表現されていました。Qiskit v1.3では、いくつかの論理演算に新しい Gateサブクラスが導入され、コンパイラが合成についてより適切な意思決定を行えるようになりました。また、多くの構造化回路に新しい Rustで加速された回路コンストラクタ関数が導入されましたが、それらはより高速で、Primitiveアプリケーションで直接使用した際の動作の信頼性が増しました。

Qiskit v2.1では、非効率な古いオブジェクトのほとんどが非推奨になり、Qiskit v3.0 での削除対象となりました。Qiskit v2.2でもそれらの非推奨は引き継がれ、さらに追加されています。

Qiskit v1.4 のサポート

Qiskit SDK v1.4のバグ修正サポートは、v1.4.5のリリースで間もなく終了します。2025年3月30日のQiskit v2.0のリリースから6か月間、Qiskitチームはいくつかの1.4.xパッチをリリースしてバグ修正サポートを提供してきました。このサポートは、v1.4.5 のリリースで終了します。1.xシリーズをまだ使用している場合は、v2.xへのアップグレードを検討することを強くお勧めします。v1.4シリーズは、2026年3月(v2.0リリースから1年後)まで最低限のセキュリティー・サポートを受け続けますが、定期的なバグ修正は提供されなくなります。

おわりに

以上が、最新リリースの最も重要な詳細でした!今後のQiskitのバージョンについてアイデアを提供したいときには、新機能の要望やバグを報告するGitHub Issueをオープンすることができます。また、次のリリースで何が予定されているかをフォローしたい場合は、Qiskitロードマップをご覧ください

このリリースには多くの人が貢献しました。以下の方々に特に感謝します (アルファベット順)。

Aidan Wagner, Alexander Ivrii, Aqil Ahmad, Archit Chadalawada, Arnau Casau,
Asadullah Bin Rahman, Daniel Puzzuoli, Edwin Navarro, Elena Peña Tapia,
Eli Arbel, Eric Arellano, Erik Chagas Rozal, Gadi Aleksandrowicz, Ian Hincks,
Inho Choi, Jake Lishman, James R. Garrison, Jens Palsberg, Joshua,
Julien Gacon, Jun Doi, Kaelyn Ferris, kaldag, Kalyan Dasgupta, Keli Huang,
Kevin Hartman, Krishan Sharma, littlebullGit, Luciano Bello, Matthew Treinish,
Mostafizur Rahaman Laskar, Phalak, Raynel Sanchez, Rebecca Dimock,
Ricard Santiago Raigada García, Samuele Ferracin, Shelly Garion, Simon Martiel,
Soumyadip Sarkar, Vyom Patel, WhimsyHippo, Will Shanks, and Yael Ben-Haim

このブログ投稿は、Antonio Córcoles、Blake Johnson、Jake Lishman、Julien Gacon、Luciano Bello、Matthew Treinish、Robert Davis、Salvador de la Puente の協力を得て、Kaelyn Ferris によって書かれました。
 


この記事は英語版IBM Researchブログ「Release News: Qiskit SDK v2.2 is here!」(2025年10月20日公開、Qiskit Team著)を翻訳し一部更新したものです。

関連リンク

監訳者

堀井 洋

IBM Quantum Japan 統括部長

立花 隆輝

東京基礎研究所 シニア・テクニカル・スタッフ・メンバー