Skip to main content
IBM Quantum Platform

Notas de versão do Qiskit SDK 1.4


1.4.6

Prelúdio

A versão Qiskit v1.4.6 é uma versão dedicada exclusivamente à segurança e a última da série Qiskit v1.x.

O Qiskit v1.x não recebe mais manutenção de forma alguma.

Problemas de segurança

  • Os analisadores do OpenQASM 2 (qasm2.load() e qasm2.loads()) agora encerrarão a execução com um erro RecursionError ao tentar avaliar uma expressão excessivamente profunda. A profundidade máxima permitida é obtida a partir de sys.getrecursionlimit() Python no ponto de entrada dos analisadores.

    Anteriormente, os analisadores podiam realizar recursões arbitrárias no espaço de memória do Rust, acabando por exceder o espaço máximo da pilha e causando uma falha de segmentação no processo.


1.4.5

Prelúdio

O Qiskit v1.4.5 é a última versão de correção de bugs da série 1.4 e marca o fim da vida útil da série. O suporte para correções de segurança na série 1.4 será continuado até 31 de março de 2026.

Correções de bugs

  • Foi corrigido o tratamento de bits anônimos na visualização de circuitos. Anteriormente, os bits que não estavam associados a um registro eram exibidos com a representação padrão Python, enquanto agora eles mostram o índice de forma legível. Corrigido #14031.

  • Foi corrigido um problema no Optimize1qGatesDecomposition quando a passagem era inicializada com um Target que contém 1q gates com parâmetros de ângulo fixo. Anteriormente, a passagem poderia gerar portas fora do alvo, pois não estava verificando se a porta no alvo suportava valores de parâmetros arbitrários. Corrigido #14743.

  • Corrigido o comportamento incorreto na passagem BasisTranslator em que uma porta de vários qubits em um bloco ControlFlowOp rastreava a operação suportada com seus índices de qubit locais em vez de usar os índices absolutos do circuito externo. Corrigido #13728.

  • Foi corrigido um erro no HighLevelSynthesisem que as calibrações de porta personalizadas não eram reconhecidas se a porta aparecesse aninhada dentro de outros objetos de instrução. Parcialmente corrigido #13728.

  • Foi corrigida uma falha na gaveta de texto do circuito, que podia ocorrer quando os blocos de circuito dentro das operações de fluxo de controle eram definidos em registros diferentes dos do circuito externo. Essa situação pode ocorrer, por exemplo, ao anexar ControlFlowOp diretamente, ou para circuitos após a transpilação.


1.4.4

Prelúdio

O Qiskit v1.4.4 é uma versão menor de correção de bugs para a série de versões v1.4.x.

