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
OpenQASM2 (qasm2.load()eqasm2.loads()) agora encerrarão a execução com um erroRecursionErrorao tentar avaliar uma expressão excessivamente profunda. A profundidade máxima permitida é obtida a partir desys.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
Optimize1qGatesDecompositionquando a passagem era inicializada com umTargetque 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
BasisTranslatorem que uma porta de vários qubits em um blocoControlFlowOprastreava 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
ControlFlowOpdiretamente, 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
-
ApplyLayoutagora tratará corretamente o caso da aplicação de um zero-qubitLayout. Anteriormente, ele alegava que nenhum layout havia sido definido, mesmo que o campo"layout"do arquivoPropertySetfosse igual aLayout(). -
Foi corrigido um bug no método
QuantumCircuit.assign_parameters()que resultava em um erro com entradas de string e argumentostrict=False. Consulte o número 13933 para obter mais detalhes. -
Corrigido o atributo
nameda classeOrGatede 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 deAndGateou ter plug-ins de síntese para sintetizar umOrGate. Corrigido #14434 -
Corrigido um erro na passagem do
ElidePermutationsem que o mapeamento de qubit não era atualizado corretamente na presença dePermutationGates, levando a circuitos e atualizações incorretos no conjunto de propriedades do gerenciador de passagens. -
Foi corrigido um bug no
PauliEvolutionSynthesisDefaultePauliEvolutionSynthesisRustiqque modificava o atributo.synthesisdo circuito original ao definirpreserve_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
VF2LayouteVF2PostLayoutestavam 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. -
SabreLayouteSabreSwapnão entrará mais em pânico ao aplicar o resultado do roteamento a um circuito que usa objetosexpr.Varem um escopo de fluxo de controle aninhado. -
A função da biblioteca de circuitos
quantum_volume()foi atualizada para lidar com umnumpy.random.Generatorcomo entrada para seu argumentoseed. Anteriormente, esse argumento de gerador resultava em umTypeError. -
Correção de um bug nas funções da biblioteca de circuitos
evolved_operator_ansatz(),qaoa_ansatz()ehamiltonian_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étodoParameterExpression.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
DAGCircuitque fazia com que os nós de saídaVarse tornassem nós de entrada durantedeepcopye a decapagem. -
Foi corrigido um problema na passagem do
BasisTranslatorpassagem 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 classeMCMTGatenão conseguiam ser serializados. Consulte #13965. -
SabreLayoutagora propagará corretamente os valores denameemetadatade um circuito ao ser executado como uma passagem conjunta de layout e roteamento. -
Foi corrigido um problema no plug-in de síntese
SolovayKitaevSynthesisem 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
SolovayKitaevem 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
SolovayKitaevem que a aproximação gerada poderia ter uma fase diferente do valor correto. Isso ocorreu devido à representação interna do , 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
VF2LayouteVF2PostLayoutusada 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çãoqpy.load()função. Isso é usado para forçar a função a carregar uma carga útil que seja potencialmente insegura. Se a carga útil contiverScheduleBlock(autônomo ou como parte deQuantumCircuit.calibrations) e a codificação simbólica no arquivo QPY estiver definida comosympy, 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ânciasScheduleBlockinstâ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.loadagora exibirá uma mensagemQpyErrorquando chamado com uma carga útil QPY que contém um objetoScheduleBlock(autônomo ou como parte deQuantumCircuit.calibrations) que esteja usandosympypara 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 argumentotrust_payloaddeqpy.loadcomoTrue, 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 usamsympypara serializarParameterExpressionobjetos 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 usandogenerate_basis_approximationspara 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 atributonamecomo acontece comtranspile(). -
Foi corrigido um problema com o QPY 13 ao serializar ou desserializar um objeto
ParameterExpressionque foi definido chamandoParameterExpression.subs()para substituir umParameterpor umParameterExpression. 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
QuantumCircuitque contivesse uma expressão como esta comqpy.dump()isso geraria umAttributeErrorcom 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 objetosParameterExpressionaninhados. 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
- Adicionado um novo método,
QuantumCircuit.estimate_duration()para computar a duração estimada de uma saída de circuito programada a partir dotranspiler. Isso deve ser usado se você precisar de uma estimativa da duração total do circuito, em vez do atributo obsoletoQuantumCircuit.durationobsoleto.
Circuitos obsoletos
-
Subclassificação
RegisterouBitou qualquer subclasse deles (por exemplo,QuantumRegisterouQubit) 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
dagno construtor das subclassesDAGNode(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
MCMTagora está obsoleta e foi substituída porMCMTGateque é uma subclasseGateadequada. 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.classicalfunctione, com ele, a classeClassicalFunctione suas classes relacionadasclassical_function()eBooleanExpressionrelacionados, 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 oPhaseOracleque terá uma implementação que não usatweedledum, e oBitFlipOracleque será adicionado no Qiskit v2.0.Até que
BitFlipOracleseja 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á emqr_xe o resultado está emqr_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
- Fornecimento de entradas do tipo
BackendV1para o argumentobackenddeBackendSamplerV2eBackendEstimatorV2está obsoleto desde o Qiskit 1.4 e será removido no Qiskit 2.0. Use uma instância deBackendV2em vez disso.
Descontinuidade de provedores
-
A
BackendV2Convertere as funçõesconvert_to_target()foram descontinuadas no Qiskit v1.4 após a descontinuação das funçõesBackendV1. A funçãoconvert_to_target()é usada para criar uma instânciaTargeta partir de uma série de objetos doBackendV1fluxo de trabalho:BackendConfiguration,BackendPropertiesePulseDefaults.BackendV2Converteré usado para converterBackendV1paraBackendV2e não pode ser mantido quandoBackendV1for removido. -
O método
BasicSimulator.run_experiment()foi descontinuado e será removido no Qiskit v2.0. O método usa umQasmQobjExperimentcomo argumento de entrada, que foi descontinuado junto com a classeQobje outras funcionalidades relacionadas. Você pode ligar paraBasicSimulator.run()com uma entradaQuantumCircuitem vez disso. -
Os tipos de erro
BackendPropertyErroreBackendConfigurationErrorforam depreciados no Qiskit 1.4 e serão removidos no Qiskit 2.0. Esses erros são usados somente ao recuperar itens das obsoletasBackendPropertieseBackendConfigurationobjetos. -
As classes
GateProperties,BackendStatus, eqiskit.providers.models.JobStatusque fazem parte do fluxo de trabalhoBackendV1agora estão obsoletas. Eles deveriam ter sido descontinuados no Qiskit 1.2, juntamente com os elementos relacionados emqiskit.providers.models.
Depreciações de síntese
-
A assinatura do argumento
atomic_evolutionno construtor das classesLieTrotter,ProductFormula, eSuzukiTrotterfoi 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]paraCallable[[QuantumCircuit, Pauli | SparsePauliOp, float], None].
Depreciações do Transpiler
-
O
DAGOpNode.sort_key,DAGOutNode.sort_key, eDAGInNode.sort_keyforam 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 umDAGCircuit. 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
BackendPropertiesno pipeline de transpilação foram descontinuados a partir do Qiskit v1.4 e serão removidos no Qiskit v2.0:backend_propargumento de entrada emDenseLayoutpropertiesargumento de entrada emVF2Layoutpropertiesecoupling_mapargumentos de entrada emVF2PostLayout. Observe quecoupling_mapfoi usado somente na presença deproperties.backend_propsargumento de entrada emUnitarySynthesisbackend_propertiesargumento de entrada emPassManagerConfigbackend_propertiesemTarget.from_configuration()backend_propertiesemgenerate_routing_passmanager()backend_propertiesemgenerate_translation_passmanager()
A classe
BackendPropertiesfoi descontinuada desde o Qiskit v1.2, juntamente com outros elementos doBackendV1e será removida no Qiskit v2.0. O caminho alternativo para comunicar informações de hardware ao argumento de transpilação é a classeTargetque pode ser definida usando o argumento de entradatarget. Propriedades específicas da instrução, como erros de porta ou durações, podem ser adicionadas a umTargetna construção por meio do métodoTarget.add_instruction()método.No caso de
generate_routing_passmanager()egenerate_translation_passmanager()o argumentobackend_propertiesé opcional e é substituído quando o argumentotargetobrigató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. ONormalizeRXAngleé um requisito doRXCalibrationBuildere, portanto, está sendo descontinuado no Qiskit v1.4. A funçãorzx_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_idleeshow_barriernas gavetas da linha do tempo estão obsoletos a partir do Qiskit v1.4. As alternativas são, respectivamente, os parâmetrosidle_wireseplot_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 umtargetnão for especificado para obter a duração das instruções. A partir do Qiskit v2.0,targetserá necessário etimeline_drawer()falhará se não for especificado. -
Fornecimento de entradas do tipo
BackendV1para o argumentobackenddeplot_gate_map(),plot_circuit_layout(), eplot_error_map()estão obsoletos desde o Qiskit 1.4 e serão removidos no Qiskit 2.0. Use uma instância deBackendV2em vez disso.
Páginas Obsoletos
- O uso de argumentos posicionais no construtor de
Resultestá 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 argumentoqobj_idestá obsoleto e não será mais usado no Qiskit 2.0. No entanto, ainda será possível definirqobj_idcomo um kwarg genérico, que aparecerá no campo de metadados com os outros kwargs genéricos.
Correções de bugs
- Foi corrigido um problema no
Target.has_calibration()eTarget.get_calibration()em que a passagem de um Gate parametrizado não funcionava como esperado. Consulte qiskit/#11657 e qiskit/#11658 para obter mais informações.
Outras observações
-
Passando
property_setcomo um argumento de palavra-chave arbitrária para o métodorun()de uma subclasse deBasePassManagermudará 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 doPropertySetpara 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
BasePassManagerque escolheram suas implementações_passmanager_frontende_passmanager_backendpara aceitar um argumento de palavra-chave chamadoproperty_set.