mcpField
C
cirq

cirq

github.com/kalarislabsその他7339 回インストール3 日前に更新
リポジトリ

cirq について

GoogleのオープンソースPython量子回路フレームワークCirqを使うためのスキルです。回路設計やシミュレーションからノイズ研究、Googleやパートナーのバックエンドでの実験まで扱います。

主な機能

  1. 01量子回路の構築とパラメーター化
  2. 02厳密・ノイズあり回路シミュレーション
  3. 03回路変換とハードウェア向けコンパイル
  4. 04量子ハードウェアプロバイダー連携
  5. 05ノイズモデリングと特性評価
  6. 06実験パターンとパラメータースイープ

活用シーン

  1. 01量子回路の試作とシミュレーション
  2. 02対象ハードウェア向けの回路最適化
  3. 03ノイズ条件による回路動作の比較
  4. 04量子実験でのパラメータースイープ

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/kalarislabs/research-agent-skills --skill cirq

インストール後、Claude Code で/cirqを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
building.md
experiments.md
hardware.md
noise.md
simulation.md
transformation.md

詳細

Cirq - Python による量子コンピューティング

Cirq は、量子コンピューターやシミュレーター上で量子回路を設計、シミュレーション、実行するための Google Quantum AI のオープンソースフレームワークです。

このスキルを使用する場面

次のような場合にこのスキルを使用してください。

  • Python で NISQ 回路を構築、シミュレーション、最適化する
  • Google Quantum AI プロセッサ(cirq-google 経由)またはパートナーのバックエンド(IonQ、Azure Quantum、AQT、Pasqal)でジョブを実行する
  • ノイズをモデル化し、ハードウェアのゲートセットにコンパイルし、特性評価実験を設計する
  • パラメーターのスイープ、トランスフォーマー、ReCirq の実験パターンを使用する

IBM ハードウェアには qiskit、自動微分を使用する量子 ML には pennylane、物理シミュレーションには qutip を使用してください。

インストール

Python 3.11 以降が必要です。現在の安定版リリースは 1.6.1(2025 年 8 月)です。ベンダーのパッケージも同じバージョン番号を使用します。

uv pip install "cirq==1.6.1"

ハードウェアとの統合の場合(再現性を確保するため、一致するバージョンを指定してください)。

# Google Quantum Engine (requires approved GCP project access)
uv pip install "cirq-google==1.6.1"

# IonQ
uv pip install "cirq-ionq==1.6.1"

# AQT (Alpine Quantum Technologies)
uv pip install "cirq-aqt==1.6.1"

# Pasqal
uv pip install "cirq-pasqal==1.6.1"

# Azure Quantum (IonQ, Honeywell/Quantinuum backends)
uv pip install "azure-quantum[cirq]"

開発中に最新機能を使用する場合は、バージョンの固定を省略してください。本番環境やハードウェアで実行する場合は、すべてのパッケージを同じ Cirq リリースに固定してください。

クイックスタート

基本的な回路
import cirq
import numpy as np

# Create qubits
q0, q1 = cirq.LineQubit.range(2)

# Build circuit
circuit = cirq.Circuit(
    cirq.H(q0),              # Hadamard on q0
    cirq.CNOT(q0, q1),       # CNOT with q0 control, q1 target
    cirq.measure(q0, q1, key='result')
)

print(circuit)

# Simulate
simulator = cirq.Simulator()
result = simulator.run(circuit, repetitions=1000)

# Display results
print(result.histogram(key='result'))
パラメーター化された回路
import sympy

# Define symbolic parameter
theta = sympy.Symbol('theta')

# Create parameterized circuit
circuit = cirq.Circuit(
    cirq.ry(theta)(q0),
    cirq.measure(q0, key='m')
)

# Sweep over parameter values
sweep = cirq.Linspace('theta', start=0, stop=2*np.pi, length=20)
results = simulator.run_sweep(circuit, params=sweep, repetitions=1000)

# Process results
for params, result in zip(sweep, results):
    theta_val = params['theta']
    counts = result.histogram(key='m')
    print(f"θ={theta_val:.2f}: {counts}")

主な機能

回路の構築

量子ビット、ゲート、操作、カスタムゲート、回路パターンなど、量子回路の構築に関する詳しい情報については、次を参照してください。

主なトピック:

  • 量子ビットの種類(GridQubit、LineQubit、NamedQubit)
  • 1 量子ビットゲートと 2 量子ビットゲート
  • パラメーター化されたゲートと操作
  • カスタムゲートの分解
  • モーメントを使った回路の編成
  • 標準的な回路パターン(ベル状態、GHZ、QFT)
  • インポート/エクスポート(OpenQASM、JSON)
  • 量子ディットとオブザーバブルの操作
シミュレーション

厳密なシミュレーション、ノイズを含むシミュレーション、パラメーターのスイープ、Quantum Virtual Machine など、量子回路のシミュレーションに関する詳しい情報については、次を参照してください。

