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étodoto_problem()
de los controladores y proporcionar el argumento de palabra claveinclude_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 Software | Version |
---|---|
qiskit-terra | 0.23.0.dev0+fca8db6 |
qiskit-aer | 0.11.0 |
qiskit-ibmq-provider | 0.19.2 |
qiskit-nature | 0.5.0 |
System information | |
Python version | 3.9.14 |
Python compiler | GCC 12.2.1 20220819 (Red Hat 12.2.1-1) |
Python build | main, Sep 7 2022 00:00:00 |
OS | Linux |
CPUs | 8 |
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.