Correções de bugs

  • ApplyLayout agora tratará corretamente o caso da aplicação de um zero-qubit Layout. Anteriormente, ele alegava que nenhum layout havia sido definido, mesmo que o campo "layout" do arquivo PropertySet fosse igual a Layout().

  • Foi corrigido um bug no método QuantumCircuit.assign_parameters() que resultava em um erro com entradas de string e argumento strict=False. Consulte o número 13933 para obter mais detalhes.

  • Corrigido o atributo name da classe OrGate de modo que agora ele seja definido como "or" para identificar exclusivamente esse portão. Anteriormente, ele estava incorretamente definido como "and" , o que tornava impossível distingui-lo de AndGate ou ter plug-ins de síntese para sintetizar um OrGate. Corrigido #14434

  • Corrigido um erro na passagem do ElidePermutations em que o mapeamento de qubit não era atualizado corretamente na presença de PermutationGates, levando a circuitos e atualizações incorretos no conjunto de propriedades do gerenciador de passagens.

  • Foi corrigido um bug no PauliEvolutionSynthesisDefault e PauliEvolutionSynthesisRustiq que modificava o atributo .synthesis do circuito original ao definir preserve_order=False. O comportamento dos plug-ins foi restaurado e o circuito original agora é preservado em todo o pipeline de transpilação.

  • Foi corrigido um erro de correção ao exportar circuitos com instruções de atraso usando unidades 'ps' para QASM3.

  • Foi corrigido um problema de compatibilidade com a versão mínima suportada do rustworkx, 0.15. Com determinadas entradas, os valores VF2Layout e VF2PostLayout estavam usando anteriormente um método rustworkx que foi adicionado no rustworkx 0.16.0, o que causaria um erro ao usar uma versão mais antiga do rustworkx que está listada como compatível.

  • SabreLayout e SabreSwap não entrará mais em pânico ao aplicar o resultado do roteamento a um circuito que usa objetos expr.Var em um escopo de fluxo de controle aninhado.

  • A função da biblioteca de circuitos quantum_volume() foi atualizada para lidar com um numpy.random.Generator como entrada para seu argumento seed . Anteriormente, esse argumento de gerador resultava em um TypeError.

  • Correção de um bug nas funções da biblioteca de circuitos evolved_operator_ansatz(), qaoa_ansatz() e hamiltonian_variational_ansatz()em que os parâmetros tinham um componente complexo zero. Em geral, isso não era um problema, a menos que fosse traduzido para SymPy usando o método ParameterExpression.sympify() que, então, geraria um erro.


1.4.3

Prelúdio

O Qiskit v1.4.3 é uma versão menor de correção de bugs para a série de versões v1.4.x.

Correções de bugs

  • Corrigido um bug no DAGCircuit que fazia com que os nós de saída Var se tornassem nós de entrada durante deepcopy e a decapagem.

  • Foi corrigido um problema na passagem do BasisTranslator passagem do transpilador, em que a fase global do DAG não era atualizada corretamente. Corrigido #14074.

  • Foi corrigido um bug no QPY (qiskit.qpy) em que os circuitos contendo portas da classe MCMTGate não conseguiam ser serializados. Consulte #13965.

  • SabreLayout agora propagará corretamente os valores de name e metadata de um circuito ao ser executado como uma passagem conjunta de layout e roteamento.

  • Foi corrigido um problema no plug-in de síntese SolovayKitaevSynthesis em que a execução repetida do plug-in com diferentes portas de base reutilizava incorretamente as portas de base apenas da primeira execução. O problema era devido ao fato de ignorar as portas de base ao armazenar aproximações básicas em cache, e agora foi corrigido.

  • Foi corrigido um problema na passagem do SolovayKitaev em que a passagem poderia travar devido a uma rotação de 180 graus na recursão interna, que não era tratada corretamente.

  • Foi corrigido um problema na passagem do SolovayKitaev em que a aproximação gerada poderia ter uma fase diferente π\pi do valor correto. Isso ocorreu devido à representação interna do SO(3)SO(3), que exige um tratamento adicional para obter o sinal correto da matriz de porta de qubit. Corrigido #9552

  • A heurística de erro de fallback em VF2Layout e VF2PostLayoutusada quando não havia taxas de erro relatadas, poderia atribuir previamente erros maiores que um e ter efeitos imprevisíveis nas pontuações de layout resultantes.


1.4.2

Prelúdio

O Qiskit 1.4.2 é uma versão de patch que corrige os erros encontrados na série de versões 1.4.

Novos Recurso

  • Adicionado um novo sinalizador trust_payload, à função qpy.load() função. Isso é usado para forçar a função a carregar uma carga útil que seja potencialmente insegura. Se a carga útil contiver ScheduleBlock (autônomo ou como parte de QuantumCircuit.calibrations) e a codificação simbólica no arquivo QPY estiver definida como sympy , então a carga útil é potencialmente insegura e seu carregamento pode permitir a execução arbitrária de código. Como esse sinalizador serve para controlar a desserialização de instâncias ScheduleBlock instâncias que não existem no Qiskit >= 2.0.0, esse sinalizador só existirá no Qiskit 1.4.x e não existirá no Qiskit >= 2.0.0.

