Notas de versão do Qiskit 0.46
0.46.3
Prelúdio
O Qiskit 0.46.3 é uma pequena versão de correção de bugs e backport para a série 0.46. Esse também é o último lançamento da versão secundária 0.46, marcando o fim de sua vida útil.
Correções de bugs
-
Corrigido um decorador ausente no
C3SXGateque o fazia falhar se oGate.to_matrix()fosse chamado. A matriz de porta agora está retornando conforme o esperado. -
O atributo
QuantumCircuit.parametersagora estará corretamente vazio ao usarQuantumCircuit.copy_empty_like()em um circuito paramétrico. Anteriormente, um cache interno era copiado sem invalidação. Correção #12617. -
Corrigir a passagem do
SolovayKitaevao carregar aproximações básicas de um arquivo.npyexistente. Anteriormente, o carregamento de uma aproximação armazenada que permitia reduções adicionais (por exemplo, devido a cancelamentos de portas) podia causar uma falha no tempo de execução. Além disso, a diferença de fase global do produto de porta U(2) e da representação SO(3) foi perdida durante um procedimento de salvar e recarregar. Correções Qiskit/qiskit#12576. -
O construtor
GenericBackendV2estava permitindo a criação de backends malformados porque aceitava basis gates que não podiam ser alocados no tamanho do backend. Ou seja, um backend com um único qubit não deve aceitar uma base com portas de dois qubits. -
Anteriormente,
DAGCircuit.replace_block_with_op()permitia colocar uma operação den-qubit em um bloco demqubits, deixando o DAG em um estado inválido. Esse comportamento foi corrigido, e a tentativa gerará uma mensagem de erroDAGCircuitError.
Outras observações
- Esta versão amplia o arquivo constraints.txt com uma lista completa de números de versão fixados das dependências do Qiskit 0.46.3. Como esta versão marca o fim da vida útil da versão 0.46, isso garante um ambiente de instalação reproduzível para ela no futuro, com base nas especificações da versão em constraints.txt.
0.46.2
Prelúdio
O Qiskit 0.46.2 é uma versão menor de correção de bugs e backport para a série 0.46.
Novos Recurso
- Esta versão do Qiskit finaliza o suporte para NumPy 2.0. O Qiskit continuará a oferecer suporte ao Numpy 1.x e ao 2.x em um futuro próximo.
Correções de bugs
-
Foi corrigido um problema com
circuit_drawer()ouQuantumCircuit.draw()ao usar a opção de saídampl, em que o programa travava se o circuito que estava sendo desenhado tivesse uma operação ControlFlow e a opçãofoldestivesse definida como -1 (ou seja, sem dobra). Corrigido #12012. -
O
EvolvedOperatorAnsatzagora lida corretamente com o caso em que o argumento do operador é uma lista vazia. Anteriormente, isso resultava em um erro. -
De agora em diante,
EvolvedOperatorAnsatznão terá nenhuma qregs quando houver zero qubits, em vez de ter uma instânciaQuantumRegistercom zero qubits. Esse comportamento se alinha de forma mais consistente com sua superclasseQuantumCircuit. -
O método
Instruction.repeat()agora move um conjuntoconditionpara o retorno externoInstructione deixa os portões internos de sua definição incondicionais. Anteriormente, o método deixava as instânciasClassicalRegisterdentro da definição interna, que era um estado inválido, e se manifestava como bugs aparentemente não relacionados posteriormente, como durante a transpilação ou exportação. Corrigido #11935. -
Correção de uma imprecisão de ponto flutuante ao dimensionar determinadas unidades de pulso entre segundos e nanossegundos. Se o pulso fosse definido simbolicamente, um erro desnecessário de ponto flutuante poderia ser introduzido pelo escalonamento de determinadas construções do site
symengine, o que poderia se manifestar em resultados inesperados quando os símbolos estivessem totalmente vinculados. Consulte #12392. -
Foi corrigido um bug no site
qiskit.visualization.pulse_v2.interface.draw()que não desenhava programações de pulso quando a função draw era chamada com um argumentoBackendV2argumento. Como o backend do V2 não informa as frequências dos canais de hardware, o desenho gerado mostrará "no freq" abaixo do rótulo de cada canal. -
O passe
VF2Layoutgeraria uma exceção quando fornecido com uma instânciaTargetsem restrições de conectividade. Esse seria o caso das metas da Aer 0.13. O problema agora está corrigido. -
O plug-in padrão
initnão estava gerando corretamente uma mensagemTranspilerErrorquando chamado com um nível de otimização inválido. -
PassManager.run()não perderá mais tempo serializando a si mesmo quando receber várias entradas se for trabalhar apenas em série. -
O analisador OpenQASM 2.0 (
qasm2.load()eqasm2.loads()) agora pode avaliar expressões de gate-angle incluindo operandos inteiros que transbordariam o inteiro de tamanho do sistema. Elas serão avaliadas em um contexto de ponto flutuante de precisão dupla, assim como o restante da expressão sempre foi. Atenção: um número inteiro arbitrariamente grande não será necessariamente representável com exatidão em ponto flutuante de precisão dupla, portanto, há uma chance de que, independentemente do modo como o circuito foi gerado, ele já tenha perdido toda a precisão numérica no módulo .
0.46.1
Prelúdio
O Qiskit 0.46.1 é uma versão menor de correção de bugs para a série 0.46.
Correções de bugs
-
Foi corrigido um problema com o
convert_to_target()em que o conversor ignorava incorretamente as instruções de fluxo de controle se elas fossem especificadas no atributoBackendConfiguration.supported_instructions, que é o local típico em que as instruções de fluxo de controle são especificadas em um objetoBackendConfigurationobjeto. Corrigido #11872. -
Chamada
EquivalenceLibrary.set_entry()agora atualizará corretamente o objeto gráfico interno da biblioteca. Anteriormente, os metadados eram atualizados, mas a estrutura do gráfico não era alterada, o que significa que usuários comoBasisTranslatorainda usariam as regras antigas. Corrigido #11958. -
BasePassManager.run()não vazará mais oPropertySetanterior em novos fluxos de trabalho quando chamado mais de uma vez. Anteriormente, o mesmoPropertySetcomo antes era usado para inicializar execuções subsequentes, o que poderia significar que informações de propriedade inválidas estavam sendo fornecidas às tarefas. O comportamento agora corresponde ao do Qiskit 0.44. Corrigido #11784. -
Propriedades atualizadas e informações de configuração do
FakeOpenPulse2Qbackend. As propriedades de porta ausentes foram adicionadas a algumas portas definidas nos padrões de pulso para que as portas definidas nos dois locais sejam consistentes. -
O módulo de ferramentas de monitoramento
qiskit.tools.monitor(incluído no módulo agora obsoletoqiskit.tools) foi atualizado para funcionar como esperado. A funçãojob_monitor()agora funciona comJobinstâncias. As funçõesbackend_overview()ebackend_monitor()devem agora funcionar como esperado. -
InstructionDurations.from_backend()agora retorna uma instância de qualquer subclasse deInstructionDurationsem vez da classe base.
0.46.0
Prelúdio
A versão 0.46.0 é o lançamento da versão secundária final da série 0.x. Esta versão adiciona principalmente novos avisos de depreciação para alterações de API que virão no futuro lançamento da versão principal 1.0.0. Ele é totalmente compatível com as versões do Qiskit 0.45.x. É altamente recomendável que você atualize de 0.45.x para 0.46.0 para que possa ver os avisos sobre quais interfaces serão alteradas com o Qiskit 1.0.0.
A série de versões 0.46.x continuará sendo suportada e receberá correções de bugs e de segurança por meio de versões de patches por 6 meses após esta versão. Para obter mais detalhes sobre o cronograma de lançamento e o ciclo de suporte, consulte: start/install#qiskit-versioning, que documenta o cronograma de lançamento em mais detalhes.
Se o seu projeto depender do Qiskit, ele poderá contar com uma funcionalidade que não será mais suportada no Qiskit 1.0.0. Por esse motivo, recomendamos que você proativamente limite sua versão suportada para <1.0. O lançamento do Qiskit 1.0.0 está programado para aproximadamente duas semanas após o lançamento do Qiskit 0.46.0, em 2024-02-15, e talvez ainda não esteja disponível quando você ler esta mensagem.
A estrutura de empacotamento do Qiskit está mudando no Qiskit 1.0 e, infelizmente, os requisitos alterados não podem ser totalmente comunicados ao pip, especialmente se os comandos do pip install --upgrade forem executados depois que o ambiente tiver sido configurado inicialmente. Todas as versões do Qiskit anteriores a 1.0 (incluindo esta) têm um conflito de instalação com o Qiskit 1.0 que o pip não resolverá.
Se o site import qiskit gerar uma mensagem de erro ImportError para você, seu ambiente está em um estado inválido e as versões do Qiskit 0.45/0.46 e 1.0 podem ser acessadas, o que resultará em um código sutilmente quebrado. Você precisará criar um novo ambiente virtual e garantir que apenas uma das duas versões esteja instalada. Em particular, se você pretende instalar o Qiskit 1.0, não deve ter nenhum pacote que dependa do qiskit-terra instalado; esses pacotes são incompatíveis com o Qiskit 1.0 e devem ser atualizados. Se estiver pretendendo instalar o Qiskit 0.45 ou 0.46, você deve se certificar de que não há nada tentando instalar o qiskit>=1.0.
Se você desenvolver uma biblioteca baseada no Qiskit e ainda tiver uma dependência de qiskit-terra, deverá lançar urgentemente um novo pacote que dependa apenas de qiskit. Desde a versão 0.44, o pacote qiskit contém apenas o núcleo do compilador qiskit-terra (o componente que agora é chamado simplesmente de "Qiskit"), portanto, se a sua versão mínima for 0.44, você poderá mudar com segurança uma dependência de qiskit-terra>=0.44 para qiskit>=0.44 sem nenhuma alteração no que será instalado. Para obter mais detalhes e recomendações sobre testes e preparação, consulte a seção para desenvolvedores do guia de migração.
Novos Recurso
-
Uma nova função,
qs_decomposition()foi adicionada aqiskit.synthesis. Essa função permite aplicar a Decomposição Quantum Shannon de unidades arbitrárias. -
Um novo módulo
qiskit.providers.basic_providerfoi introduzido para substituir o móduloqiskit.providers.basicaer. Esse módulo contém ferramentas de provedor que refletem as do provedorBasicAere oferece um simulador único, não eficiente e baseado em vetor de estado:BasicSimulator. Este simulador é baseado na interfaceBackendV2e destina-se exclusivamente a testes e prototipagem simples; para obter recursos de simulação mais avançados, consulte o pacoteqiskit-aer. Consulte a nota de depreciação do siteBasicAerpara obter diretrizes de migração. -
A
Targete o pipeline do transpilador agora suportam definições de destino comnum_qubits=None. Isso permite a criação de simuladores baseados emTarget-com um número flexível de qubits. Um alvo comnum_qubits=Noneconterá exclusivamente instruções globais (comqargs=None) e, quando fornecido ao transpilador, espera-se que o transpilador não redimensione o circuito. Essa alteração noTargetrequer futuras passagens do transpilador para levar em conta o caso em quetarget.num_qubits is None. -
Uma nova classe,
GenericBackendV2foi adicionada ao móduloqiskit.providers.fake_providermódulo. Essa classe é configurável e cria uma instânciaBackendV2que pode ser executada localmente (no espírito dos backends falsos). Os usuários podem configurar o número de qubits, portas de base, mapa de acoplamento, capacidade de executar circuitos dinâmicos (instruções de fluxo de controle), calibrações de instruções e dtm do backend sem precisar lidar com a construção manual de alvos. As propriedades do Qubit e da porta são geradas por amostragem aleatória a partir de intervalos padrão. A semente para essa geração aleatória pode ser fixada para garantir a reprodutibilidade da saída do backend. É importante observar que esse backend só oferece suporte a gates na biblioteca padrão. Se você precisar de um backend mais flexível, há sempre a opção de instanciar diretamente um objetoTargetpara usar na transpilação.Exemplo de uso 1:
from qiskit import QuantumCircuit, transpile from qiskit.providers.fake_provider import GenericBackendV2 # Create a simple circuit circuit = QuantumCircuit(3) circuit.h(0) circuit.cx(0,1) circuit.cx(0,2) circuit.measure_all() circuit.draw('mpl') # Define backend with 3 qubits backend = GenericBackendV2(num_qubits=3) # Transpile and run transpiled_circuit = transpile(circuit, backend) result = backend.run(transpiled_circuit).result()Exemplo de uso 2:
from qiskit import QuantumCircuit, ClassicalRegister, transpile from qiskit.providers.fake_provider import GenericBackendV2 # Create a circuit with classical control creg = ClassicalRegister(19) qc = QuantumCircuit(25) qc.add_register(creg) qc.h(0) for i in range(18): qc.cx(0, i + 1) for i in range(18): qc.measure(i, creg[i]) qc.ecr(20, 21).c_if(creg, 0) # Define backend with custom basis gates # and control flow instructions backend = GenericBackendV2( num_qubits=25, basis_gates = ["ecr","id","rz","sx","x"], control_flow=True) #Transpile transpiled_qc = transpile(qc, backend)NotaAs propriedades de ruído geradas por essa classe não imitam nenhum dispositivo quântico concreto e não devem ser usadas para medir comportamentos de back-end concretos. Eles são "padrões razoáveis" que podem ser usados para testar a funcionalidade geral de interface com o backend. Para obter uma simulação mais precisa dos dispositivos existentes, você pode criar manualmente um modelo de ruído a partir do backend real usando a funcionalidade oferecida em
qiskit-aer.
Notas da Atualização
- A versão mínima exigida para
symenginefoi aumentada para >= 0.11. Isso permitiu a remoção de soluções alternativas doParameterExpression.is_real()para lidar com um bug em versões anteriores dosymengine.
Notas de descontinuação
-
O
ScheduleBlock.scoped_parameters()eScheduleBlock.search_parameters()foram descontinuados. Esses métodos produzem objetosParametercom nomes modificados para indicar o escopo do pulso. A intenção original dos métodos era que esses objetos ainda fossem vinculados aos objetos originais sem escopoParameteroriginais. No entanto, a modificação do nome quebra o vínculo, de modo que a atribuição usando a versão com escopo não funciona. Consulte #11654 para obter mais contexto. -
Passando a
QuasiDistribution,ProbDistributionou um dicionário de distribuição para o argumentodatada funçãoplot_histogram()da função de visualização está obsoleta. O suporte para fazer isso será removido na versão do Qiskit 1.0. Se você quiser traçar um histograma de umQuasiDistribution,ProbDistributionou de um dicionário de distribuição, deverá usar a funçãoplot_distribution()em vez disso. -
O pacote
qiskit-terraPython está obsoleto e não receberá mais atualizações a partir do Qiskit 1.0.0. Se você estiver instalando oqiskit-terrasozinho, ele não será mais atualizado para o Qiskit>=1.0.0. Se você estiver executando o qiskit sem o pacoteqiskit, umFutureWarningserá emitido na importação deqiskitpara indicar que você não está usando o pacoteqiskit. -
O uso do objeto
qiskit.Aerestá obsoleto e será removido no Qiskit 1.0. Em vez disso, você deve usar o mesmo objeto do namespaceqiskit_aer, que é um substituto imediato. -
A importação de
qiskit.providers.aerestá obsoleta e deixará de funcionar no Qiskit 1.0. Em vez disso, você deve importar do siteqiskit_aer, que é um substituto imediato. -
A execução de trabalhos de pulso em backends de
qiskit.providers.fake_providerestá obsoleta, e todo o suporte será removido no Qiskit 1.0. Isso se deve ao fato de o Qiskit Aer remover sua funcionalidade de simulação para esses trabalhos. Para cargas de trabalho de simulação hamiltoniana de baixo nível, considere o uso de uma biblioteca especializada, como a Qiskit Dynamics. -
O módulo
qiskit.transpiler.synthesisestá obsoleto e será removido no Qiskit 1.0. Os seguintes objetos foram movidos:qiskit.transpiler.synthesis.aqcfoi movido paraqiskit.synthesis.unitary.aqc(exceto emqiskit.synthesis.unitary.aqc.AQCSynthesisPlugin).qiskit.synthesis.unitary.aqc.AQCSynthesisPluginfoi movido paraqiskit.transpiler.passes.synthesis.AQCSynthesisPlugin.qiskit.transpiler.synthesis.graysynth()foi movido paraqiskit.synthesis.synth_cnot_phase_aam().qiskit.transpiler.synthesis.cnot_synth()foi movido paraqiskit.synthesis.synth_cnot_count_full_pmh().
-
O módulo
qiskit.tools.jupyterfoi descontinuado e será removido no Qiskit 1.0.0. Esse módulo está obsoleto porque a funcionalidade desse módulo está vinculada ao pacote legadoqiskit-ibmq-provider, que não é mais compatível e também só é compatível comBackendV1. Se estiver usando essa funcionalidade atualmente, existem ferramentas jupyter semelhantes no pacote qiskit-ibm-provider que podem ser usadas em seu lugar. -
O módulo
qiskit.tools.monitorfoi descontinuado e será removido no Qiskit 1.0.0. Esse módulo está obsoleto porque a funcionalidade desse módulo está vinculada ao pacote legadoqiskit-ibmq-provider, que não é mais compatível e também só é compatível comBackendV1. -
O módulo
qiskit.tools.visualizationfoi descontinuado e será removido no Qiskit 1.0.0. Esse módulo era um redirecionamento herdado do local original do módulo de visualização do Qiskit e foi movido paraqiskit.visualizationno Qiskit 0.8.0. Se você ainda estiver usando esse caminho, basta atualizar suas importações deqiskit.tools.visualizationparaqiskit.visualization. -
O módulo
qiskit.tools.eventse o utilitárioprogressbar()que ele expôs foram descontinuados e serão removidos na versão do Qiskit 1.0.0. A funcionalidade desse módulo não era muito usada e era melhor coberta por pacotes dedicados, como o tqdm. -
O módulo
qiskit.toolsfoi descontinuado e será removido no Qiskit 1.0.0. Exceto conforme observado nas notas de versão acima para submódulos específicos (qiskit.tools.jupyter,qiskit.tools.monitor,qiskit.tools.eventseqiskit.tools.visualization), a funcionalidade desse módulo foi migrada paraqiskit.utils. Se você estiver usando qualquer funcionalidade desse módulo, poderá atualizar suas importações deqiskit.toolsparaqiskit.utils. -
O módulo
qiskit.testestá obsoleto. Esse módulo contém ferramentas e ajudantes para testes internos do Qiskit, e a maior parte de sua funcionalidade foi movida ou não é mais usada no Qiskit. Na prática, o módulo nunca foi planejado para ser usado externamente. Se algum código do módulo for absolutamente necessário além do Qiskit, considere a possibilidade de copiar esse código em sua própria infraestrutura de teste. -
O módulo
qiskit.quantum_info.synthesisestá obsoleto e será removido no Qiskit 1.0.0. Os seguintes objetos foram movidos paraqiskit.synthesis:OneQubitEulerDecomposerfoi movido paraqiskit.synthesis.one_qubitTwoQubitBasisDecomposerfoi movido paraqiskit.synthesis.two_qubitsXXDecomposerfoi movido paraqiskit.synthesis.two_qubitstwo_qubit_cnot_decompose()foi movido paraqiskit.synthesis.two_qubits
A classe
Quaternionfoi migrada deqiskit.quantum_info.synthesisparaqiskit.quantum_info. Essa mudança não afetou o caminho de importação usual da classe, mas o acesso a ela por meio do siteqiskit.quantum_info.synthesisagora está obsoleto.Essa função está obsoleta e será removida no Qiskit 1.0.0:
cnot_rxx_decompose()
-
O módulo do analisador legado OpenQASM 2, anteriormente presente em
qiskit.qasmfoi descontinuado. Ele será removido na versão do Qiskit 1.0.0. O analisador legado do OpenQASM 2 foi substituído pelo móduloqiskit.qasm2que fornece um analisador mais rápido e correto para OpenQASM 2. -
A função
qiskit.converters.ast_to_dagfoi preterida e será removida na versão do Qiskit 1.0.0. Anteriormente, ele era usado para converter a árvore de sintaxe abstrata gerada pelo analisador legado OpenQASM 2 (no móduloqiskit.qasmque foi descontinuado) e convertê-la diretamente em um arquivoDAGCircuit. Como o analisador legado OpenQASM 2 foi descontinuado, essa função não terá mais utilidade depois que o analisador legado for removido. Se você estava usando isso anteriormente, pode analisar seus arquivos OpenQASM 2 em um arquivoQuantumCircuitusando oQuantumCircuit.from_qasm_file()ouQuantumCircuit.from_qasm_str()e, em seguida, converter esseQuantumCircuitem umDAGCircuitcomcircuit_to_dag(). -
O método
QuantumCircuit.qasm()usado para gerar uma representação OpenQASM 2 do objetoQuantumCircuitfoi preterido e será removido na versão do Qiskit 1.0.0. Oqasm2.dump()ouqasm2.dumps()que oferecem funcionalidade semelhante, devem ser usadas em seu lugar. Se você estiver usando o métodoQuantumCircuit.qasm()para gerar uma saída formatada em pygments, você deverá procurar o pacote autônomoopenqasm-pygmentspara fornecer essa funcionalidade (comoqasm2.dump()eqasm2.dumps()não fornecem saída colorida de pygments). -
A classe base
ParametricPulsee os pulsos agora estão obsoletos e serão removidos no Qiskit 1.0. Isso inclui:ParametricPulseConstantDragGaussianGaussianSquare
A classe foi substituída por
SymbolicPulsee pela biblioteca de pulsos correspondente.SymbolicPulseoferece melhor desempenho, flexibilidade e suporte a QPY. -
O
NoiseAdaptiveLayoute o plug-in correspondente do estágio de layout"noise_adaptive"foram descontinuados e serão removidos na versão 1.0.0. Esse passe foi amplamente substituído peloVF2LayouteVF2PostLayoutque definirá um layout com base nas características de ruído relatadas de um backend. -
A passagem
CrosstalkAdaptiveScheduletranspiler foi preterido e será removido na versão 1.0.0. Essa passagem não era mais utilizável porque sua operação interna dependia da definição de propriedades personalizadas naBackendPropertiescarga útil de umaBackendV1instância. Como nenhum backend está definindo esses campos, a passagem foi descontinuada. -
O módulo
qiskit.visualization.qcstyleagora está obsoleto e será removido na versão do Qiskit 1.0.0. Em vez disso, você deve usar o siteqiskit.visualization.circuit.qcstylecomo substituto direto. -
A injeção de operações de porta de circuito no contexto do construtor de pulsos agora está obsoleta. A descontinuidade afeta as seguintes funções:
call_gate(),cx(),u1(),u2(),u3(),x()
Assim como os argumentos de entrada do tipo
QuantumCircuittipo emcall().Se você ainda quiser injetar programações calibradas de backend, poderá usar o seguinte padrão em vez de chamar os comandos de gate.
from qiskit.providers.fake_provider import GenericBackendV2 from qiskit import pulse backend = GenericBackendV2(num_qubits=5) sched = backend.target['x'][(qubit,)].calibration with pulse.build() as only_pulse_scheds: pulse.call(sched)Da mesma forma,
QuantumCircuitpode ser injetado no contexto do construtor, transpilando e agendando manualmente o objeto.from math import pi from qiskit.compiler import schedule, transpile qc = QuatumCircuit(2) qc.rz(pi/2, 0) qc.sx(0) qc.rz(pi/2, 0) qc.cx(0, 1) qc_t = transpile(qc, backend) sched = schedule(qc_t, backend) with pulse.build() as only_pulse_scheds: pulse.call(sched)De qualquer forma, agora recomendamos que você escreva um programa de pulso mínimo com o construtor e o anexe ao
QuantumCircuitpor meio do métodoQuantumCircuit.add_calibration()como um microcódigo de uma instrução de porta, em vez de escrever o programa inteiro com o modelo de pulso.Os seguintes argumentos em
build()também foram descontinuados:default_transpiler_settingsdefault_circuit_scheduler_settings
Juntamente com as funções:
-
As seguintes ferramentas em
qiskit.utilsforam descontinuadas:- Utils em
qiskit.utils.arithmetic - Utils em
qiskit.utils.circuit_utils - Utils em
qiskit.utils.entangler_map - Utils em
qiskit.utils.name_unnamed_args
Essas funções foram usadas exclusivamente no contexto de
qiskit.algorithmseqiskit.opflowe serão removidas após as remoções deqiskit.algorithmseqiskit.opflowno Qiskit 1.0. - Utils em
-
O módulo
qiskit.providers.fake_providerfoi migrado para o pacoteqiskit-ibm-runtimePython. Por esse motivo, os seguintes elementos noqiskit.providers.fake_providerforam descontinuados a partir do Qiskit 0.46 e serão removidos no Qiskit 1.0:qiskit.providers.fake_provider.FakeProviderqiskit.providers.fake_provider.FakeProviderForBackendV2qiskit.providers.fake_provider.FakeProviderFactoryqiskit.providers.fake_provider.fake_backends.FakeBackendV2- qualquer backend falso contido em
qiskit.providers.fake_provider.backends(acessível por meio do provedor) qiskit.providers.fake_provider.FakeQasmSimulatorqiskit.providers.fake_provider.FakeJobqiskit.providers.fake_provider.FakeQobj
Exemplo de migração para o novo provedor falso:
# Legacy path from qiskit.providers.fake_provider import FakeProvider, FakeSherbrooke backend1 = FakeProvider().get_backend("fake_ourense") backend2 = FakeSherbrooke() # New path # run "pip install qiskit-ibm-runtime" from qiskit_ibm_runtime.fake_provider import FakeProvider, FakeSherbrooke backend1 = FakeProvider().get_backend("fake_ourense") backend2 = FakeSherbrooke()Além disso, os seguintes backends falsos projetados para fins de testes especiais foram substituídos pela nova classe
GenericBackendV2e também estão obsoletos a partir do Qiskit 0.46:qiskit.providers.fake_provider.fake_backend_v2.FakeBackendV2qiskit.providers.fake_provider.fake_backend_v2.FakeBackendV2LegacyQubitPropsqiskit.providers.fake_provider.fake_backend_v2.FakeBackend5QV2qiskit.providers.fake_provider.fake_backend_v2.FakeBackendSimple
Exemplo de migração para a nova
GenericBackendV2classe:# Legacy path from qiskit.providers.fake_provider import FakeBackend5QV2 backend = FakeBackend5QV2() # New path from qiskit.providers.fake_provider import GenericBackendV2 backend = GenericBackendV2(num_qubits=5) # note that this class will generate 5q backend with generic # properties that serves the same purpose as FakeBackend5QV2 # but will generate different results -
O módulo
qiskit.extensionsestá obsoleto. A depreciação estava pendente desde a versão do Qiskit 0.45. A maioria dos objetos foi movida paraqiskit.circuit.libraryincluindo:DiagonalGate,HamiltonianGateGate,Initialize,Isometry,MCGupDiag,UCGate,UCPauliRotGate,UCRXGate,UCRYGate,UCRZGate,UnitaryGate.
Com a descontinuidade dos objetos, os seguintes métodos de circuito também foram descontinuados:
QuantumCircuit.diagonal,QuantumCircuit.hamiltonian,QuantumCircuit.isometryeQuantumCircuit.iso,QuantumCircuit.uc,QuantumCircuit.ucrx,QuantumCircuit.ucry,QuantumCircuit.ucrz.
-
A função
execute()está obsoleta. Essa função serviu como um invólucro de alto nível para transpilar um circuito com algumas opções de transpile e executá-lo em um backend com algumas opções de execução. Para fazer a mesma coisa, você pode usar explicitamente a funçãotranspile()(com as opções de transpile apropriadas) seguida porbackend.run()(com as opções de execução apropriadas).Por exemplo, em vez de executar:
from qiskit import execute job = execute(circuit, backend)você pode correr:
from qiskit import transpile new_circuit = transpile(circuit, backend) job = backend.run(new_circuit)Como alternativa, a primitiva
Sampleré semanticamente equivalente à função obsoletaexecute()obsoleta. A classeBackendSampleré um wrapper genérico para backends que não oferecem suporte a primitivos:from qiskit.primitives import BackendSampler sampler = BackendSampler(backend) job = sampler.run(circuit) -
A conversão implícita de um
BaseOperator`denso para umSparsePauliOpemEstimatorargumentos observáveis está obsoleta desde o Qiskit 0.46 e será removida no Qiskit 1.0. Você deve converter explicitamente para umSparsePauliOpusandoSparsePauliOp.from_operator()em vez disso. -
A biblioteca de pulsos discretos está obsoleta e será removida em uma versão futura. Isso inclui:
constant()zero()square()sawtooth()triangle()cos()sin()gaussian()gaussian_deriv()sech()sech_deriv()gaussian_square()drag()
Em vez disso, use o
SymbolicPulsecorrespondente, comget_waveform(). Por exemplo, em vez depulse.gaussian(100,0.5,10), usepulse.Gaussian(100,0.5,10).get_waveform().Observe que a fase de
SawtootheSquareé definida de forma que uma fase de se desloque por um ciclo completo, ao contrário da contrapartida discreta. Observe também que o suporte à amplitude complexa está obsoleto na biblioteca de pulsos simbólicos - em vez disso, usefloat,ampeangle. -
A classe
ConfigurableFakeBackendque foi usada principalmente para testes internos, agora está obsoleta. Ele será removido na versão do Qiskit 1.0.0. Em vez disso, você pode usar a classeGenericBackendV2para criar um backend semelhante para testes. -
O carregamento de objetos da biblioteca
ScalableSymbolicPulsecom o parâmetro complexoampde arquivos qpy da versão 5 ou inferior (Qiskit Terra < 0.23.0 ) está obsoleto. Após a remoção no Qiskit 1.0.0, o complexoampserá automaticamente convertido em float (amp,angle). A alteração se aplica aos pulsos:ConstantDragGaussianGaussianSquare
-
O módulo
qiskit.providers.basicaere todas as suas classes estão obsoletas a partir do Qiskit 0.46. Seu uso deve ser substituído pelo móduloqiskit.quantum_infoe o novo móduloqiskit.providers.basic_providermódulo.A migração do uso de
qiskit.providers.basicaerparaqiskit.providers.basic_providerpode ser realizada da seguinte forma:Migrate from | Replace with ------------------------------------------------------------------------------ :mod:`.basicaer` | :mod:`.basic_provider` :class:`.BasicAerProvider` | :class:`.BasicProvider` :class:`.BasicAerJob` | :class:`.BasicProviderJob` :class:`.QasmSimulatorPy` | :class:`.BasicSimulator` :class:`.UnitarySimulatorPy` | use :class:`~.quantum_info.Operator` :class:`.StatevectorSimulatorPy` | use :class:`~.quantum_info.Statevector`Uma diferença notável é que o novo provedor não é mais exposto por meio de uma instância global (como
BasicAer), portanto, não será válido fazerfrom qiskit import BasicProvider. Em vez disso, a classe do provedor deve ser importada de seu submódulo e instanciada:from qiskit.providers.basic_provider import BasicProvider provider = BasicProvider() backend = provider.get_backend("sim_name")Os exemplos a seguir mostram os caminhos de migração dos três simuladores em
basicaer.-
Simulador de vetor de estado:
from qiskit import QuantumCircuit qc = QuantumCircuit(3) qc.h(0) qc.h(1) qc.cx(1,2) qc.measure_all() # Former path from qiskit import BasicAer backend = BasicAer.get_backend("statevector_simulator") statevector = backend.run(qc).result().get_statevector() # New path qc.remove_final_measurements() # no measurements allowed from qiskit.quantum_info import Statevector statevector = Statevector(qc) -
Simulador unitário:
from qiskit import QuantumCircuit qc = QuantumCircuit(3) qc.h(0) qc.h(1) qc.cx(1,2) qc.measure_all() # Former path from qiskit import BasicAer backend = BasicAer.get_backend("unitary_simulator") result = backend.run(qc).result() # New path qc.remove_final_measurements() # no measurements allowed from qiskit.quantum_info import Operator result = Operator(qc).data -
Simulador de Qasm:
from qiskit import QuantumCircuit qc = QuantumCircuit(3) qc.h(0) qc.h(1) qc.cx(1,2) qc.measure_all() # Former path from qiskit import BasicAer backend = BasicAer.get_backend("qasm_simulator") result = backend.run(qc).result() # New path from qiskit.providers.basic_provider import BasicProvider backend = BasicProvider().get_backend("basic_simulator") result = backend.run(qc).result() # or, directly from qiskit.providers.basic_provider import BasicSimulator backend = BasicSimulator() result = backend.run(qc).result()
-
-
Usando um
PauliListcomo um observável que é implicitamente convertido em umSparsePauliOpcom coeficientes 1 ao chamarEstimator.run()é depreciado. Em vez disso, você deve converter explicitamente o argumento usandoSparsePauliOp(pauli_list)primeiro.
Problemas críticos
-
Ao atualizar o Qiskit de
0.46.xpara1.0.0, você não poderá fazer a atualização no local. Por exemplo,pip install -U qiskitoupip install --upgrade qiskitnão são suportados e provavelmente não funcionarão. Para fazer upgrade doqiskit, o caminho recomendado é criar um novo ambiente virtual (venv) para construir um novo ambiente separado para Qiskit>=1.0.0. Por exemplo:python -m venv qiskit_1.0 source qiskit_1.0/bin/activate pip install qiskit>=1criará um novo ambiente virtual chamado
qiskit_1.0que conterá a nova versão do Qiskit.