開発ストラテジー

バージョン管理

Qiskit プロジェクトは、各自異なる機能を実行するいくつかの要素(エレメント) から構成されています。各要素は独立しており、それ単独で機能します。しかしながら、利便性のためにこのリポジトリを提供し、全ての要素を一度にインストールできるように、単一のエントリーポイントのメタパッケージとして提供しています。これによりインストールプロセスが簡略化され、エンドユーザーに統一されたインタフェースを提供できます。ただし、それぞれの Qiskit エレメントは独自のリリースとバージョンをもつため、異なるリポジトリ間でのバージョンを扱う際には注意が必要です。このドキュメントは Qiskit エレメントとメタパッケージ両者のバージョンとリリースの扱いのガイドラインを概略します。

このガイドの残りでは、異なるコンポーネントのバージョン番号を参照するのに、標準のセマンティック バージョニング (Semantic Versioning) 命名規則: Major.Minor.Patch を採用します。例えば、バージョン番号が 0.7.1 だった場合、メジャーバージョンは 0 、マイナーバージョンが 7、そしてパッチバージョンが 1 です。

メタパッケージバージョン

Qiskitメタパッケージバージョンは、追跡対象の各要素のリリースによって決定される独立した値です。 リリースを追跡対象コンポーネントにプッシュする(または要素を追加する)たびに、メタパッケージの要件とバージョンを更新し、新しいリリースを公開する必要があります。 タイミングを要素のリリースと調整して、メタパッケージのリリースが要素のリリースを追跡するようにします。

新しい要素(エレメント) の追加

新しいQiskit要素がメタパッケージ要件に追加されると、メタパッケージのマイナーバージョンを増やす必要があります。

たとえば、メタパッケージが2つの要素 qiskit-aerとqiskit-terraを追跡しており、そのバージョンが 0.7.4であるとします。次に、メタパッケージに含める予定の新しい要素qiskit-ignisをリリースします。メタパッケージに新しい要素を追加するとき、バージョンを0.8.0に増やします。

パッチバージョンの増加

メタパッケージによって既に追跡されているQiskit要素がバグを修正するためのパッチバージョンをリリースする際に、setup.pyの要件を上げてから、メタパッケージのパッチバージョンを増やす必要もあります。

たとえば、メタパッケージが3つの要素 qiskit-terra == 0.8.1qiskit-aer == 0.2.1 および qiskit-ignis == 0.1.4 を追跡していて 現在のバージョン 0.9.6 だとします。qiskit-terraがバグ 0.8.2 を修正するための新しいパッチバージョンをリリースすると、メタパッケージもパッチバージョンとリリースを増やして 0.9.7 にする必要があります。

さらに、メタパッケージ自体には、新しいリリースをプッシュすることで修正する必要があるパッケージングまたはその他のバグが時々あります。 それらがおきたら、パッチバージョンを増やして、破損したリリースと区別する必要があります。 いかなる状況でもpypiから壊れたリリースや古いリリースを削除しないでください。代わりに、パッチバージョンを増やして新しいリリースをアップロードしてください。

マイナーバージョンの増加

メタパッケージに新しい要素を追加することに加え、追跡される要素のマイナーバージョンが増加するたびに、メタパッケージのマイナーバージョンも増加させる必要があります。

たとえば、メタパッケージが2つの要素 qiskit-terra == 0.7.0 および qiskit-aer == 0.1.1 を追跡しており、現在のバージョンが``0.7.5``であるとします。qiskit-aer 要素が 0.2.0 をリリースしたら、新しいリリースに対応するためにメタパッケージのバージョンを 0.8.0 に増やす必要があります。

メジャーバージョンの増加

メジャーバージョンは、他のバージョン番号コンポーネントとは異なります。追跡対象の各要素でロックステップで更新される他のバージョン番号コンポーネントとは異なり、メジャーバージョンは、すべての追跡対象バージョンがバンプされたとき(少なくとも``1.0.0`` の前に)にのみ増加します。現在、すべての要素のメジャーバージョン番号コンポーネントは `` 0`` であり、メジャーバージョンを >= 1 にバンプしてメタリポジトリ内の各追跡要素が安定しているとマークされるまでは、 パッケージバージョンは、メジャーバージョンを増やすべきではありません。