主なトピック:

  • 厳密なシミュレーション(状態ベクトル、密度行列)
  • サンプリングと測定
  • パラメーターのスイープ(単一および複数のパラメーター)
  • ノイズを含むシミュレーション
  • 状態ヒストグラムと可視化
  • Quantum Virtual Machine(QVM)
  • 期待値とオブザーバブル
  • パフォーマンスの最適化
回路変換

量子回路の最適化、コンパイル、操作に関する情報については、次を参照してください。

主なトピック:

  • トランスフォーマーフレームワーク
  • ゲートの分解
  • 回路の最適化(ゲートの統合、Z ゲートの排除、無視できる操作の削除)
  • ハードウェア向けの回路コンパイル
  • 量子ビットのルーティングと SWAP の挿入
  • カスタムトランスフォーマー
  • 変換パイプライン
ハードウェアとの統合

さまざまなプロバイダーの実際の量子ハードウェアで回路を実行する方法については、次を参照してください。

対応プロバイダー:

  • Google Quantum AI(cirq-google)— Quantum Engine 経由の Sycamore、Weber、Willow プロセッサ(アクセス制限あり。承認済みの GCP プロジェクトが必要です)
  • IonQ(cirq-ionq)— トラップイオン型 QPU とシミュレーター
  • Azure Quantum(azure-quantum[cirq])— IonQ および Honeywell/Quantinuum のバックエンド
  • AQT(cirq-aqt)— Alpine Quantum Technologies
  • Pasqal(cirq-pasqal)— 中性原子デバイス

デバイスの表現、量子ビットの選択、認証、ジョブ管理、ハードウェア向けの回路最適化などのトピックを扱います。Google Cloud のセットアップについては、アクセスと認証を参照してください。

ノイズモデリング

ノイズモデリング、ノイズシミュレーション、特性評価、エラー緩和に関する情報は、以下を参照してください。

主なトピック:

  • ノイズチャネル(脱分極、振幅減衰、位相減衰)
  • ノイズモデル(定数、ゲート固有、量子ビット固有、熱)
  • 回路へのノイズの追加
  • 読み出しノイズ
  • ノイズの特性評価(ランダム化ベンチマーキング、XEB)
  • ノイズの可視化(ヒートマップ)
  • エラー緩和手法
量子実験

実験の設計、パラメータスイープ、データ収集、ReCirq フレームワークの使用に関する情報は、以下を参照してください。

主なトピック:

  • 実験設計パターン
  • パラメータスイープとデータ収集
  • ReCirq フレームワークの構成
  • 一般的なアルゴリズム(VQE、QAOA、QPE)
  • データ分析と可視化
  • 統計分析と忠実度の推定
  • 並列データ収集

一般的なパターン

変分アルゴリズムのテンプレート
import scipy.optimize

def variational_algorithm(ansatz, cost_function, initial_params):
    """Template for variational quantum algorithms."""

    def objective(params):
        circuit = ansatz(params)
        simulator = cirq.Simulator()
        result = simulator.simulate(circuit)
        return cost_function(result)

    # Optimize
    result = scipy.optimize.minimize(
        objective,
        initial_params,
        method='COBYLA'
    )

    return result

# Define ansatz
def my_ansatz(params):
    q = cirq.LineQubit(0)
    return cirq.Circuit(
        cirq.ry(params[0])(q),
        cirq.rz(params[1])(q)
    )

# Define cost function
def my_cost(result):
    state = result.final_state_vector
    # Calculate cost based on state
    return np.real(state[0])

# Run optimization
result = variational_algorithm(my_ansatz, my_cost, [0.0, 0.0])
ハードウェア実行のテンプレート
import os

def run_on_hardware(circuit, provider='google', processor_id=None, repetitions=1000):
    """Template for running on quantum hardware."""

    if provider == 'google':
        import cirq_google as cg

        project_id = os.environ['GOOGLE_CLOUD_PROJECT']
        engine = cg.Engine(project_id=project_id)

        # List available processors: engine.list_processors()
        processor_id = processor_id or 'weber'  # use your assigned processor_id
        sampler = engine.get_sampler(processor_id=processor_id)
        return sampler.run(circuit, repetitions=repetitions)

    elif provider == 'ionq':
        import cirq_ionq as ionq

        # Requires IONQ_API_KEY in environment
        service = ionq.Service()
        return service.run(circuit, repetitions=repetitions, target='qpu')

    elif provider == 'azure':
        from azure.quantum.cirq import AzureQuantumService

        service = AzureQuantumService(
            resource_id=os.environ['AZURE_QUANTUM_RESOURCE_ID'],
            location=os.environ['AZURE_QUANTUM_LOCATION'],
        )
        return service.run(circuit, repetitions=repetitions, target='ionq.qpu')

    else:
        raise ValueError(f"Unknown provider: {provider}")
ノイズ研究のテンプレート
def noise_comparison_study(circuit, noise_levels):
    """Compare circuit performance at different noise levels."""

    results = {}

    for noise_level in noise_levels:
        # Create noisy circuit
        noisy_circuit = circuit.with_noise(cirq.depolarize(p=noise_level))

        # Simulate
        simulator = cirq.DensityMatrixSimulator()
        result = simulator.run(noisy_circuit, repetitions=1000)

        # Analyze
        results[noise_level] = {
            'histogram': result.histogram(key='result'),
            'dominant_state': max(
                result.histogram(key='result').items(),
                key=lambda x: x[1]
            )
        }

    return results