Notas da Atualização

  • Por padrão, o site qpy.load agora exibirá uma mensagem QpyError quando chamado com uma carga útil QPY que contém um objeto ScheduleBlock (autônomo ou como parte de QuantumCircuit.calibrations) que esteja usando sympy para codificar expressões simbólicas. Isso ocorre porque a carga útil é potencialmente vulnerável e só deve ser carregada se você confiar no conteúdo. Se você tiver certeza de que a carga útil não é mal-intencionada, poderá definir o novo argumento trust_payload de qpy.load como True, e isso permitirá o carregamento da carga útil.

Problemas de segurança

  • Foi corrigida uma vulnerabilidade de segurança no qpy.load() ao carregar cargas úteis que usam sympy para serializar ParameterExpression objetos e outras expressões simbólicas. Isso inclui potencialmente qualquer carga útil do QPY usando a versão < 10 do QPY e, opcionalmente, 10, 11 e 12, dependendo da codificação simbólica usada na etapa de serialização (qpy.dump()).

Correções de bugs

  • Foi corrigido um bug na geração de aproximação de base para o SolovayKitaev. Anteriormente, a geração de aproximações de base discreta usando generate_basis_approximations para uma base contendo portas "sx" ou "sxdg" falhava. Isso, agora, foi corrigido.

1.4.1

Prelúdio

O Qiskit 1.4.1 é uma pequena versão de correção que corrige alguns erros encontrados na série de suporte estendido 1.4.

Correções de bugs

  • Os circuitos compilados usando um gerenciador de passagem predefinido construído por generate_preset_pass_manager() agora manterão corretamente seu atributo name como acontece com transpile().

  • Foi corrigido um problema com o QPY 13 ao serializar ou desserializar um objeto ParameterExpression que foi definido chamando ParameterExpression.subs() para substituir um Parameter por um ParameterExpression. Por exemplo:

    from qiskit.circuit import Parameter
    
    a = Parameter("A")
    b = Parameter("B")
    expr = a + b
    c = Parameter("C")
    new_expr = c ** 3.14
    final_expr.subs({b: new_expr})

    Nas versões anteriores, se você fosse serializar um QuantumCircuit que contivesse uma expressão como esta com qpy.dump() isso geraria um AttributeError com uma mensagem de erro: ‘ParameterExpression’ object has no attribute 'name' when using QPY 13 (the default). Isso foi corrigido para que a exceção não seja mais levantada e você possa serializar e desserializar uma carga útil contendo esses objetos ParameterExpression aninhados. Consulte #13879.


1.4.0

Prelúdio

O lançamento do Qiskit v1.4 é o último lançamento de versão secundária para a série v1.x. Esta versão contém recursos mínimos e, principalmente, adiciona novos avisos de depreciação para alterações de API que virão no futuro lançamento da versão principal v2.0. Ele é totalmente compatível com as versões do Qiskit v1.3.x. É altamente recomendável que você atualize de v1.3.x para v1.4 para que possa ver os avisos sobre quais interfaces serão alteradas com o Qiskit v2.0. A série de versões v1.4.x continuará a receber suporte e correções de bugs por 6 meses e correções de segurança por 1 ano após esta versão. As correções ocorrerão por meio de lançamentos de patches. Para obter mais detalhes sobre o cronograma de lançamento e o ciclo de suporte, consulte: qiskit-sdk-version-strategy, que documenta o cronograma de lançamento em mais detalhes.

Recursos dos circuitos

