Skip to main content
IBM Quantum Platform

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 C3SXGate que o fazia falhar se o Gate.to_matrix() fosse chamado. A matriz de porta agora está retornando conforme o esperado.

  • O atributo QuantumCircuit.parameters agora estará corretamente vazio ao usar QuantumCircuit.copy_empty_like() em um circuito paramétrico. Anteriormente, um cache interno era copiado sem invalidação. Correção #12617.

  • Corrigir a passagem do SolovayKitaev ao carregar aproximações básicas de um arquivo .npy existente. 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 GenericBackendV2 estava 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 de n-qubit em um bloco de m qubits, deixando o DAG em um estado inválido. Esse comportamento foi corrigido, e a tentativa gerará uma mensagem de erro DAGCircuitError.

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() ou QuantumCircuit.draw() ao usar a opção de saída mpl , em que o programa travava se o circuito que estava sendo desenhado tivesse uma operação ControlFlow e a opção fold estivesse definida como -1 (ou seja, sem dobra). Corrigido #12012.

  • O EvolvedOperatorAnsatz agora lida corretamente com o caso em que o argumento do operador é uma lista vazia. Anteriormente, isso resultava em um erro.

  • De agora em diante, EvolvedOperatorAnsatz não terá nenhuma qregs quando houver zero qubits, em vez de ter uma instância QuantumRegister com zero qubits. Esse comportamento se alinha de forma mais consistente com sua superclasse QuantumCircuit.

  • O método Instruction.repeat() agora move um conjunto condition para o retorno externo Instruction e deixa os portões internos de sua definição incondicionais. Anteriormente, o método deixava as instâncias ClassicalRegister dentro 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 argumento BackendV2 argumento. 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 VF2Layout geraria uma exceção quando fornecido com uma instância Target sem restrições de conectividade. Esse seria o caso das metas da Aer 0.13. O problema agora está corrigido.

  • O plug-in padrão init não estava gerando corretamente uma mensagem TranspilerError quando 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() e qasm2.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 2π2\pi.


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 atributo BackendConfiguration.supported_instructions , que é o local típico em que as instruções de fluxo de controle são especificadas em um objeto BackendConfiguration objeto. 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 como BasisTranslator ainda usariam as regras antigas. Corrigido #11958.

  • BasePassManager.run() não vazará mais o PropertySet anterior em novos fluxos de trabalho quando chamado mais de uma vez. Anteriormente, o mesmo PropertySet como 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 FakeOpenPulse2Q backend. 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 obsoleto qiskit.tools) foi atualizado para funcionar como esperado. A função job_monitor() agora funciona com Job instâncias. As funções backend_overview() e backend_monitor() devem agora funcionar como esperado.

  • InstructionDurations.from_backend() agora retorna uma instância de qualquer subclasse de InstructionDurations em 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.

Nota

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 a qiskit.synthesis. Essa função permite aplicar a Decomposição Quantum Shannon de unidades arbitrárias.

  • Um novo módulo qiskit.providers.basic_provider foi introduzido para substituir o módulo qiskit.providers.basicaer. Esse módulo contém ferramentas de provedor que refletem as do provedor BasicAer e oferece um simulador único, não eficiente e baseado em vetor de estado: BasicSimulator. Este simulador é baseado na interface BackendV2 e destina-se exclusivamente a testes e prototipagem simples; para obter recursos de simulação mais avançados, consulte o pacote qiskit-aer . Consulte a nota de depreciação do site BasicAer para obter diretrizes de migração.

  • A Target e o pipeline do transpilador agora suportam definições de destino com num_qubits=None. Isso permite a criação de simuladores baseados em Target-com um número flexível de qubits. Um alvo com num_qubits=None conterá exclusivamente instruções globais (com qargs=None) e, quando fornecido ao transpilador, espera-se que o transpilador não redimensione o circuito. Essa alteração no Target requer futuras passagens do transpilador para levar em conta o caso em que target.num_qubits is None.

  • Uma nova classe, GenericBackendV2 foi adicionada ao módulo qiskit.providers.fake_provider módulo. Essa classe é configurável e cria uma instância BackendV2 que 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 objeto Target para 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)
    Nota

    As 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 symengine foi aumentada para >= 0.11. Isso permitiu a remoção de soluções alternativas do ParameterExpression.is_real() para lidar com um bug em versões anteriores do symengine.