すべての要素が> = 1.0.0になった後のメジャーバージョン番号コンポーネントトラッキングの動作はまだ決定されていません。

Qiskit要素の要件の追跡

メタパッケージとQiskitのバージョン管理に厳密に関連しているわけではありませんが、メタパッケージの要件リストで要素のバージョンを追跡する方法が重要です。 setup.pyにリストされている各要素は、単一のバージョンに固定する必要があります。 つまり、Qiskitの各バージョンでは、追跡対象の要素ごとに1つのバージョンのみをインストールする必要があります。 たとえば、特定の時点での要件リストは次のようになります。

requirements = [
    "qiskit_terra==0.7.0",
    "qiskit-aer==0.1.1",
]

これはデバッグに役立つだけでなく、複数の要素にわたるバージョンの追跡をより透明にするためでもあります。

また、要素をインストールする順序も非常に重要であることを指摘する価値があります。 `` pip``には実際の依存関係ソルバーがありません。つまり、インストールの順序が重要です。 したがって、要素間で要件バージョンが重複したり、要素間で依存関係がある場合、要件リストの順序ですべてが期待どおりにインストールされるようにする必要があります。 インストール時の非互換性のために順序を変更する必要がある場合は、明確に注意する必要があります。

コミュニティーによる拡張

Qiskitはモジュール性を考慮した設計がされています。ここではQiskit コミュニティーとの協働で開発したエクステンションやパッケージ等、各種拡張に関するご紹介をします。

プロバイダー

Qiskit base providerは異なるバックエンド群 (IBM Quantumを通じて提供されているバックエンド等) へのアクセスを提供します。バックエンドとのやり取りをして、どのバックエンドがオンラインなのかを判断したり、特定のバックエンドのインスタンス、プロパティや設定を取得したり、ジョブの実行と管理等を行います。

追加のプロバイダー

  • Decision diagram-based quantum simulator

    - Organization: Johannes Kepler University, Linz, Austria (Alwin Zulehner and Robert Wille)
    - Description: A local provider which allows Qiskit to use decision diagram-based quantum simulation
    - Qiskit Version: 0.7
  • Quantum Inspire

    - Organization: QuTech-Delft
    - Description: A provider for the Quantum Inspire backend
    - Qiskit Version: 0.7
    - More info: Medium Blog and GitHub.

トランスパイラー

量子コンピューティングを実際のハードウェアで実現する鍵が量子回路の最適化です。Qiskitの主要コンポーネントはTranspilerで、特定の変換(Transpiler passes)に基づいて量子回路を操作するフレームワークです。Transpilerは、pass managerによって、ユーザーがカスタマイズされたパスを作成し、パスが指定したルールに基づいて回路を変換できるようにしたものです。加えて、Transpilerのアーキテクチャはモジュール性と拡張性を考慮して設計され、Qiskitユーザが各自のパスを設計し、pass managerで利用し、既存のパスと組み合わせられるようにしました。このように、Transpilerのアーキテクチャは量子回路のより積極的な最適化を可能にします。

追加のパス

  • t|ket〉 optimization & routing pass

    - Organization: Cambridge Quantum Computing
    - Description: Transpiler pass for circuit optimization and mapping to backend using CQC’s t|ket〉compiler.
    - Qiskit Version: 0.7
    - More info: Tutorial Notebook and GitHub.

ツール

Qiskitの新しいツールや機能の拡張は、コミュニティーの発展にとって重要な取組です。新しいツールとは、可視化ツールであったり、Slackとの統合であったり、Jupyterのエクステンションをつくること等です。

追加のツール

  • OpenControls library

    - Organization: Q-CTRL
    - Description: Library of quantum control pulses derived from the open literature.
    - Qiskit Version: 0.7
    - More info: GitHub and Q-CTRL website