Circuitos obsoletos

  • Subclassificação Register ou Bitou qualquer subclasse deles (por exemplo, QuantumRegister ou Qubit) está obsoleta desde o Qiskit v1.4. A subclasse desses tipos nunca foi explicitamente suportada pelo Qiskit, e seu significado nunca foi definido. No Qiskit v2.0, a subclassificação pode se tornar impossível devido a limitações técnicas e certamente não será armazenada em um circuito. Isso se deve à mudança do modelo de dados para o espaço Rust para melhorar o desempenho.

  • O parâmetro opcional dag no construtor das subclasses DAGNode (ou seja, DAGOpNode), que não foi usado e foi ignorado desde o Qiskit v1.2, está obsoleto desde o Qiskit v1.4 e será removido no Qiskit v2.0.

  • A classe Multiple-Control-Multiple-Target (MCMT) em MCMT agora está obsoleta e foi substituída por MCMTGateque é uma subclasse Gate adequada. O uso de uma porta em vez de um circuito permite que o compilador raciocine sobre o objeto em um nível mais alto de abstração e desbloqueia o uso de vários plug-ins de síntese.

  • O módulo qiskit.circuit.classicalfunction e, com ele, a classe ClassicalFunction e suas classes relacionadas classical_function() e BooleanExpression relacionados, foram descontinuados a partir do Qiskit v1.4 e serão removidos no Qiskit v2.0.

    Essa alteração foi feita para evitar a dependência da biblioteca externa tweedledum, que não é mais compatível com todas as plataformas compatíveis com o Qiskit e com as versões do Python. Para obter uma funcionalidade semelhante, use o PhaseOracle que terá uma implementação que não usa tweedledum, e o BitFlipOracle que será adicionado no Qiskit v2.0.

    Até que BitFlipOracle seja adicionado, um oráculo de mudança de fase pode ser convertido em um oráculo de mudança de bit condicionando-o no qubit de resultado e aplicando portas Hadamard antes e depois da aplicação do oráculo, como no exemplo a seguir (onde o oráculo está em qr_x e o resultado está em qr_y):

    from qiskit import QuantumRegister, QuantumCircuit
    from qiskit.circuit.library.phase_oracle import PhaseOracle
    
    bool_expr = "(x0 & x1 | ~x2) & x4"
    qr_x = QuantumRegister(4, "x")
    qr_y = QuantumRegister(1, "y")
    
    bit_flip_oracle = QuantumCircuit(qr_x, qr_y)
    phase_flip_oracle = PhaseOracle(bool_expr)
    controlled_phase_flip_oracle = phase_flip_oracle.control(1)
    bit_flip_oracle.h(qr_y)
    bit_flip_oracle.compose(controlled_phase_flip_oracle, qubits=[*qr_y, *qr_x], inplace=True)
    bit_flip_oracle.h(qr_y)
    
    print(bit_flip_oracle)

    O que resulta em

              ┌───────────────┐     
    x_0: ─────┤0              ├─────
              │               │     
    x_1: ─────┤1              ├─────
              │  Phase Oracle │     
    x_2: ─────┤2              ├─────
              │               │     
    x_3: ─────┤3              ├─────
         ┌───┐└───────┬───────┘┌───┐
      y: ┤ H ├────────■────────┤ H ├
         └───┘                 └───┘

Descontinuidade de primitivas

Descontinuidade de provedores

Depreciações de síntese

  • A assinatura do argumento atomic_evolution no construtor das classes LieTrotter, ProductFormula, e SuzukiTrotter foi modificada no Qiskit v1.2 para melhorar a visualização do circuito de saída. A assinatura antiga foi descontinuada em favor da nova alternativa. No Qiskit v2.0, somente a nova alternativa será válida.

    Para migrar, modifique o callable de Callable[[Pauli | SparsePauliOp, float], QuantumCircuit] para Callable[[QuantumCircuit, Pauli | SparsePauliOp, float], None].