Notas de descontinuação

  • O ScheduleBlock.scoped_parameters() e ScheduleBlock.search_parameters() foram descontinuados. Esses métodos produzem objetos Parameter com 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 escopo Parameter originais. 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 argumento data da função plot_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 um QuasiDistribution, ProbDistributionou de um dicionário de distribuição, deverá usar a função plot_distribution() em vez disso.

  • O pacote qiskit-terra Python está obsoleto e não receberá mais atualizações a partir do Qiskit 1.0.0. Se você estiver instalando o qiskit-terra sozinho, ele não será mais atualizado para o Qiskit>=1.0.0. Se você estiver executando o qiskit sem o pacote qiskit , um FutureWarning será emitido na importação de qiskit para indicar que você não está usando o pacote qiskit .

  • O uso do objeto qiskit.Aer está obsoleto e será removido no Qiskit 1.0. Em vez disso, você deve usar o mesmo objeto do namespace qiskit_aer , que é um substituto imediato.

  • A importação de qiskit.providers.aer está obsoleta e deixará de funcionar no Qiskit 1.0. Em vez disso, você deve importar do site qiskit_aer, que é um substituto imediato.

  • A execução de trabalhos de pulso em backends de qiskit.providers.fake_provider está 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.synthesis está obsoleto e será removido no Qiskit 1.0. Os seguintes objetos foram movidos:

  • O módulo qiskit.tools.jupyter foi descontinuado e será removido no Qiskit 1.0.0. Esse módulo está obsoleto porque a funcionalidade desse módulo está vinculada ao pacote legado qiskit-ibmq-provider , que não é mais compatível e também só é compatível com BackendV1. 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.monitor foi descontinuado e será removido no Qiskit 1.0.0. Esse módulo está obsoleto porque a funcionalidade desse módulo está vinculada ao pacote legado qiskit-ibmq-provider , que não é mais compatível e também só é compatível com BackendV1.

  • O módulo qiskit.tools.visualization foi 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 para qiskit.visualization no Qiskit 0.8.0. Se você ainda estiver usando esse caminho, basta atualizar suas importações de qiskit.tools.visualization para qiskit.visualization.

  • O módulo qiskit.tools.events e o utilitário progressbar() 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.tools foi 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.events e qiskit.tools.visualization), a funcionalidade desse módulo foi migrada para qiskit.utils. Se você estiver usando qualquer funcionalidade desse módulo, poderá atualizar suas importações de qiskit.tools para qiskit.utils.

  • O módulo qiskit.test está 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.synthesis está obsoleto e será removido no Qiskit 1.0.0. Os seguintes objetos foram movidos para qiskit.synthesis:

    A classe Quaternion foi migrada de qiskit.quantum_info.synthesis para qiskit.quantum_info. Essa mudança não afetou o caminho de importação usual da classe, mas o acesso a ela por meio do site qiskit.quantum_info.synthesis agora 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.qasm foi descontinuado. Ele será removido na versão do Qiskit 1.0.0. O analisador legado do OpenQASM 2 foi substituído pelo módulo qiskit.qasm2 que fornece um analisador mais rápido e correto para OpenQASM 2.

  • A função qiskit.converters.ast_to_dag foi 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ódulo qiskit.qasm que foi descontinuado) e convertê-la diretamente em um arquivo DAGCircuit. 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 arquivo QuantumCircuit usando o QuantumCircuit.from_qasm_file() ou QuantumCircuit.from_qasm_str() e, em seguida, converter esse QuantumCircuit em um DAGCircuit com circuit_to_dag().

  • O método QuantumCircuit.qasm() usado para gerar uma representação OpenQASM 2 do objeto QuantumCircuit foi preterido e será removido na versão do Qiskit 1.0.0. O qasm2.dump() ou qasm2.dumps() que oferecem funcionalidade semelhante, devem ser usadas em seu lugar. Se você estiver usando o método QuantumCircuit.qasm() para gerar uma saída formatada em pygments, você deverá procurar o pacote autônomo openqasm-pygments para fornecer essa funcionalidade (como qasm2.dump() e qasm2.dumps() não fornecem saída colorida de pygments).

  • A classe base ParametricPulse e os pulsos agora estão obsoletos e serão removidos no Qiskit 1.0. Isso inclui:

    A classe foi substituída por SymbolicPulse e pela biblioteca de pulsos correspondente. SymbolicPulse oferece melhor desempenho, flexibilidade e suporte a QPY.

  • O NoiseAdaptiveLayout e 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 pelo VF2Layout e VF2PostLayout que definirá um layout com base nas características de ruído relatadas de um backend.

  • A passagem CrosstalkAdaptiveSchedule transpiler 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 na BackendProperties carga útil de uma BackendV1 instância. Como nenhum backend está definindo esses campos, a passagem foi descontinuada.

  • O módulo qiskit.visualization.qcstyle agora está obsoleto e será removido na versão do Qiskit 1.0.0. Em vez disso, você deve usar o site qiskit.visualization.circuit.qcstyle como 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 QuantumCircuit tipo em call().

    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, QuantumCircuit pode 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 QuantumCircuit por meio do método QuantumCircuit.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_settings
    • default_circuit_scheduler_settings

    Juntamente com as funções:

  • As seguintes ferramentas em qiskit.utils foram 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.algorithms e qiskit.opflow e serão removidas após as remoções de qiskit.algorithms e qiskit.opflow no Qiskit 1.0.

  • O módulo qiskit.providers.fake_provider foi migrado para o pacote qiskit-ibm-runtime Python. Por esse motivo, os seguintes elementos no qiskit.providers.fake_provider foram descontinuados a partir do Qiskit 0.46 e serão removidos no Qiskit 1.0:

    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 GenericBackendV2 e também estão obsoletos a partir do Qiskit 0.46:

    Exemplo de migração para a nova GenericBackendV2 classe:

    # 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.extensions está obsoleto. A depreciação estava pendente desde a versão do Qiskit 0.45. A maioria dos objetos foi movida para qiskit.circuit.libraryincluindo:

    Com a descontinuidade dos objetos, os seguintes métodos de circuito também foram descontinuados:

    • QuantumCircuit.diagonal,
    • QuantumCircuit.hamiltonian,
    • QuantumCircuit.isometry e QuantumCircuit.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ção transpile() (com as opções de transpile apropriadas) seguida por backend.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 obsoleta execute() obsoleta. A classe BackendSampler é 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 um SparsePauliOp em Estimator argumentos observáveis está obsoleta desde o Qiskit 0.46 e será removida no Qiskit 1.0. Você deve converter explicitamente para um SparsePauliOp usando SparsePauliOp.from_operator() em vez disso.

  • A biblioteca de pulsos discretos está obsoleta e será removida em uma versão futura. Isso inclui:

    Em vez disso, use o SymbolicPulse correspondente, com get_waveform(). Por exemplo, em vez de pulse.gaussian(100,0.5,10) , use pulse.Gaussian(100,0.5,10).get_waveform().

    Observe que a fase de Sawtooth e Square é definida de forma que uma fase de 2pi2\\pi 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, use float, amp e angle .

  • A classe ConfigurableFakeBackend que 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 classe GenericBackendV2 para criar um backend semelhante para testes.

  • O carregamento de objetos da biblioteca ScalableSymbolicPulse com o parâmetro complexo amp de 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 complexo amp será automaticamente convertido em float (amp, angle). A alteração se aplica aos pulsos:

    • Constant
    • Drag
    • Gaussian
    • GaussianSquare
  • O módulo qiskit.providers.basicaer e todas as suas classes estão obsoletas a partir do Qiskit 0.46. Seu uso deve ser substituído pelo módulo qiskit.quantum_info e o novo módulo qiskit.providers.basic_provider módulo.

    A migração do uso de qiskit.providers.basicaer para qiskit.providers.basic_provider pode 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 fazer from 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.

    1. 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)
    2. 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
    3. 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 PauliList como um observável que é implicitamente convertido em um SparsePauliOp com coeficientes 1 ao chamar Estimator.run() é depreciado. Em vez disso, você deve converter explicitamente o argumento usando SparsePauliOp(pauli_list) primeiro.

Problemas críticos

  • Ao atualizar o Qiskit de 0.46.x para 1.0.0 , você não poderá fazer a atualização no local. Por exemplo, pip install -U qiskit ou pip install --upgrade qiskit não são suportados e provavelmente não funcionarão. Para fazer upgrade do qiskit , 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>=1

    criará um novo ambiente virtual chamado qiskit_1.0 que conterá a nova versão do Qiskit.

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.