# Run study
noise_levels = [0.0, 0.001, 0.01, 0.05, 0.1]
results = noise_comparison_study(circuit, noise_levels)

ベストプラクティス

  1. 回路設計

    • トポロジーに適した量子ビットタイプを使用します
    • 回路をモジュール化し、再利用可能にします
    • 測定には内容が分かるキーを付けます
    • 実行前に、回路がデバイスの制約を満たしていることを検証します
  2. シミュレーション

    • 純粋状態には状態ベクトルシミュレーションを使用します(より効率的です)
    • 密度行列シミュレーションは必要な場合にのみ使用します(混合状態、ノイズ)
    • 個別の実行ではなく、パラメータスイープを活用します
    • 大規模システムではメモリ使用量を監視します(2^n は急速に増加します)
  3. ハードウェア実行

    • 必ず最初にシミュレーターでテストします
    • キャリブレーションデータを使って最適な量子ビットを選択します
    • 対象ハードウェアのゲートセットに合わせて回路を最適化します
    • 本番実行ではエラー緩和を実装します
    • コストの高いハードウェア実行の結果は、すぐに保存します
  4. 回路の最適化

    • 高水準の組み込みトランスフォーマーから始めます
    • 複数の最適化を順番に組み合わせます
    • 回路の深さとゲート数の削減を追跡します
    • 変換後に正しさを検証します
  5. ノイズモデリング

    • キャリブレーションデータに基づく現実的なノイズモデルを使用します
    • すべてのエラー源(ゲート、デコヒーレンス、読み出し)を含めます
    • 緩和を行う前に特性を評価します
    • ノイズの蓄積を最小限に抑えるため、回路を浅く保ちます
  6. 実験

    • 実験を明確に分離して構成します(データ生成、収集、分析)
    • 再現性を確保するため、ReCirq のパターンを使用します
    • 中間結果をこまめに保存します
    • 独立したタスクを並列化します
    • メタデータを含め、十分に文書化します

追加リソース

よくある問題

回路がハードウェアに対して深すぎる場合:

  • 回路最適化トランスフォーマーを使って深さを削減します
  • 最適化手法については transformation.md を参照してください

シミュレーションでメモリの問題が発生する場合:

  • 密度行列シミュレーターから状態ベクトルシミュレーターに切り替えます
  • 量子ビット数を減らすか、クリフォード回路にはスタビライザーシミュレーターを使用します

デバイス検証エラーが発生する場合:

  • device.metadata.nx_graph で量子ビットの接続性を確認します
  • ゲートをデバイス固有のゲートセットに分解します
  • デバイス固有のコンパイルについては hardware.md を参照してください

ノイズシミュレーションが遅すぎる場合:

  • 密度行列シミュレーションは O(2^2n) です。量子ビット数を減らすことを検討してください
  • 重要な操作のみにノイズモデルを選択的に適用します
  • パフォーマンスの最適化については simulation.md を参照してください

エージェントの運用手順

  1. 環境を確認します。 ライブラリのバージョン、単位、座標系、データ形式(FITS、CIF、HDF5、netCDF)を確認します。
  2. 入力を明確にします。 データまたはユーザーから形式、識別子、パラメーターを確認します。結果を左右する値は推測せず、質問してください。
  3. まず小規模に実行します。 小さなグリッド、領域、またはサブセットで実行し、物理的に妥当か確認します。
  4. 上記の手順と参考資料に従って、タスク全体を実行します。
  5. 結果を検証します。 単位と次元の整合性、保存則または既知の極限、数値的な収束を確認します。
  6. 報告します。 実行した内容(バージョン、コマンド、パラメーター)、確認した内容、未解決の不確実性を示します。
次のような場合対応
結果が既知の物理的限界に反する報告する前に、単位、境界条件、ソルバーの許容誤差を確認します。
これらの手順にある関数、フラグ、またはエンドポイントがインストール済みのバージョンに存在しないインストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認し、適宜対応してユーザーに伝えます。API をでっち上げてはいけません。
必須の入力、識別子、またはパラメーターが曖昧ユーザーに確認するか、実行前に仮定を明示します。

整合性に関するルール

  • 結果、パラメーター、識別子、引用、統計値を決して捏造しないでください。実行または検証できない場合は、その旨を明確に伝えます。
  • 定量的な結果には必ず、不確実性と数値許容誤差を併記します。
  • ここに記載されたバージョン固有の情報は古くなっている可能性があるものとして扱い、インストール済みバージョンの公式ドキュメントで確認します。
  • 費用が発生する操作、共有 GPU やクラウドのクォータを消費する操作、個人データや患者データに触れる操作、または取り消せない操作を行う前に、ユーザーに確認します。

関連スキル

  • pennylane:自動微分機能を備えた、ハードウェアに依存しない量子機械学習フレームワークです。
  • qiskit:Qiskit および IBM Quantum Runtime を使用して、量子回路を構築、シミュレーション、トランスパイル、実行します。

コメント