Nota

Esta página fue generada a partir de docs/tutorials/08_qcschema.ipynb.

QCSchema#

El QCSchema es un formato de datos estándar para la química cuántica. La versión actual, que ha sido adoptada por varios códigos de química clásica, solo admite la serialización a través de JSON, pero sus documentos indican claramente que también se puede usar HDF5. Por ello, en Qiskit Nature hemos optado por implementar soporte para ambos formatos de datos jerárquicos.

Ahora bien, ¿por qué tenemos un tutorial específicamente sobre este formato? La razón es bastante simple: este es el formato de datos que nuestros controladores (drivers) utilizan internamente para transferir datos entre la computación clásica y Qiskit Nature. Por lo tanto, este tutorial explicará algunos conceptos, en caso de que quieras ser un poco más elaborado con tu interacción con el controlador.

Nota: la compatibilidad con integrales de repulsión electrónica como parte de QCSchema aún no forma parte de la especificación oficial y, por lo tanto, está personalizada para Qiskit Nature. ¡Pero estamos trabajando con los autores de QCSchema para que esta integración sea oficial!

Para los propósitos de este tutorial, estamos usando el PySCFDriver, pero la mayoría de los puntos de discusión también deberían aplicarse a los otros controladores de estructura electrónica.

Primero, construyamos un PySCFDriver y ejecutémoslo:

[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>

Esto es básicamente la abreviatura de lo siguiente:

[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

Hay dos cosas a tener en cuenta aquí: - el problema se solicita específicamente en la base de MO - las integrales de dipolo se manejan por separado (porque el estándar QCSchema actual no admite estos coeficientes)

Lo que esto significa para ti como usuario final, es que también puedes solicitar el problema en otra base de la siguiente manera:

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

Si ahora deseas transformar un problema de AO a la base de MO, necesitas usar BasisTransformer que se explica en un tutorial separado.

Este es el punto, en el que debes comprender que el método to_problem en realidad se basa internamente en el método 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)

Específicamente, extraer el objeto QCSchema del controlador te permite extraer más tarde un BasisTransformer de él, sin tener que extraer manualmente los coeficientes de transformación AO-2-MO de las profundidades del objeto del controlador:

[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.