注釈

このページは docs/tutorials/08_qschema.ipynb から生成されました。

QCSchema#

QCSchema は、量子化学のための標準データフォーマットです。 複数の古典的な化学コードで採用されている現在のバージョンは、 JSON によるシリアル化のみをサポートしていますが、ドキュメントには HDF5 も使用できると明確に示されています。 そのため、Qiskit Natureでは両方の階層的データフォーマットを実装サポートすることにしました。

さて、なぜこのフォーマットについて特にチュートリアルがあるのでしょうか? 理由は非常に簡単です。古典計算と Qiskit Nature の間でデータをやりとりするために私たちのドライバーが内部で使用しているデータフォーマットであるからです。 したがって、このチュートリアルでは、いくつかの概念を説明することで、ドライバの相互作用をもう少し詳しく知ることができるようにします。

注意: QCSchemaの一部としての電子反発積分のサポートは、まだ公式仕様に含まれていないため、Qiskit Natureにカスタム化されています。しかし、QCSchemaの作者と協力してこの統合を公式にするために作業しています。

このチュートリアルでは、 PySCFDriver を使用していますが、ほとんどの議論ポイントは他の電子構造ドライバにもあてはまるはずです。

まず、PySCFDriver を構築して実行してみましょう。

[1]:
from qiskit_nature.second_q.drivers import PySCFDriver

driver = PySCFDriver()

problem = driver.run()
print(problem)
<qiskit_nature.second_q.problems.electronic_structure_problem.ElectronicStructureProblem object at 0x155041be1250>

これは基本的に次のような短いものです:

[2]:
from qiskit_nature.second_q.problems import ElectronicBasis

driver.run_pyscf()
problem = driver.to_problem(basis=ElectronicBasis.MO, include_dipole=True)
print(problem.basis)
ElectronicBasis.MO

ここで注意すべきことが2つあります。- この問題は、特にMO基底で要求されています。双極子積分は別に扱われます (現在のQCSchema標準では、これらの係数をサポートしていないため)。

これがエンドユーザーにとってどういうことを意味するかというと、以下のような別の方法で問題をリクエストすることもできるということです。

[3]:
ao_problem = driver.to_problem(basis=ElectronicBasis.AO)
print(ao_problem.basis)
ElectronicBasis.AO

AO の問題を MO ベースに変換したい場合は、 個別のチュートリアル で説明されている BasisTransformer を使用する必要があります。

ここで、to_problem メソッドが実際には to_qcschema メソッドに内部的に依存していることを理解する必要があります。

[4]:
from qiskit_nature.second_q.formats.qcschema_translator import qcschema_to_problem

qcschema = driver.to_qcschema()
ao_problem = qcschema_to_problem(qcschema, basis=ElectronicBasis.AO)

QCSchema オブジェクトをドライバーから抽出することにより、後で BasisTransformer を抽出することができます。 ドライバーオブジェクトの深いところから AO-2-MO 変換係数を手動で掘り起こす必要はありません。

[5]:
from qiskit_nature.second_q.formats.qcschema_translator import get_ao_to_mo_from_qcschema

basis_transformer = get_ao_to_mo_from_qcschema(qcschema)
[6]:
mo_problem = basis_transformer.transform(ao_problem)
print(mo_problem.basis)
ElectronicBasis.MO
[7]:
import qiskit.tools.jupyter

%qiskit_version_table
%qiskit_copyright

Version Information

Qiskit SoftwareVersion
qiskit-terra0.23.0.dev0+fca8db6
qiskit-aer0.11.0
qiskit-ibmq-provider0.19.2
qiskit-nature0.5.0
System information
Python version3.9.14
Python compilerGCC 12.2.1 20220819 (Red Hat 12.2.1-1)
Python buildmain, Sep 7 2022 00:00:00
OSLinux
CPUs8
Memory (Gb)62.501182556152344
Fri Oct 21 15:48:48 2022 CEST

This code is a part of Qiskit

© Copyright IBM 2017, 2022.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.