Nota

Esta página fue generada a partir de docs/tutorials/09_properties.ipynb.

Propiedades - o - Fábricas de Operador#

Qiskit Nature tiene varias «propiedades» integradas. Estos objetos son efectivamente fábricas de operadores, ya que permiten la programación de esquemas de operadores basados en un conjunto mínimo de información requerida. Algunos ejemplos comúnmente utilizados son las propiedades ParticleNumber, AngularMomentum y Magnetization, todas las cuales toman solo el tamaño del sistema como su única entrada y generan un SparseLabelOp del tamaño requerido.

Estas propiedades se pueden registrar en una instancia de problem que hará que se evalúen una vez que se haya encontrado un estado fundamental y/o estados excitados de ese problema. A continuación, explicaremos el concepto general de cómo funciona esto.

La clase base BaseProblem dicta la existencia del atributo .properties en cualquier instancia tipo problem. Este atributo es del tipo PropertiesContainer, que es un objeto que puede contener como máximo una instancia de cualquier SparseLabelOpsFactory (o clase de propiedad, como comúnmente las llamamos).

[1]:
from qiskit_nature.second_q.problems import BaseProblem

dummy_hamiltonian = None

base_problem = BaseProblem(dummy_hamiltonian)
print(base_problem.properties)
<qiskit_nature.second_q.problems.properties_container.PropertiesContainer object at 0x14c01089daf0>

Ahora puedes modificar el contenido de PropertiesContainer a tu gusto:

[2]:
from qiskit_nature.second_q.properties import AngularMomentum

print("AngularMomentum is in problem.properties:", AngularMomentum in base_problem.properties)

print("Adding AngularMomentum to problem.properties...")
base_problem.properties.add(AngularMomentum(2))

print("AngularMomentum is in problem.properties:", AngularMomentum in base_problem.properties)

print("Discarding AngularMomentum from problem.properties...")
base_problem.properties.discard(AngularMomentum)

print("AngularMomentum is in problem.properties:", AngularMomentum in base_problem.properties)
AngularMomentum is in problem.properties: False
Adding AngularMomentum to problem.properties...
AngularMomentum is in problem.properties: True
Discarding AngularMomentum from problem.properties...
AngularMomentum is in problem.properties: False

Las subclases específicas de BaseProblem para las diversas pilas como la estructura electrónica, la estructura vibracional o los modelos de retícula hacen que las cosas sean más simples para ti, porque proporcionan atributos directos para las propiedades integradas de Qiskit Nature:

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

es_problem = PySCFDriver().run()

print(es_problem.properties.particle_number)
print(es_problem.properties.angular_momentum)
print(es_problem.properties.magnetization)
print(es_problem.properties.electronic_dipole_moment)
print(es_problem.properties.electronic_density)
<qiskit_nature.second_q.properties.particle_number.ParticleNumber object at 0x14bfa1aa5b80>
<qiskit_nature.second_q.properties.angular_momentum.AngularMomentum object at 0x14bfa1aa5a60>
<qiskit_nature.second_q.properties.magnetization.Magnetization object at 0x14bfa1aa5ac0>
<qiskit_nature.second_q.properties.dipole_moment.ElectronicDipoleMoment object at 0x14bfa1aa5f70>
None

Ten en cuenta que ElectronicDipoleMoment se completa de forma predeterminada. Para excluirlo, puedes usar el método to_problem() de los controladores y proporcionar el argumento de palabra clave include_dipole=False. Consulta la documentación de los controladores para obtener más detalles.

Puedes ver que todas las propiedades vienen precargadas excepto ElectronicDensity. Pero esto es fácil de agregar:

[4]:
from qiskit_nature.second_q.properties import ElectronicDensity

density = ElectronicDensity.from_orbital_occupation(
    es_problem.orbital_occupations,
    es_problem.orbital_occupations_b,
)

es_problem.properties.electronic_density = density

Los mismos conceptos se aplican al VibrationalStructureProblem y al LatticeModelProblem.

[5]:
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 16:22:12 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.