Notas de versão do Qiskit 0.19
0.19.6
Terra 0.14.2
Nenhuma mudança
Aer 0.5.2
Nenhuma mudança
Ignis 0.3.3
Notas da Atualização
- Um novo requisito scikit-learn foi adicionado à lista de requisitos. Essa dependência foi adicionada na versão 0.3.0, mas não foi exposta adequadamente como uma dependência nessa versão. Isso levaria a um
ImportErrorse o móduloqiskit.ignis.measurement.discriminator.iq_discriminatorsfosse importado. Agora, ele está listado corretamente como uma dependência, de modo que oscikit-learnserá instalado com o qiskit-ignis.
Correções de bugs
- Corrige um problema no qiskit-ignis 0.3.2 que gerava um
ImportErrorquando oqiskit.ignis.verification.tomography.fitters.process_fitterera importado sem que ocvxpyestivesse instalado.
Aqua 0.7.3
Nenhuma mudança
IBM 0.7.2
Nenhuma mudança
0.19.5
Terra 0.14.2
Nenhuma mudança
Aer 0.5.2
Nenhuma mudança
Ignis 0.3.2
Correções de bugs
- O método
qiskit.ignis.verification.TomographyFitter.fit()tem uma lógica de detecção aprimorada para o ajustador padrão. Anteriormente, o métodocvxfitter era usado sempre que o cvxpy era instalado. No entanto, foi possível instalar o cvxpy sem um solucionador de SDP que funcionasse para o métodocvxfitter. Essa lógica foi reformulada para que o método de ajustecvxseja usado somente se ocvxpyestiver instalado e houver um solucionador de SDP que possa ser usado. Caso contrário, é usado o ajustadorlstsq. - Corrige um caso extremo em
qiskit.ignis.mitigation.measurement.fitters.MeasurementFitter.apply()para entradas com rótulos de estado inválidos ou incorretos que não correspondem ao circuito de calibração. Anteriormente, isso não dava erro e apenas retornava um resultado vazio. Em vez disso, agora esse caso é capturado corretamente e uma exceçãoQiskitErroré levantada ao usar rótulos incorretos.
Aqua 0.7.3
Notas da Atualização
- A dependência cvxpy, que é necessária para o classificador svm, foi removida da lista de requisitos e tornou-se uma dependência opcional. Isso ocorre porque a instalação do cvxpy não é perfeita em todos os ambientes e, muitas vezes, exige que um compilador seja instalado para ser executado. Para usar o classificador svm agora, você precisará instalar o cvxpy executando
pip install cvxpy<1.1.0ou instalá-lo com o aqua executandopip install qiskit-aqua[cvx].
Correções de bugs
- O método
composedoCircuitOpusava oQuantumCircuit.combine, que foi alterado para usar oQuantumCircuit.compose. O uso da combinação leva ao problema de que a composição de um operador com umCircuitOpbaseado em um registro nomeado não encadeia os operadores, mas os empilha. E.g. a composição doZ ^ 2com um circuito baseado em um registro nomeado de 2 qubits produziu um operador de 4 qubits em vez de um operador de 2 qubits. - O método
MatrixOp.to_instructionretornava anteriormente um operador e não uma instrução. Esse método foi atualizado para retornar uma instrução. Observe que isso só funciona se o operador primitivo for unitário; caso contrário, será gerado um erro na construção da instrução. - O método
__hash__da classePauliOpusou o métodoid(), o que impede que as comparações de conjuntos funcionem como esperado, pois elas dependem de tabelas de hash e objetos idênticos usados para não ter hashes idênticos. Agora, a implementação usa um hash da representação da cadeia de caracteres em linha com a implementação na classePauli.
IBM 0.7.2
Nenhuma mudança
0.19.4
Terra 0.14.2
Notas da Atualização
- Os conversores
circuit_to_gateecircuit_to_instructionjá haviam incluído automaticamente a porta ou a instrução gerada noSessionEquivalenceLibraryativo. Esses conversores agora aceitam um argumento opcional de palavra-chaveequivalence_librarypara especificar se e onde as instâncias convertidas devem ser registradas. O comportamento padrão é não registrar a instância convertida.
Correções de bugs
- As implementações do X Gate multicontrolado (
MCXGrayCode,MCXRecursiveeMCXVChain) tiveram suas propriedadesnamealteradas para descrever com mais precisão sua implementação (mcx_gray,mcx_recursiveemcx_vchain, respectivamente) Anteriormente, esses portões compartilhavam o nomemcx` with ``MCXGate, o que fazia com que fossem transpilados e simulados incorretamente. ControlledGateinstâncias com um conjuntoctrl_statenão estavam, em alguns casos, sendo avaliadas como iguais, mesmo que as portas comparadas fossem equivalentes. Isto foi resolvido.- Corrigida a conversão da unidade SI para
qiskit.pulse.SetFrequency. A instruçãoSetFrequencydeve estar em Hz no frontend e precisa ser convertida em GHz quandoSetFrequencyfor convertido emPulseQobjInstruction. - Os controles abertos foram implementados modificando a definição de um portão. No entanto, quando a porta já existe na base, essa definição não é usada, o que resulta em circuitos incorretos enviados a um backend. Isso modifica o desenrolador para emitir a definição se ele encontrar um portão controlado com controles abertos.
Aer 0.5.2
Nenhuma mudança
Ignis 0.3.0
Nenhuma mudança
Aqua 0.7.2
Prelúdio
O cálculo de expectativa de VQE com o Aer qasm_simulator agora tem como padrão um cálculo que tem o comportamento esperado de ruído de disparo.
Notas da Atualização
- cvxpy agora está na lista de requisitos como uma dependência do qiskit-aqua. Ele é usado para o solucionador de programa quadrático que é usado como parte do site
qiskit.aqua.algorithms.QSVM. Anteriormente, ocvxoptera uma dependência opcional que precisava ser instalada para usar essa funcionalidade. Isso não é mais necessário, pois o cvxpy será instalado com o qiskit-aqua. - Para a tomografia de estado executada como parte do site
qiskit.aqua.algorithms.HHLcom um backend QASM, a função de ajuste de tomografiaqiskit.ignis.verification.StateTomographyFitter.fit()agora é chamada explicitamente com o método definido comolstsqpara usar sempre o ajuste de mínimos quadrados. Anteriormente, ele tentava oportunamente usar o instalador docvxse ocvxpyestivesse instalado. No entanto, o instaladorcvxdepende de uma instalaçãocvxpyconfigurada especificamente com um solucionador SDP instalado como parte docvxpy, o que nem sempre está presente em um ambiente com ocvxpyinstalado. - O cálculo de expectativa de VQE usando a instrução
qiskit.providers.aer.extensions.SnapshotExpectationValuedo qiskit-aer não está mais ativado por padrão. Isso foi alterado para ser o padrão em 0.7.0 porque é significativamente mais rápido, mas levou a resultados ideais inesperados sem ruído de disparo (consulte #1013 para obter mais detalhes). O padrão agora foi alterado para corresponder às expectativas do usuário. O uso do cálculo de expectativa mais rápido agora é opcional, definindo o novo kwarginclude_customcomoTrueno construtorqiskit.aqua.algorithms.VQE.
Novos Recurso
- Um novo kwarg
include_customfoi adicionado ao construtor deqiskit.aqua.algorithms.VQEe suas subclasses (principalmenteqiskit.aqua.algorithms.QAOA). Quando definido como true e o kwargexpectationestiver definido comoNone(o padrão), isso permitirá o uso do cálculo de expectativa de VQE com a instruçãoqasm_simulatorqiskit.providers.aer.extensions.SnapshotExpectationValuedo Aer. A computação especial baseada no instantâneo Aer é muito mais rápida, mas com o resultado ideal semelhante ao do simulador de vetor de estado.
IBM 0.7.2
Nenhuma mudança
0.19.3
Terra 0.14.1
Nenhuma mudança
Aer 0.5.2
Correções de bugs
- Corrigido o erro que fazia com que os simuladores de vetor de estado e unitário executassem um número de disparos (paralelos) igual ao número de threads da CPU em vez de executar apenas um único disparo.
- Corrige as instruções de porta qobj "diagonal" que estão sendo aplicadas incorretamente no método Qasm Simulator da matriz de densidade.
- Corrige o erro em que as portas condicionais não estavam sendo aplicadas corretamente no método de simulação de matriz de densidade.
- Correção de bug no CZ gate e Z gate para os métodos "density_matrix_gpu" e "density_matrix_thrust" QasmSimulator.
- Corrige o problema em que os requisitos de memória da simulação não estavam sendo verificados no site QasmSimulator ao usar um método de simulação não automático.
- Correção de um vazamento de memória que afetava os métodos do simulador de GPU
Ignis 0.3.0
Nenhuma mudança
Aqua 0.7.1
Nenhuma mudança
IBM 0.7.2
Correções de bugs
qiskit.provider.ibmq.IBMQBackend.jobs()agora retornará a lista correta de objetosIBMQJobquando o kwargstatusfor definido como'RUNNING'. Correções #523- Os metadados do pacote foram atualizados para refletir corretamente a dependência de
qiskit-terra>= 0.14.0. Essa dependência foi adicionada implicitamente como parte da versão 0.7.0, mas não foi refletida nos requisitos do pacote, portanto, era possível instalar oqiskit-ibmq-providercom uma versão doqiskit-terraque era muito antiga. Correções #677
0.19.0
Terra 0.14.0
Prelúdio
A versão 0.14.0 inclui vários novos recursos e correções de bugs. A maior mudança desta versão é a introdução de uma biblioteca de circuitos quânticos em qiskit.circuit.libraryque contém algumas famílias de circuitos de interesse.
A biblioteca de circuitos oferece aos usuários acesso a um rico conjunto de famílias de circuitos bem estudados, cujas instâncias podem ser usadas como benchmarks, como blocos de construção em circuitos mais complexos ou como uma ferramenta para explorar a vantagem computacional quântica em relação à clássica. O conteúdo dessa biblioteca continuará crescendo e amadurecendo.
A versão inicial da biblioteca de circuitos contém:
standard_gates: são portas de largura fixa comumente usadas como blocos de construção primitivos, consistindo em portas de 1, 2 e 3 qubits. Por exemplo, oXGate,RZZGateeCSWAPGate. O antigo local desses portões emqiskit.extensions.standardestá obsoleto.generalized_gates: essas são famílias que podem ser generalizadas para um número arbitrário de qubits, por exemplo, aPermutationouGMS(porta global Molmer-Sorensen).boolean_logiccircuitos que transformam os estados da base de acordo com funções lógicas booleanas simples, comoADDouXOR.arithmetic: um conjunto de circuitos para fazer aritmética clássica, comoWeightedAddereIntegerComparator.basis_changescircuitos como a transformada quântica de Fourier,QFTque aplicam matematicamente as mudanças de base.n_localpadrões para criar facilmente grandes circuitos com camadas de rotação e emaranhamento, como oTwoLocalque usa rotações de um qubit e emaranhamentos de dois qubits.data_preparationcircuitos que recebem dados de entrada clássicos e os codificam em um estado quântico difícil de simular, por exemploPauliFeatureMapouZZFeatureMap.- Outros circuitos que se mostraram interessantes na literatura, como
QuantumVolume,GraphState, ouIQP.
Para facilitar o uso desses circuitos como blocos de construção, introduzimos um compose() método de qiskit.circuit.QuantumCircuit para a composição de circuitos com outros circuitos (soldando-os nas extremidades e, opcionalmente, permutando os fios) ou com outras portas mais simples:
>>> 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 ═══════════════════════Com isso, os circuitos do Qiskit não assumem mais um estado inicial implícito de , e não serão desenhados com esse estado inicial. O estado inicial totalmente zero ainda é assumido em um backend quando um circuito é executado.
Novos Recurso
-
Um novo método,
has_entry()foi adicionado à classeqiskit.circuit.EquivalenceLibrarypara verificar rapidamente se uma determinada porta tem alguma decomposição conhecida na biblioteca. -
Uma nova classe
IQPpara construir um circuito polinomial quântico instantâneo, foi adicionada ao módulo da biblioteca de circuitosqiskit.circuit.library. -
Um novo método
compose()foi adicionado aoqiskit.circuit.QuantumCircuit. Ele permite a composição de dois circuitos quânticos sem a necessidade de transformar um deles em uma porta ou instrução. Ele também permite permutações de qubits/clbits no ponto de composição, bem como a modificação opcional no local. Ele também pode ser usado no lugar deappend()pois permite compor instruções e operadores no circuito também. -
qiskit.circuit.library.Diagonalcircuitos foram adicionados à biblioteca de circuitos. Esses circuitos implementam operadores quânticos diagonais (que consistem em elementos diferentes de zero somente na diagonal). Elas são simuladas com mais eficiência pelo simulador Aer do que as matrizes densas. -
Add
from_label()à classeqiskit.quantum_info.Cliffordpara inicialização como o produto tensorial de portas I, X, Y, Z, H ou S de um único qubit. -
Transformador de programação
qiskit.pulse.reschedule.compress_pulses()executa uma passagem de otimização para reduzir o uso da memória de forma de onda no hardware, substituindo várias instâncias idênticas de um pulso em uma programação de pulso por um único pulso. Por exemplo: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) -
O
qiskit.transpiler.Layouttem um novo métodoreorder_bits()que é usado para reordenar uma lista de qubits virtuais com base no objeto de layout. -
Dois novos métodos foram adicionados à seção
qiskit.providers.models.PulseBackendConfigurationpara interagir com os canais.get_channel_qubits()para obter uma lista de todos os qubits operados pelo canal fornecido eget_qubit_channel()para obter uma lista de canais que operam no qubit fornecido.
-
Novos
qiskit.extensions.HamiltonianGateeqiskit.circuit.QuantumCircuit.hamiltonian()métodos são introduzidos, representando a evolução hamiltoniana da função de onda do circuito por um operador hermitiano e tempo de evolução especificados pelo usuário. O tempo de evolução pode ser aParameterpermitindo a criação de circuitos parametrizados no estilo UCCSD ou QAOA que são compilados em objetosUnitaryGatese forem fornecidos parâmetrostime. A unidade de umHamiltonianGatecom operador hamiltonianoHe parâmetro de tempoté . -
O módulo da biblioteca de circuitos
qiskit.circuit.libraryagora oferece um novo circuito lógico booleano AND,qiskit.circuit.library.ANDe circuito OR,qiskit.circuit.library.ORque implementa as respectivas operações em um número variável de qubits fornecidos. -
Novos backends falsos são adicionados em
qiskit.test.mock. Isso inclui versões simuladas deibmq_armonk,ibmq_essex,ibmq_london,ibmq_valencia,ibmq_cambridge,ibmq_paris,ibmq_romeeibmq_athens. Como em outros back-ends falsos, eles incluem instantâneos de dados de calibração (ou seja,backend.defaults()) e dados de erro (ou seja,backend.properties()) retirados do sistema real e podem ser usados para testes locais, compilação e simulação. -
O parâmetro
last_update_dateparaBackendPropertiesagora também pode ser passado como um objetodatetime. Anteriormente, apenas uma string no formato ISO8601 era aceita. -
Adiciona
qiskit.quantum_info.Statevector.from_int()eqiskit.quantum_info.DensityMatrix.from_int()que permitem a construção de um estado de base computacional para dimensões de sistema especificadas. -
Os métodos na classe
qiskit.circuit.QuantumCircuitpara adicionar gates (por exemploh()), que anteriormente eram adicionados dinamicamente em tempo de execução à definição da classe, foram refatorados para serem métodos da classe definidos estaticamente. Isso significa que o analisador estático (como os IDEs) agora pode ler esses métodos.
Notas da Atualização
-
Um novo pacote, python-dateutil, agora é necessário e foi adicionado à lista de requisitos. Ele está sendo usado para analisar cadeias de data e hora recebidas de provedores externos em objetos
BackendPropertiesobjetos. -
As classes de esquema do marshmallow em
qiskit.providers.modelsforam removidas, pois não são mais usadas pelo site BackendObjects. -
A saída do método
to_dict()para as classes emqiskit.providers.modelsnão está mais em um formato para serialização direta de JSON. Dependendo do conteúdo contido nas instâncias dessa classe, pode haver matrizes numéricas e/ou números complexos nos campos do dict. Se estiver serializando em JSON a saída dos métodos to_dict, certifique-se de que seu codificador JSON possa manipular matrizes numpy e números complexos. Isso inclui: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 de descontinuação
-
O método
qiskit.dagcircuit.DAGCircuit.compose()agora recebe uma lista de qubits/clbits que especificam a ordem posicional dos bits para compor. O método de mapeamento baseado em dicionário usando o argumentoedge_mapestá obsoleto e será removido em uma versão futura. -
O método
combine_into_edge_map()da classeqiskit.transpiler.Layoutfoi preterido e será removido em uma versão futura. Em vez disso, o novo métodoreorder_bits()deve ser usado para reordenar uma lista de qubits virtuais de acordo com o objeto de layout. -
Passando um objeto
qiskit.pulse.ControlChannelpor meio do parâmetrochannelpara o métodoqiskit.providers.models.PulseBackendConfigurationmethodcontrol()foi preterido e será removido em uma versão futura. Os objetosControlChannelagora são gerados a partir do atributo de configuração de backendchannels, que tem as informações de todos os canais e os qubits em que eles operam. Agora, o métodocontrol()deve receber o parâmetroqubitsdo formulário(control_qubit, target_qubit)e do tipolistoutuple, e retorna uma lista de canais de controle. -
Os métodos
ANDeORdeqiskit.circuit.QuantumCircuitestão obsoletos e serão removidos em uma versão futura. Em vez disso, você deve usar as classes de lógica booleana da biblioteca de circuitosqiskit.circuit.library.ANDamdqiskit.circuit.library.ORe, em seguida, anexar esses objetos à sua classe. Por exemplo: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) -
O módulo
qiskit.extensions.standardestá obsoleto e será removido em uma versão futura. As classes de portais desse módulo foram movidas paraqiskit.circuit.library.standard_gates.
Correções de bugs
-
Os
qiskit.circuit.QuantumCircuitmethodsinverse()mirror(), bem como o setterQuantumCircuit.datagerariam um circuito inválido quando usados em uma instância de circuito parametrizado. Isso foi resolvido e esses métodos agora devem funcionar com um circuito parametrizado. Correções #4235 -
Anteriormente, ao criar uma versão controlada de um portão padrão do qiskit, se um
ctrl_statefosse especificado, um objeto genéricoControlledGateseria retornado, ao passo que, sem ele, um portão controlado padrão do qiskit seria retornado se estivesse definido. Esse PR permite que as portas controladas por qiskit padrão entendamctrl_state.Além disso, esse PR corrige o que pode ser considerado um bug em que a configuração de
ctrl_statede um portão já controlado assumiria o estado especificado aplicado à largura de controle total em vez de os qubits de controle serem adicionados. Por exemplo,:circ = QuantumCircuit(2) circ.h(0) circ.x(1) gate = circ.to_gate() cgate = gate.control(1) c3gate = cgate.control(2, ctrl_state=0)aplicaria
ctrl_statea todos os três qubits de controle em vez de apenas os dois qubits de controle adicionados. -
Corrigido um erro no
random_clifford()que impedia a amostragem do grupo Clifford completo. Correções #4271 -
O método
qiskit.circuit.Instructionmethodqiskit.circuit.Instruction.is_parameterized()já havia retornadoTruepara qualquer instânciaInstructionque tivesse umqiskit.circuit.Parameterem qualquer elemento de sua matrizparams, mesmo que essaParametertenha sido totalmente vinculada. Isso foi corrigido para que o site.is_parameterizedretorneFalsequando a instrução estiver totalmente vinculada. -
qiskit.circuit.ParameterExpression.subs()não havia detectado corretamente alguns casos em que a substituição de parâmetros resultaria em dois objetosParametersdistintos em uma expressão com o mesmo nome. Isso foi corrigido, portanto, umCircuitErrorserá levantado nesses casos. -
Melhorar o desempenho de
qiskit.quantum_info.Statevectoreqiskit.quantum_info.DensityMatrixpara simulações de circuitos de baixo qubit, otimizando a classe__init__métodos. Correções #4281 -
A função
qiskit.compiler.transpile()agora trata corretamente quando o parâmetrobasis_gatesé definido comoNone. Isso permitirá qualquer porta no circuito transpilado de saída, inclusive as portas adicionadas pelo processo de transpilação. Observe que o uso desse parâmetro pode ter algumas consequências não intencionais durante a otimização. Algumas passagens do transpilador dependem de um conjuntobasis_gates. Por exemplo,qiskit.transpiler.passes.Optimize1qGatesotimiza apenas as cadeias de portas u1, u2 e u3 e, sembasis_gates, não consegue desenrolar portas que, de outra forma, poderiam ser otimizadas: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) ├ └───┘└─────────────┘└───┘└─────────────────┘Correções #3017
Outras observações
-
Os objetos em
qiskit.providers.modelsque foram construídos anteriormente usando a biblioteca do marshmallow foram refatorados para não dependerem do marshmallow. Isso inclui:BackendConfigurationBackendPropertiesBackendStatusQasmBackendConfigurationPulseBackendConfigurationUchannelLOGateConfigPulseDefaultsCommandJobStatusNduvGate
Eles devem ser substituídos sem nenhuma alteração perceptível, mas os detalhes herdados do marshmallow podem não funcionar. Registre problemas para quaisquer incompatibilidades encontradas.
Aer 0.5.1
Nenhuma mudança
Ignis 0.3.0
Nenhuma mudança
Aqua 0.7.0
Prelúdio
A versão do Qiskit Aqua 0.7.0 apresenta uma série de novas funcionalidades, além de uma integração aprimorada com qiskit.circuit.QuantumCircuit objetos. As principais contribuições são o módulo de otimização do Qiskit, uma refatoração completa dos Operadores, usando circuitos como entrada nativa para os algoritmos e a remoção da API JSON declarativa.
Módulo de otimização
O módulo qiskit.optimization` agora oferece funcionalidade para modelagem e solução de programas quadráticos. Ele fornece vários algoritmos quânticos e convencionais de curto prazo, como o MinimumEigenOptimizer (que abrange, por exemplo VQE ou QAOA) ou CplexOptimizer, bem como um conjunto de conversores para traduzir entre diferentes representações de problemas, como QuadraticProgramToQubo. Consulte o registro de alterações para obter uma lista dos recursos adicionados.
Fluxo do operador
A lógica do operador fornecida em qiskit.aqua.operators` foi completamente refatorada e agora é um conjunto completo de ferramentas para a construção de cálculos quânticos fisicamente intuitivos. Ele contém funções de estado, operadores e medições e depende internamente dos objetos Operator do Terra. O cálculo dos valores de expectativa e das evoluções foi bastante simplificado e objetos como o ExpectationFactory produzem o algoritmo de expectativa adequado e mais eficiente com base no tipo de entrada do Operador. Consulte o registro de alterações para obter uma visão geral da funcionalidade adicionada.
Circuitos nativos
Os algoritmos geralmente usam circuitos parametrizados como entrada, por exemplo, o VQE, o VQC ou o QSVM. Anteriormente, essas entradas tinham de ser do tipo VariationalForm ou FeatureMap , que estavam envolvendo o objeto do circuito. Agora, os circuitos têm suporte nativo nesses algoritmos, o que significa que qualquer QuantumCircuit construído individualmente pode ser passado para esses algoritmos. Em combinação com o lançamento da biblioteca de circuitos, que oferece uma ampla coleção de famílias de circuitos, agora é fácil construir circuitos elaborados como entrada de algoritmo.
API JSON declarativa
A capacidade de executar algoritmos usando dicionários como parâmetros, bem como usando a GUI das interfaces Aqua, foi removida.
IBM 0.7.0
Novos Recurso
- Uma nova exceção,
qiskit.providers.ibmq.IBMQBackendJobLimitError, agora é levantada se um trabalho não puder ser enviado porque o limite de trabalhos ativos foi atingido. qiskit.providers.ibmq.job.IBMQJobeqiskit.providers.ibmq.managed.ManagedJobSettêm, cada um, dois novos métodosupdate_nameeupdate_tags. Eles são usados para alterar o nome e as tags de um trabalho ou de um conjunto de trabalhos, respectivamente.qiskit.providers.ibmq.IBMQFactory.save_account()eqiskit.providers.ibmq.IBMQFactory.enable_account()agora aceitam os parâmetros opcionaishub,groupeproject, que permitem especificar um provedor padrão para salvar em disco ou usar, respectivamente.
Notas da Atualização
- Os métodos
qiskit.providers.ibmq.job.IBMQJobcreation_dateetime_per_stepagora retornam informações de data e hora como um objetodatetimena hora local em vez de UTC. Da mesma forma, os parâmetrosstart_datetimeeend_datetime, deqiskit.providers.ibmq.IBMQBackendService.jobs()eqiskit.providers.ibmq.IBMQBackend.jobs()agora podem ser especificados em horário local. - O método
qiskit.providers.ibmq.job.QueueInfo.format()agora usa um formatador personalizado dedatetimepara string, e a seta do pacote não é mais necessária e foi removida da lista de requisitos.
Notas de descontinuação
- Os métodos
from_dict()eto_dict()deqiskit.providers.ibmq.job.IBMQJobestão obsoletos e serão removidos na próxima versão.
Correções de bugs
- Foi corrigido um problema em que o site
nest_asyncio.apply()poderia gerar uma exceção se não houvesse um loop asyncio devido ao threading.