Notas de la versión de Qiskit 0.19
0.19.6
Terra 0.14.2
Sin cambios
Aer 0.5.2
Sin cambios
Ignis 0.3.3
Notas de actualización
- Se ha añadido un nuevo requisito scikit-learn a la lista de requisitos. Esta dependencia se añadió en la versión 0.3.0, pero no se expuso correctamente como tal en dicha versión. Esto daría lugar a un
ImportErrorsi se importara el móduloqiskit.ignis.measurement.discriminator.iq_discriminators. Ahora aparece correctamente en la lista de dependencias para quescikit-learnse instale con qiskit-ignis.
Corrección de errores
- Corrige un problema en qiskit-ignis 0.3.2 que podría plantear un
ImportErrorcuandoqiskit.ignis.verification.tomography.fitters.process_fitterfue importado sincvxpyser instalado.
Aqua 0.7.3
Sin cambios
IBM Proveedor Q 0.7.2
Sin cambios
0.19.5
Terra 0.14.2
Sin cambios
Aer 0.5.2
Sin cambios
Ignis 0.3.2
Corrección de errores
- El método
qiskit.ignis.verification.TomographyFitter.fit()ha mejorado la lógica de detección del ajustador por defecto. Anteriormente, se utilizaba el método de ajustecvxsiempre que se instalaba cvxpy. Sin embargo, era posible instalar cvxpy sin un solucionador SDP que funcionara para el métodocvxfitter. Esta lógica se ha reelaborado para que el método de ajustecvxsólo se utilice sicvxpyestá instalado y existe un solucionador SDP que se pueda utilizar. En caso contrario, se utiliza el ajustadorlstsq. - Corrige un caso extremo en
qiskit.ignis.mitigation.measurement.fitters.MeasurementFitter.apply()para la entrada que tiene etiquetas de estado no válidas o incorrectas que no coinciden con el circuito de calibración. Anteriormente, esto no daba error y sólo devolvía un resultado vacío. En su lugar, ahora este caso se captura correctamente y se lanza una excepciónQiskitErrorcuando se utilizan etiquetas incorrectas.
Aqua 0.7.3
Notas de actualización
- La dependencia cvxpy, necesaria para el clasificador svm, se ha eliminado de la lista de requisitos y se ha convertido en una dependencia opcional. Esto se debe a que la instalación de cvxpy no es fluida en todos los entornos y a menudo requiere que se instale un compilador para ejecutarse. Para utilizar el clasificador svm ahora tendrá que instalar cvxpy ejecutando
pip install cvxpy<1.1.0o instalarlo con aqua ejecutandopip install qiskit-aqua[cvx].
Corrección de errores
- El método
composedelCircuitOputilizabaQuantumCircuit.combine, que se ha cambiado para utilizarQuantumCircuit.compose. El uso de combine conduce al problema de que la composición de un operador con unCircuitOpbasado en un registro con nombre no encadena los operadores sino que los apila. E.g. al componerZ ^ 2con un circuito basado en un registro con nombre de 2 qubits se obtuvo un operador de 4 qubits en lugar de uno de 2 qubits. - El método
MatrixOp.to_instructionantes devolvía un operador y no una instrucción. Este método ha sido actualizado para devolver una Instrucción. Tenga en cuenta que esto sólo funciona si el operador primitivo es unitario, de lo contrario se produce un error en la construcción de la instrucción. - El método
__hash__de la clasePauliOputilizaba el métodoid()que impide que las comparaciones de conjuntos funcionen como se espera ya que dependen de tablas hash y los objetos idénticos utilizados no tienen hashes idénticos. Ahora, la implementación utiliza un hash de la representación de la cadena en línea con la implementación en la clasePauli.
IBM Proveedor Q 0.7.2
Sin cambios
0.19.4
Terra 0.14.2
Notas de actualización
- Anteriormente, los convertidores
circuit_to_gateycircuit_to_instructionincluían automáticamente la puerta o instrucción generada en elSessionEquivalenceLibraryactivo. Estos convertidores aceptan ahora un argumento opcional de palabra claveequivalence_librarypara especificar si las instancias convertidas deben registrarse y dónde. El comportamiento por defecto es no registrar la instancia convertida.
Corrección de errores
- Las implementaciones de la puerta X multicontrolada (
MCXGrayCode,MCXRecursiveyMCXVChain) han modificado sus propiedadesnamepara describir con mayor precisión su implementación (mcx_gray,mcx_recursiveymcx_vchainrespectivamente.) Anteriormente, estas puertas compartían el nombremcx` with ``MCXGate, lo que provocaba que estas puertas se transpilaran y simularan incorrectamente. ControlledGateinstancias con un conjuntoctrl_stateen algunos casos no se evaluaban como iguales, incluso si las puertas comparadas eran equivalentes. Esto se ha resuelto.- Corregida la conversión de unidades SI para
qiskit.pulse.SetFrequency. La instrucciónSetFrequencydebe estar en Hz en el frontend y tiene que convertirse a GHz cuandoSetFrequencyse convierte enPulseQobjInstruction. - Los controles abiertos se aplicaron modificando la definición de una puerta. Sin embargo, cuando la puerta ya existe en la base, esta definición no se utiliza, lo que da lugar a circuitos incorrectos enviados a un backend. Esto modifica el desenrollador para que emita la definición si encuentra una puerta controlada con los controles abiertos.
Aer 0.5.2
Sin cambios
Ignis 0.3.0
Sin cambios
Aqua 0.7.2
Preludio
El cálculo de la expectativa VQE con Aer qasm_simulator ahora tiene por defecto un cálculo que tiene el comportamiento de ruido de disparo esperado.
Notas de actualización
- cvxpy está ahora en la lista de requisitos como dependencia de qiskit-aqua. Se utiliza para el solucionador de programas cuadráticos que forma parte de
qiskit.aqua.algorithms.QSVM. Anteriormente,cvxoptera una dependencia opcional que debía instalarse para utilizar esta funcionalidad. Esto ya no es necesario ya que cvxpy se instalará con qiskit-aqua. - Para la tomografía de estados ejecutada como parte de
qiskit.aqua.algorithms.HHLcon un backend QASM, la función de ajuste de la tomografíaqiskit.ignis.verification.StateTomographyFitter.fit()ahora se llama explícitamente con el método establecido enlstsqpara utilizar siempre el ajuste por mínimos cuadrados. Anteriormente intentaba utilizar de forma oportunista el instaladorcvxsicvxpyestaba instalado. Pero, el ajustadorcvxdepende de una instalación específicamente configuradacvxpycon un solucionador SDP instalado como parte decvxpyque no siempre está presente en un entorno concvxpyinstalado. - El cálculo de expectativas VQE mediante la instrucción
qiskit.providers.aer.extensions.SnapshotExpectationValuede qiskit-aer ya no está activado por defecto. Esto se cambió para ser el valor por defecto en 0.7.0 porque es significativamente más rápido, pero condujo a resultados ideales inesperados sin ruido de disparo (ver #1013 para más detalles). El valor por defecto ha vuelto a cambiar para ajustarse a las expectativas de los usuarios. Ahora se puede optar por utilizar el cálculo de expectativas más rápido estableciendo el nuevo kwarginclude_customenTrueen el constructorqiskit.aqua.algorithms.VQE.
Nuevas funciones
- Se ha añadido un nuevo kwarg
include_customal constructor deqiskit.aqua.algorithms.VQEy sus subclases (principalmenteqiskit.aqua.algorithms.QAOA). Cuando se establece en true y el kwargexpectationse establece enNone(el valor predeterminado), esto permitirá el uso del cálculo de expectativas VQE con la instrucciónqasm_simulatorqiskit.providers.aer.extensions.SnapshotExpectationValuede Aer. El cálculo especial basado en instantáneas Aer es mucho más rápido, pero con una salida ideal similar a la del simulador de vectores de estado.
IBM Proveedor Q 0.7.2
Sin cambios
0.19.3
Terra 0.14.1
Sin cambios
Aer 0.5.2
Corrección de errores
- Se ha corregido un error por el que los simuladores de vectores de estado y unitarios ejecutaban un número de disparos (en paralelo) igual al número de subprocesos de la CPU en lugar de ejecutar un único disparo.
- Corrige las instrucciones de puerta qobj "diagonal" que se aplican incorrectamente en el método del Simulador Qasm de matriz de densidad.
- Se corrige un error por el que las puertas condicionales no se aplicaban correctamente en el método de simulación de matriz de densidad.
- Corrección de errores en la puerta CZ y la puerta Z para los métodos "density_matrix_gpu" y "density_matrix_thrust" QasmSimulator.
- Se soluciona un problema por el que no se comprobaban los requisitos de memoria de la simulación en QasmSimulator cuando se utilizaba un método de simulación no automático.
- Se ha corregido una fuga de memoria que afectaba a los métodos del simulador de GPU
Ignis 0.3.0
Sin cambios
Aqua 0.7.1
Sin cambios
IBM Proveedor Q 0.7.2
Corrección de errores
qiskit.provider.ibmq.IBMQBackend.jobs()devolverá ahora la lista correcta de objetosIBMQJobcuando el kwargstatusse establezca en'RUNNING'. Correcciones #523- Los metadatos del paquete se han actualizado para reflejar correctamente la dependencia de
qiskit-terra>= 0.14.0. Esta dependencia se añadió implícitamente como parte de la versión 0.7.0, pero no se reflejó en los requisitos del paquete, por lo que antes era posible instalarqiskit-ibmq-providercon una versión deqiskit-terrademasiado antigua. Correcciones #677
0.19.0
Terra 0.14.0
Preludio
La versión 0.14.0 incluye varias novedades y correcciones de errores. El mayor cambio de esta versión es la introducción de una biblioteca de circuitos cuánticos en qiskit.circuit.libraryque contiene algunas familias de circuitos de interés.
La biblioteca de circuitos ofrece a los usuarios acceso a un rico conjunto de familias de circuitos bien estudiados, cuyas instancias pueden utilizarse como puntos de referencia, como bloques de construcción para construir circuitos más complejos o como herramienta para explorar la ventaja computacional cuántica sobre la clásica. El contenido de esta biblioteca seguirá creciendo y madurando.
La versión inicial de la biblioteca de circuitos contiene:
standard_gatescompuertas de ancho fijo: son compuertas de ancho fijo utilizadas habitualmente como bloques de construcción primitivos, que constan de compuertas de 1, 2 y 3 qubits. Por ejemploXGate,RZZGateyCSWAPGate. La antigua ubicación de estas puertas enqiskit.extensions.standardha quedado obsoleta.generalized_gatesson familias que pueden generalizarse a un número arbitrario de qubits, por ejemplo aPermutationoGMS(puerta global Molmer-Sorensen).boolean_logic: circuitos que transforman los estados de base según funciones lógicas booleanas simples, comoADDoXOR.arithmeticun conjunto de circuitos para hacer aritmética clásica comoWeightedAdderyIntegerComparator.basis_changescircuitos como la transformada cuántica de Fourier,QFTque aplican matemáticamente cambios de base.n_localpara crear fácilmente grandes circuitos con capas de rotación y entrelazamiento, tales comoTwoLocalque utiliza rotaciones de un solo qubit y entrelazamientos de dos qubits.data_preparationcircuitos que toman datos de entrada clásicos y los codifican en un estado cuántico difícil de simular, p. ej.PauliFeatureMapoZZFeatureMap.- Otros circuitos que han resultado interesantes en la literatura, tales como
QuantumVolume,GraphStateoIQP.
Para facilitar el uso de estos circuitos como bloques de construcción, hemos introducido un compose() método de qiskit.circuit.QuantumCircuit para la composición de circuitos, ya sea con otros circuitos (soldándolos por los extremos y, opcionalmente, permutando los hilos) o con otras puertas más sencillas:
>>> lhs.compose(rhs, qubits=[3, 2], inplace=True) ┌───┐ ┌─────┐ ┌───┐
lqr_1_0: ───┤ H ├─── rqr_0: ──■──┤ Tdg ├ lqr_1_0: ───┤ H ├───────────────
├───┤ ┌─┴─┐└─────┘ ├───┤
lqr_1_1: ───┤ X ├─── rqr_1: ┤ X ├─────── lqr_1_1: ───┤ X ├───────────────
┌──┴───┴──┐ └───┘ ┌──┴───┴──┐┌───┐
lqr_1_2: ┤ U1(0.1) ├ + = lqr_1_2: ┤ U1(0.1) ├┤ X ├───────
└─────────┘ └─────────┘└─┬─┘┌─────┐
lqr_2_0: ─────■───── lqr_2_0: ─────■───────■──┤ Tdg ├
┌─┴─┐ ┌─┴─┐ └─────┘
lqr_2_1: ───┤ X ├─── lqr_2_1: ───┤ X ├───────────────
└───┘ └───┘
lcr_0: 0 ═══════════ lcr_0: 0 ═══════════════════════
lcr_1: 0 ═══════════ lcr_1: 0 ═══════════════════════Con esto, los circuitos de Qiskit ya no asumen un estado inicial implícito de , y no se dibujarán con este estado inicial. El estado inicial todo cero se sigue asumiendo en un backend cuando se ejecuta un circuito.
Nuevas funciones
-
Se ha añadido un nuevo método
has_entry()a la claseqiskit.circuit.EquivalenceLibrarypara comprobar rápidamente si una puerta determinada tiene alguna descomposición conocida en la biblioteca. -
Una nueva clase
IQPpara construir un circuito polinómico cuántico instantáneo, se ha añadido al módulo de biblioteca de circuitosqiskit.circuit.library. -
Se ha añadido un nuevo
compose()aqiskit.circuit.QuantumCircuit. Permite componer dos circuitos cuánticos sin tener que convertir uno en puerta o instrucción. También permite permutaciones de qubits/clbits en el punto de composición, así como la modificación opcional in situ. También puede utilizarse en lugar deappend()ya que también permite componer instrucciones y operadores en el circuito. -
qiskit.circuit.library.Diagonala la biblioteca de circuitos. Estos circuitos implementan operadores cuánticos diagonales (formados por elementos distintos de cero sólo en la diagonal). El simulador Aer las simula con más eficacia que las matrices densas. -
Añade el método
from_label()a la claseqiskit.quantum_info.Cliffordpara inicializar como el producto tensorial de compuertas single-qubit I, X, Y, Z, H, o S. -
El transformador de programación
qiskit.pulse.reschedule.compress_pulses()realiza un paso de optimización para reducir el uso de memoria de forma de onda en hardware sustituyendo múltiples instancias idénticas de un pulso en una programación de pulsos por un único pulso. Por ejemplo:from qiskit.pulse import reschedule schedules = [] for _ in range(2): schedule = Schedule() drive_channel = DriveChannel(0) schedule += Play(SamplePulse([0.0, 0.1]), drive_channel) schedule += Play(SamplePulse([0.0, 0.1]), drive_channel) schedules.append(schedule) compressed_schedules = reschedule.compress_pulses(schedules) -
El sitio
qiskit.transpiler.Layouttiene un nuevo métodoreorder_bits()que se utiliza para reordenar una lista de qubits virtuales basándose en el objeto layout. -
Se han añadido dos nuevos métodos
qiskit.providers.models.PulseBackendConfigurationpara interactuar con los canales.get_channel_qubits()para obtener una lista de todos los qubits operados por el canal dado yget_qubit_channel()para obtener una lista de canales que operan en el qubit dado.
-
Se introducen nuevos
qiskit.extensions.HamiltonianGateyqiskit.circuit.QuantumCircuit.hamiltonian()que representan la evolución Hamiltoniana de la función de onda del circuito mediante un Operador Hermitiano y un tiempo de evolución especificados por el usuario. El tiempo de evolución puede ser aParameterpermitiendo la creación de circuitos parametrizados tipo UCCSD o QAOA que compilan a objetosUnitaryGatesi se proporcionan parámetrostime. El unitario de unHamiltonianGatecon operador hamiltonianoHy parámetro temporaltes . -
El módulo de biblioteca de circuitos
qiskit.circuit.libraryproporciona ahora un nuevo circuito booleano lógico ANDqiskit.circuit.library.ANDy el circuito OR,qiskit.circuit.library.ORque implementan las operaciones respectivas en un número variable de qubits proporcionados. -
Se añaden nuevos backends falsos en
qiskit.test.mock. Se trata de versiones simuladas deibmq_armonk,ibmq_essex,ibmq_london,ibmq_valencia,ibmq_cambridge,ibmq_paris,ibmq_romeyibmq_athens. Al igual que con otros backends falsos, éstos incluyen instantáneas de los datos de calibración (es decir,backend.defaults()) y los datos de error (es decir,backend.properties()) tomados del sistema real, y pueden utilizarse para pruebas locales, compilación y simulación. -
El parámetro
last_update_dateparaBackendPropertiesahora también se puede pasar como un objetodatetime. Antes sólo se aceptaba una cadena en formato ISO8601. -
Añade
qiskit.quantum_info.Statevector.from_int()yqiskit.quantum_info.DensityMatrix.from_int()métodos que permiten construir un estado base computacional para dimensiones de sistema especificadas. -
Los métodos de la clase
qiskit.circuit.QuantumCircuitpara añadir puertas (por ejemploh()) que antes se añadían dinámicamente en tiempo de ejecución a la definición de la clase se han refactorizado para que sean métodos de la clase definidos estáticamente. Esto significa que los analizadores estáticos (como los IDE) ahora pueden leer estos métodos.
Notas de actualización
-
Ahora se requiere un nuevo paquete, python-dateutil, que se ha añadido a la lista de requisitos. Se utiliza para parsear cadenas datetime recibidas de proveedores externos en objetos
BackendPropertiesobjetos. -
Las clases del esquema marshmallow en
qiskit.providers.modelsporque ya no se utilizan en BackendObjects. -
La salida del método
to_dict()para las clases enqiskit.providers.modelsya no está en un formato para la serialización directa JSON. Dependiendo del contenido de las instancias de esta clase puede haber matrices numpy y/o números complejos en los campos del dict. Si estás serializando en JSON la salida de los métodos to_dict deberías asegurarte de que tu codificador JSON puede manejar arrays numpy y números complejos. Esto incluye:qiskit.providers.models.BackendConfiguration.to_dict()qiskit.providers.models.BackendProperties.to_dict()qiskit.providers.models.BackendStatus.to_dict()qiskit.providers.models.QasmBackendConfiguration.to_dict()qiskit.providers.models.PulseBackendConfiguration.to_dict()qiskit.providers.models.UchannelLO.to_dict()qiskit.providers.models.GateConfig.to_dict()qiskit.providers.models.PulseDefaults.to_dict()qiskit.providers.models.Command.to_dict()qiskit.providers.models.JobStatus.to_dict()qiskit.providers.models.Nduv.to_dict()qiskit.providers.models.Gate.to_dict()
Notas sobre características en desuso
-
El método
qiskit.dagcircuit.DAGCircuit.compose()toma ahora una lista de qubits/clbits que especifican el orden posicional de los bits sobre los que componer. El método de asignación basado en diccionarios que utiliza el argumentoedge_mapestá obsoleto y se eliminará en una futura versión. -
El método
combine_into_edge_map()de la claseqiskit.transpiler.Layoutha quedado obsoleto y se eliminará en una futura versión. En su lugar, el nuevo métodoreorder_bits()debe utilizarse para reordenar una lista de qubits virtuales de acuerdo con el objeto de disposición. -
Pasando un objeto
qiskit.pulse.ControlChannela través del parámetrochannelpara el métodoqiskit.providers.models.PulseBackendConfigurationmétodocontrol()ha quedado obsoleto y se eliminará en una futura versión. Los objetosControlChannelse generan ahora a partir del atributo de configuración del backendchannelsque tiene la información de todos los canales y los qubits con los que operan. Ahora, se espera que el métodocontrol()se espera que tome el parámetroqubitsde la forma(control_qubit, target_qubit)y del tipolistotuple, y devuelve una lista de canales de control. -
Los métodos
ANDyORdeqiskit.circuit.QuantumCircuitestán obsoletos y se eliminarán en una futura versión. En su lugar, debe utilizar las clases de lógica booleana de la biblioteca de circuitosqiskit.circuit.library.ANDyqiskit.circuit.library.ORy luego añadir esos objetos a tu clase. Por ejemplo:from qiskit import QuantumCircuit from qiskit.circuit.library import AND qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) qc_and = AND(2) qc.compose(qc_and, inplace=True) -
El módulo
qiskit.extensions.standardestá obsoleto y se eliminará en una futura versión. Las clases de puerta de ese módulo se han trasladado aqiskit.circuit.library.standard_gates.
Corrección de errores
-
Los métodos
qiskit.circuit.QuantumCircuitmétodosinverse()mirror(), así como el setterQuantumCircuit.datagenerarían un circuito no válido cuando se utilizan en una instancia de circuito parametrizada. Esto se ha resuelto y estos métodos deberían funcionar ahora con un circuito parametrizado. Correcciones #4235 -
Anteriormente, al crear una versión controlada de una puerta qiskit estándar, si se especificaba
ctrl_statese devolvía un objetoControlledGategenérico, mientras que sin él se devolvía una puerta qiskit estándar controlada si estaba definida. Este PR permite que las compuertas estándar controladas por qiskit entiendanctrl_state.Además, este PR corrige lo que podría considerarse un error por el que al establecer la
ctrl_statede una puerta ya controlada se asumía que el estado especificado se aplicaba a todo el ancho de control en lugar de añadir los qubits de control. Por ejemplo:circ = QuantumCircuit(2) circ.h(0) circ.x(1) gate = circ.to_gate() cgate = gate.control(1) c3gate = cgate.control(2, ctrl_state=0)aplicaría
ctrl_statea los tres qubits de control en lugar de añadir sólo los dos qubits de control. -
Se ha corregido un error en
random_clifford()que impedía el muestreo del grupo Clifford completo. Correcciones #4271 -
El método
qiskit.circuit.Instructionmétodoqiskit.circuit.Instruction.is_parameterized()devolvíaTruepara cualquier instancia deInstructionque tuviera unqiskit.circuit.Parameteren cualquier elemento de su matrizparams, incluso si eseParameterhabía sido completamente enlazado. Esto se ha corregido para que.is_parameterizeddevuelvaFalsecuando la instrucción esté completamente ligada. -
qiskit.circuit.ParameterExpression.subs()no había detectado correctamente algunos casos en los que la sustitución de parámetros daba lugar a dos objetosParametersdistintos en una expresión con el mismo nombre. Esto se ha corregido, por lo que en estos casos aparecerá unCircuitError. -
Mejorar el rendimiento de
qiskit.quantum_info.Statevectoryqiskit.quantum_info.DensityMatrixpara simulaciones de circuitos de bajo qubit optimizando los métodos de la clase__init__. Correcciones #4281 -
La función
qiskit.compiler.transpile()ahora maneja correctamente cuando el parámetrobasis_gatesse establece enNone. Esto permitirá cualquier puerta en el circuito transpilado de salida, incluidas las puertas añadidas por el proceso de transpilación. Tenga en cuenta que el uso de este parámetro puede tener algunas consecuencias no deseadas durante la optimización. Algunos pases del transpilador dependen de que se haya configuradobasis_gates. Por ejemplo,qiskit.transpiler.passes.Optimize1qGatessólo optimiza las cadenas de compuertas u1, u2, y u3 y sinbasis_gateses incapaz de desenrollar compuertas que de otro modo podrían optimizarse:from qiskit import * q = QuantumRegister(1, name='q') circuit = QuantumCircuit(q) circuit.h(q[0]) circuit.u1(0.1, q[0]) circuit.u2(0.1, 0.2, q[0]) circuit.h(q[0]) circuit.u3(0.1, 0.2, 0.3, q[0]) result = transpile(circuit, basis_gates=None, optimization_level=3) result.draw()┌───┐┌─────────────┐┌───┐┌─────────────────┐ q_0: ┤ H ├┤ U2(0.1,0.3) ├┤ H ├┤ U3(0.1,0.2,0.3) ├ └───┘└─────────────┘└───┘└─────────────────┘Correcciones #3017
Otras notas
-
Los objetos de
qiskit.providers.modelsque anteriormente se construían utilizando la biblioteca marshmallow se han refactorizado para que no dependan de marshmallow. Esto incluye:BackendConfigurationBackendPropertiesBackendStatusQasmBackendConfigurationPulseBackendConfigurationUchannelLOGateConfigPulseDefaultsCommandJobStatusNduvGate
Estos deben ser drop-in reemplazos sin ningún cambio notable, pero los específicos heredados de malvavisco pueden no funcionar. Si encuentra alguna incompatibilidad, no dude en consultarnos.
Aer 0.5.1
Sin cambios
Ignis 0.3.0
Sin cambios
Aqua 0.7.0
Preludio
La versión de Qiskit Aqua 0.7.0 introduce un montón de nuevas funcionalidades junto con una mejor integración con qiskit.circuit.QuantumCircuit objetos. Las contribuciones centrales son el módulo de optimización de Qiskit, una refactorización completa de Operators, el uso de circuitos como entrada nativa para los algoritmos y la eliminación de la API declarativa JSON.
Módulo de optimización
El módulo qiskit.optimization` ofrece ahora funciones para modelar y resolver programas cuadráticos. Ofrece varios algoritmos cuánticos y convencionales a corto plazo, como el MinimumEigenOptimizer (que abarca, por ejemplo VQE o QAOA) o CplexOptimizer, así como un conjunto de conversores para traducir entre distintas representaciones del problema, como QuadraticProgramToQubo. Consulte el registro de cambios para ver una lista de las funciones añadidas.
Flujo del operador
La lógica de operadores proporcionada en qiskit.aqua.operators` se ha refactorizado por completo y ahora es un conjunto completo de herramientas para construir cálculos cuánticos físicamente intuitivos. Contiene funciones de estado, operadores y medidas e internamente se basa en los objetos Operator de Terra. El cálculo de los valores de expectativa y las evoluciones se ha simplificado mucho y objetos como ExpectationFactory producen el algoritmo de expectativa adecuado y más eficaz en función del tipo de entrada del operador. Consulte el registro de cambios para ver las funciones añadidas.
Circuitos nativos
Los algoritmos suelen utilizar circuitos parametrizados como entrada, por ejemplo el VQE, el VQC o el QSVM. Anteriormente, estas entradas tenían que ser del tipo VariationalForm o FeatureMap que envolvían el objeto circuito. Ahora los circuitos se admiten de forma nativa en estos algoritmos, lo que significa que cualquier QuantumCircuit construido individualmente se puede pasar a estos algoritmos. En combinación con el lanzamiento de la biblioteca de circuitos, que ofrece una amplia colección de familias de circuitos, ahora es fácil construir circuitos elaborados como entrada del algoritmo.
API JSON declarativa
Se ha eliminado la posibilidad de ejecutar algoritmos utilizando diccionarios como parámetros, así como de utilizar la interfaz gráfica de Aqua.
IBM Proveedor Q 0.7.0
Nuevas funciones
- Ahora se lanza una nueva excepción,
qiskit.providers.ibmq.IBMQBackendJobLimitError, si no se ha podido enviar un trabajo porque se ha alcanzado el límite de trabajos activos. qiskit.providers.ibmq.job.IBMQJobyqiskit.providers.ibmq.managed.ManagedJobSettienen cada uno dos nuevos métodosupdate_nameyupdate_tags. Se utilizan para cambiar el nombre y las etiquetas de un trabajo o un conjunto de trabajos, respectivamente.qiskit.providers.ibmq.IBMQFactory.save_account()yqiskit.providers.ibmq.IBMQFactory.enable_account()aceptan ahora los parámetros opcionaleshub,group, yproject, que permiten especificar un proveedor predeterminado para guardar en disco o utilizar, respectivamente.
Notas de actualización
- Los métodos
qiskit.providers.ibmq.job.IBMQJobcreation_dateytime_per_stepdevuelven ahora la información de fecha y hora como un objetodatetimeen hora local en lugar de UTC. Del mismo modo, los parámetrosstart_datetimeyend_datetime, deqiskit.providers.ibmq.IBMQBackendService.jobs()yqiskit.providers.ibmq.IBMQBackend.jobs()pueden especificarse ahora en hora local. - El método
qiskit.providers.ibmq.job.QueueInfo.format()utiliza ahora un formateador personalizado dedatetimea cadena, y la flecha del paquete ya no es necesaria y se ha eliminado de la lista de requisitos.
Notas sobre características en desuso
- Los métodos
from_dict()yto_dict()deqiskit.providers.ibmq.job.IBMQJobestán obsoletos y se eliminarán en la próxima versión.
Corrección de errores
- Se ha solucionado un problema por el que
nest_asyncio.apply()podía lanzar una excepción si no había un bucle asyncio debido a la creación de hilos.