Depreciações do Transpiler

  • O DAGOpNode.sort_key, DAGOutNode.sort_key, e DAGInNode.sort_key foram preteridos e serão removidos na versão do Qiskit v2.0. Esses atributos foram originalmente usados como uma chave lexicográfica para nós de classificação topológica em um DAGCircuit. No entanto, a chave não é mais usada para isso, pois a classificação é feita internamente no código Rust agora. Se estiver usando esse atributo, você poderá recriar a chave a partir dos outros atributos de um nó. Por exemplo, você pode usar uma função como:

    def get_sort_key(node: DAGNode):
        if isinstance(node, (DAGInNode, DAGOutNode)):
            return str(node.wire)
        return ",".join(
            f"{dag.find_bit(q).index:04d}" for q in itertools.chain(node.qargs, node.cargs)
        )

    que gerará uma cadeia de caracteres como a chave de classificação faz.

  • Os seguintes usos do objeto BackendProperties no pipeline de transpilação foram descontinuados a partir do Qiskit v1.4 e serão removidos no Qiskit v2.0:

    A classe BackendProperties foi descontinuada desde o Qiskit v1.2, juntamente com outros elementos do BackendV1 e será removida no Qiskit v2.0. O caminho alternativo para comunicar informações de hardware ao argumento de transpilação é a classe Target que pode ser definida usando o argumento de entrada target . Propriedades específicas da instrução, como erros de porta ou durações, podem ser adicionadas a um Target na construção por meio do método Target.add_instruction() método.

    No caso de generate_routing_passmanager() e generate_translation_passmanager()o argumento backend_properties é opcional e é substituído quando o argumento target obrigatório é preenchido. O uso do argumento pode ser removido com segurança em 1.x, desde que você esteja passando um alvo, que era o uso recomendado.

  • A depreciação do Pulse no Qiskit v1.3, incluiu passes do construtor de calibração, como RXCalibrationBuilder. O NormalizeRXAngle é um requisito do RXCalibrationBuildere, portanto, está sendo descontinuado no Qiskit v1.4. A função rzx_templates() no módulo de calibração também está sendo descontinuada, pois não é usada em nossa base de código.

Descontinuidade da visualização

  • Os parâmetros show_idle e show_barrier nas gavetas da linha do tempo estão obsoletos a partir do Qiskit v1.4. As alternativas são, respectivamente, os parâmetros idle_wires e plot_barriers , introduzidos no Qiskit v1.1, que são totalmente equivalentes. Os nomes de parâmetros antigos serão removidos no Qiskit v2.0.

  • No Qiskit v1.4, a função timeline drawer timeline_drawer() emitirá um aviso de depreciação se um target não for especificado para obter a duração das instruções. A partir do Qiskit v2.0, target será necessário e timeline_drawer() falhará se não for especificado.

  • Fornecimento de entradas do tipo BackendV1 para o argumento backend de plot_gate_map(), plot_circuit_layout(), e plot_error_map() estão obsoletos desde o Qiskit 1.4 e serão removidos no Qiskit 2.0. Use uma instância de BackendV2 em vez disso.

Páginas Obsoletos

  • O uso de argumentos posicionais no construtor de Result está obsoleto desde o Qiskit 1.4, e será desativado no Qiskit 2.0. Defina todos os argumentos usando a sintaxe kwarg, ou seja: Result(backend_name="name", ....). Além disso, o argumento qobj_id está obsoleto e não será mais usado no Qiskit 2.0. No entanto, ainda será possível definir qobj_id como um kwarg genérico, que aparecerá no campo de metadados com os outros kwargs genéricos.

Correções de bugs

Outras observações

  • Passando property_set como um argumento de palavra-chave arbitrária para o método run() de uma subclasse de BasePassManager mudará o comportamento no Qiskit v2.0. Atualmente, ele é encaminhado para as funções de conversão de representação interna do gerenciador de passes, assim como qualquer argumento de palavra-chave arbitrário para esse método. A partir do Qiskit v2.0, a opção será usada para definir a semente do PropertySet para a execução do pipeline, e o argumento não será passado para as funções de conversão.

    Esta nota diz respeito apenas aos implementadores de subclasses de BasePassManager que escolheram suas implementações _passmanager_frontend e _passmanager_backend para aceitar um argumento de palavra-chave chamado property_set.

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