Skip to main content
IBM Quantum Platform

Notas de versão do Qiskit 0.20


0.20.1

Terra 0.15.2

Correções de bugs

  • Ao acessar o atributo definition de uma instância Gate parametrizada, o QuantumCircuit gerado tinha sido gerado com um ParameterTable inválido, de modo que a leitura de QuantumCircuit.parameters ou a chamada de QuantumCircuit.bind_parameters informaria incorretamente os parâmetros não vinculados. Isto foi resolvido.
  • SXGate().inverse() havia retornado anteriormente uma porta 'sx_dg' com um definition correto, mas um to_matrix incorreto. Isso foi atualizado de forma que SXGate().inverse() retorna um SXdgGate() e vice-versa.
  • Instruction.inverse()quando não substituído por uma subclasse, em alguns casos retornaria uma instância de Gate com um método to_matrix incorreto. As instâncias dos métodos to_matrix incorretos foram removidas.
  • Para C3XGate com um angle diferente de zero, a inversão da porta via C3XGate.inverse() gerou anteriormente uma porta inversa incorreta. Isso foi corrigido.
  • Os modos de MCXGate foram atualizados para retornar uma porta do mesmo modo ao chamar .inverse(). Isso resolve um problema em que, em alguns casos, a transpilação de um circuito contendo o inverso de uma porta MCXVChain gerava um erro.
  • Anteriormente, ao criar uma porta de fase controlada por múltiplos via PhaseGate.control, uma porta MCU1Gate era retornada. Isso foi corrigido para que um MCPhaseGate seja retornado.
  • Anteriormente, a tentativa de decompor um circuito contendo um MCPhaseGate gerava um erro devido a uma inconsistência na definição do MCPhaseGate. Isso foi corrigido.
  • QuantumCircuit.compose e DAGCircuit.compose tinham, em alguns casos, traduzido incorretamente as portas condicionais se o circuito de entrada contivesse mais de um ClassicalRegister. Isto foi resolvido.
  • Foi corrigido um problema ao criar um objeto qiskit.result.Counts a partir de um dicionário de dados vazio. Agora, isso criará um objeto Counts vazio. O método most_frequent() também foi atualizado para gerar uma exceção mais descritiva quando o objeto estiver vazio. Correções #5017
  • A extensão de circuitos com registros diferentes atualizou as propriedades qregs e cregs de acordo, mas não as listas qubits e clbits . Como eles não são mais gerados a partir dos registros, mas são listas armazenadas em cache, isso leva a uma discrepância de registros e bits. Isso foi corrigido e o método extend atualiza explicitamente as listas de bits armazenadas em cache.
  • Corrija os erros das implementações concretas do método meth:~qiskit.circuit.ControlledGate.inverse que não preservam o parâmetro ctrl_state .
  • Foi corrigido um bug que fazia com que programações de pulsos longos gerassem um erro de recursão.

Aer 0.6.1

Nenhuma mudança

Ignis 0.4.0

Nenhuma mudança

Aqua 0.7.5

Nenhuma mudança

IBM 0.8.0

Nenhuma mudança


0.20.0

Terra 0.15.1

Prelúdio

A versão 0.15.0 inclui vários novos recursos e correções de bugs. Alguns destaques desse lançamento são:

Essa versão inclui a introdução da tradução de base arbitrária para o transpilador. Isso inclui suporte para direcionar diretamente uma gama mais ampla de conjuntos de base de dispositivos, por exemplo, backends que implementam portas RZ, RY, RZ, CZ ou iSwap.

A classe QuantumCircuit agora rastreia a fase global. Isso significa que o controle de um circuito que tem fase global agora adiciona corretamente uma fase relativa, e as definições de matriz de porta agora são exatas em vez de iguais a uma fase global.

Novos Recurso

  • Uma nova classe DAG qiskit.dagcircuit.DAGDependency para representar a forma de dependência do circuito. Nesse DAG, os nós são operações (portas, medidas, barreiras, etc.) e as bordas correspondem à não comutação entre duas operações.

  • Quatro novas funções foram adicionadas ao qiskit.converters para conversão de ida e volta para DAGDependency. Essas funções são:

    Por exemplo:

    from qiskit.converters.dagdependency_to_circuit import dagdependency_to_circuit
    from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
    
    circuit_in = QuantumCircuit(2)
    circuit_in.h(qr[0])
    circuit_in.h(qr[1])
    
    dag_dependency = circuit_to_dagdependency(circuit_in)
    circuit_out = dagdepency_to_circuit(dag_dependency)
  • Dois novos passes de transpiladores foram adicionados ao qiskit.transpiler.passes A primeira, UnrollCustomDefinitions, desenrola todas as instruções no circuito de acordo com suas propriedades definition parando ao atingir o endereço basis_gates especificado ou um conjunto de portas na propriedade EquivalenceLibrary. A segunda, BasisTranslatorusa o conjunto de traduções no EquivalenceLibrary para reescrever as instruções do circuito em uma base específica.

  • Um novo argumento da palavra-chave translation_method foi adicionado a transpile() para permitir a seleção do método a ser usado para traduzir os circuitos para as portas de dispositivos disponíveis. Por exemplo, transpile(circ, backend, translation_method='translator'). As opções válidas são:

    O valor padrão é 'translator'.

  • Uma nova classe para lidar com dados de resultados de contagens, qiskit.result.Countsfoi adicionada. Essa classe é uma subclasse de dict e pode ser interagida como qualquer outro dicionário. No entanto, ele inclui métodos e atributos auxiliares para lidar com resultados de contagens de experimentos e também lida com o pós-processamento e a formatação de strings binárias na inicialização do objeto. A Counts pode ser criado passando um dicionário de contagens com as chaves sendo números inteiros, cadeias hexadecimais do formato '0x4a', cadeias binárias do formato '0b1101', uma cadeia de bits formatada em slots de registro e memória (ou seja, '00 10') ou uma cadeia dit. Por exemplo:

    from qiskit.result import Counts
    
    counts = Counts({"0x0': 1, '0x1', 3, '0x2': 1020})
  • Um novo método para a construção de objetos qiskit.dagcircuit.DAGCircuit foi adicionado, from_networkx(). Esse método recebe um objeto networkx MultiDiGraph (no formato retornado por to_networkx()) e retorna um novo objeto DAGCircuit objeto. A intenção por trás dessa função é permitir que os autores de passagens de transpiladores aproveitem a biblioteca de algoritmos de gráficos da networkx se uma função estiver faltando na API da retworkx. No entanto, espera-se que, nesses casos, um problema seja aberto no rastreador de problemas do retworkx (ou, melhor ainda, que seja enviada uma solicitação pull).

  • Um novo kwarg para init_qubits foi adicionado a assemble() e execute(). Para backends compatíveis com esse recurso, init_qubits pode ser usado para controlar se o backend que executa os circuitos insere sequências de inicialização no início de cada disparo. Por padrão, isso é definido como True , o que significa que todos os qubits podem ser considerados no estado fundamental no início de cada disparo. No entanto, quando init_qubits estiver definido como False , os qubits não serão inicializados no início de cada experimento e entre os disparos. Observe que o backend que executa os circuitos precisa oferecer suporte a esse recurso para que esse sinalizador tenha algum efeito.

  • Um novo kwarg rep_delay foi adicionado a qiskit.compiler.assemble()qiskit.execute.execute(), e ao construtor de PulseQobjtConfig.qiskit Esse novo kwarg é usado para indicar o tempo entre as execuções do programa. Ele deve ser escolhido na lista de valores válidos definidos como rep_delays em um objeto PulseBackendConfiguration que pode ser acessado como backend.configuration().rep_delays).

    O kwarg rep_delay só funcionará em backends que permitem o tempo de repetição dinâmico. Isso também será indicado no objeto PulseBackendConfiguration para um backend como o atributo dynamic_reprate_enabled . Se dynamic_reprate_enabled for False , o valor rep_time especificado para qiskit.compiler.assemble()qiskit.execute.execute(), ou o construtor para PulseQobjtConfig será usado em vez de rep_delay. rep_time permite apenas que os usuários especifiquem a duração de um programa, e não o atraso entre os programas.

  • O arquivo qobj_schema.json JSON Schema em qiskit.schemas foi atualizado para incluir o rep_delay como uma propriedade de configuração opcional para qobjs de pulso.

  • O arquivo backend_configuration_schema.json JSON Schema em mod:qiskit.schemas foi atualizado para incluir rep_delay_range e default_rep_delay como propriedades opcionais para uma configuração de backend de pulso.

  • Um novo atributo, global_phaseque é usado para rastrear a fase global, foi adicionado à classe qiskit.circuit.QuantumCircuit classe. Por exemplo:

    import math
    
    from qiskit import QuantumCircuit
    
    circ = QuantumCircuit(1, global_phase=math.pi)
    circ.u1(0)

    A fase global também pode ser alterada ou consultada com circ.global_phase no exemplo acima. Em ambos os casos, a configuração é em radianos. Se o circuito for convertido em uma instrução ou porta, a fase global será representada por duas rotações de um único qubit no primeiro qubit.

    Isso permite que outros métodos e funções que consomem um objeto QuantumCircuit levem em conta a fase global. Por exemplo, com o atributo global_phase atributo o método to_matrix() para uma porta agora pode corresponder exatamente às suas decomposições em vez de apenas até uma fase global.

    O mesmo atributo também foi adicionado à classe DAGCircuit para que a fase global possa ser rastreada durante a conversão entre QuantumCircuit e DAGCircuit.

  • Duas novas classes, AncillaRegister e AncillaQubit foram adicionadas ao módulo qiskit.circuit módulo. Essas são subclasses de QuantumRegister e Qubit respectivamente, e permitem marcar os qubits como ancilares. Isso permitirá que esses qubits sejam reutilizados em circuitos e algoritmos maiores.

  • Um novo método, control()foi adicionado ao método QuantumCircuit. Esse método retornará uma versão controlada do objeto QuantumCircuit com controles abertos e fechados. Anteriormente, essa funcionalidade só era acessível por meio da classe Gate classe.

  • Um novo método repeat() foi adicionado à classe QuantumCircuit classe. Ele retorna um novo objeto de circuito contendo um número especificado de repetições do circuito original. Por exemplo:

    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0, 1)
    repeated_qc = qc.repeat(3)
    repeated_qc.decompose().draw(output='mpl')

    Os parâmetros são copiados por referência, o que significa que, se você atualizar os parâmetros em uma instância do circuito, todas as repetições serão atualizadas.

  • Um novo método reverse_bits() foi adicionado à classe QuantumCircuit classe. Esse método inverterá a ordem dos bits em um circuito (bits quânticos e clássicos). Isso pode ser usado para alternar um circuito de little-endian para big-endian e vice-versa.

  • Um novo método, combine_into_edge_map()foi adicionado à classe qiskit.transpiler.Layout classe. Esse método permite a conversão de dois objetos Layout objetos em um mapa de qubit para compor dois circuitos.

  • Uma nova classe, ConfigurableFakeBackend, foi adicionada ao módulo qiskit.test.mock.utils . Essa nova classe permite a criação de back-ends simulados configuráveis para uso em testes. Por exemplo:

    from qiskit.test.mock.utils import ConfigurableFakeBackend
    
    backend = ConfigurableFakeBackend("Tashkent",
                                      n_qubits=100,
                                      version="0.0.1",
                                      basis_gates=['u1'],
                                      qubit_t1=99.,
                                      qubit_t2=146.,
                                      qubit_frequency=5.,
                                      qubit_readout_error=0.01,
                                      single_qubit_gates=['u1'])

    criará um objeto backend com 100 qubits e todos os outros parâmetros especificados no construtor.

  • Um novo método draw() foi adicionado à classe qiskit.circuit.EquivalenceLibrary classe. Esse método pode ser usado para desenhar o conteúdo de uma biblioteca de equivalência, o que pode ser útil para a depuração. Por exemplo:

    from numpy import pi
    
    from qiskit.circuit import EquivalenceLibrary
    from qiskit.circuit import QuantumCircuit
    from qiskit.circuit import QuantumRegister
    from qiskit.circuit import Parameter
    from qiskit.circuit.library import HGate
    from qiskit.circuit.library import U2Gate
    from qiskit.circuit.library import U3Gate
    
    my_equiv_library = EquivalenceLibrary()
    
    q = QuantumRegister(1, 'q')
    def_h = QuantumCircuit(q)
    def_h.append(U2Gate(0, pi), [q[0]], [])
    my_equiv_library.add_equivalence(HGate(), def_h)
    
    theta = Parameter('theta')
    phi = Parameter('phi')
    lam = Parameter('lam')
    def_u2 = QuantumCircuit(q)
    def_u2.append(U3Gate(pi / 2, phi, lam), [q[0]], [])
    my_equiv_library.add_equivalence(U2Gate(phi, lam), def_u2)
    
    my_equiv_library.draw()
  • Uma nova instrução de fase, SetPhase, foi adicionada ao qiskit.pulse. Essa instrução define a fase dos pulsos subsequentes como a fase especificada (em radianos). Por exemplo:

    import numpy as np
    
    from qiskit.pulse import DriveChannel
    from qiskit.pulse import Schedule
    from qiskit.pulse import SetPhase
    
    sched = Schedule()
    sched += SetPhase(np.pi, DriveChannel(0))

    Nesse exemplo, a fase dos pulsos aplicados a DriveChannel(0) após a instrução SetPhase será definida como π\pi radianos.

  • Uma nova instrução de pulso ShiftFrequency foi adicionada ao qiskit.pulse.instructions. Essa instrução permite mudar a frequência de um canal a partir de sua frequência definida. Por exemplo:

    from qiskit.pulse import DriveChannel
    from qiskit.pulse import Schedule
    from qiskit.pulse import ShiftFrequency
    
    sched = Schedule()
    sched += ShiftFrequency(-340e6, DriveChannel(0))

    Nesse exemplo, todos os pulsos aplicados a DriveChannel(0) após o comando ShiftFrequency terão a frequência do envelope diminuída por 340MHz.

  • Um novo método conjugate() foi adicionado à classe ParameterExpression classe. Isso permite chamar numpy.conj() sem gerar um erro. Como um ParameterExpression é real, ele retornará a si mesmo. Esse comportamento é análogo ao de Python floats/ints.

  • Uma nova classe PhaseEstimation foi adicionada ao qiskit.circuit.library. Essa classe da biblioteca de circuitos é o circuito usado na formulação original do algoritmo de estimativa de fase em arXiv:quant-ph/9511026. A estimativa de fase é a tarefa de estimar a fase ϕ\phi de um valor próprio e2πiϕe^{2\pi i\phi} de um operador unitário UU, com o estado próprio correspondente psi|psi\rangle. Ou seja

Uψ=e2πiϕψU|\psi\rangle = e^{2\pi i\phi} |\psi\rangle

Essa estimativa (e, portanto, esse circuito) é uma rotina central de vários algoritmos conhecidos, como o algoritmo de Shor ou a estimativa de amplitude quântica.

  • A função qiskit.visualization função plot_state_qsphere() tem um novo kwarg show_state_labels que é usado para controlar se cada bolha na visualização do qsphere é rotulada. Por padrão, esse kwarg é definido como True e mostra os estados básicos ao lado de cada bolha por padrão. Esse recurso pode ser desativado, voltando ao comportamento anterior, definindo o kwarg show_state_labels como False.

  • A função qiskit.visualization função plot_state_qsphere() tem um novo kwarg show_state_phases que é definido como False por padrão. Quando definido como True , exibe a fase de cada estado da base.

  • A função qiskit.visualization função plot_state_qsphere() tem um novo kwarg use_degrees que é definido como False por padrão. Quando definido como True , ele exibe a fase de cada estado da base em graus, juntamente com o círculo de fase no canto inferior direito.

  • Uma nova classe, QuadraticForm para o módulo qiskit.circuit.library para implementar uma forma quadrática em variáveis binárias. O elemento da biblioteca de circuitos implementa a operação

x0xQ(x)mod2m|x\rangle |0\rangle \mapsto |x\rangle |Q(x) \mod 2^m\rangle

para a forma quadrática QQ e mm qubits de saída. O resultado está no mm qubits de saída codificados em complemento de dois. Se mm não for especificado, o circuito escolherá o número mínimo de qubits necessários para representar o resultado sem aplicar uma operação de módulo. A forma quadrática é especificada usando uma matriz para os termos quadráticos, um vetor para os termos lineares e um deslocamento constante. Se todos os termos forem inteiros, o circuito implementará a forma quadrática exatamente; caso contrário, será apenas uma aproximação.

Por exemplo:

import numpy as np

from qiskit.circuit.library import QuadraticForm

A = np.array([[1, 2], [-1, 0]])
b = np.array([3, -3])
c = -2
m = 4
quad_form_circuit = QuadraticForm(m, A, b, c)
  • Adicionar qiskit.quantum_info.Statevector.expectation_value() e qiskit.quantum_info.DensityMatrix.expectation_value() métodos para calcular o valor de expectativa de um qiskit.quantum_info.Operator.

  • Para o seed kwarg no construtor de objetos qiskit.circuit.library.QuantumVolume os objetos do gerador aleatório numpy agora podem ser usados. Anteriormente, apenas números inteiros eram uma entrada válida. Isso é útil ao integrar o QuantumVolume como parte de uma função maior com sua própria geração de números aleatórios, por exemplo, gerar uma sequência de QuantumVolume circuitos.

  • O método QuantumCircuit método compose() tem um novo kwarg front que pode ser usado para anexar o outro circuito antes do circuito de origem em vez de anexar. Por exemplo:

    from qiskit.circuit import QuantumCircuit
    
    circ1 = QuantumCircuit(2)
    circ2 = QuantumCircuit(2)
    
    circ2.h(0)
    circ1.cx(0, 1)
    
    circ1.compose(circ2, front=True).draw(output='mpl')
  • Dois novos passes, SabreLayout e SabreSwap para layout e roteamento foram adicionados ao qiskit.transpiler.passes. Essas novas passagens são baseadas no algoritmo apresentado em Li et al, "Enfrentando o problema de mapeamento de Qubit para dispositivos quânticos da era NISQ", ASPLOS 2019. Eles também podem ser selecionados ao usar a função transpile() definindo o kwarg layout_method como 'sabre' e/ou o routing_method como 'sabre' para usar SabreLayout e SabreSwap respectivamente.

  • Adicionado o método replace() à classe qiskit.pulse.Schedule que permite que uma instrução de pulso seja substituída por outra. Por exemplo:

    .. code-block:: python

    from qiskit import pulse

    d0 = pulse.DriveChannel(0)

    sched = pulse.Schedule ()

    antigo = pulse.Play ( pulse.Constant (100, 1.0 ), d0 ) novo = pulse.Play ( pulse.Constant (100, 0.1 ), d0 )

    programação += antigo

    sched = sched.replace (antigo, novo)

    assert sched == pulse.Schedule (new)

  • Adicionadas novas classes de porta para qiskit.circuit.library para as portas X\sqrt{X}, seu adjunto X\sqrt{X}^\dagger e X\sqrt{X} controlado como SXGate, SXdgGate, e CSXGate. Eles também podem ser adicionados a um objeto QuantumCircuit usando as teclas sx(), sxdg(), e csx() respectivamente.

  • Adicionar suporte a Reset instruções para qiskit.quantum_info.Statevector.from_instruction(). Observe que isso envolve a amostragem RNG na escolha da projeção para o estado zero no caso em que o qubit está em um estado de superposição. A semente para amostragem pode ser definida usando o método seed() método.

  • Os métodos qiskit.circuit.ParameterExpression.subs() e qiskit.circuit.QuantumCircuit.assign_parameters() agora aceitam ParameterExpression como o valor de destino a ser substituído.

    Por exemplo,

    from qiskit.circuit import QuantumCircuit, Parameter
    
    p = Parameter('p')
    source = QuantumCircuit(1)
    source.rz(p, 0)
    
    x = Parameter('x')
    source.assign_parameters({p: x*x})
         ┌──────────┐
    q_0:Rz(x**2)
         └──────────┘
  • O método QuantumCircuit() método to_gate() tem um novo kwarg label que pode ser usado para definir um rótulo para o objeto de saída Gate objeto. Por exemplo:

    from qiskit.circuit import QuantumCircuit
    
    circuit_gate = QuantumCircuit(2)
    circuit_gate.h(0)
    circuit_gate.cx(0, 1)
    custom_gate = circuit_gate.to_gate(label='My Special Bell')
    new_circ = QuantumCircuit(2)
    new_circ.append(custom_gate, [0, 1], [])
    new_circ.draw(output='mpl')
  • Adicionado o UGate, CUGate, PhaseGate, e CPhaseGate com os métodos QuantumCircuit métodos u(), cu(), p(), e cp(). A porta UGate é a porta de rotação genérica de um único qubit com 3 ângulos de Euler e a CUGate sua versão controlada. CUGate tem 4 parâmetros para levar em conta uma possível fase global da porta U. O PhaseGate e CPhaseGate são a porta de fase geral em um ângulo arbitrário e sua versão controlada.

  • Um novo kwarg, cregbundle , foi adicionado à função qiskit.visualization.circuit_drawer() e ao método QuantumCircuit método draw(). Quando definido como True , os cregs serão agrupados em uma única linha nas visualizações de circuito das gavetas text e mpl . O valor padrão é True. Resolve o problema nº 4290.

    Por exemplo:

    from qiskit import QuantumCircuit
    circuit = QuantumCircuit(2)
    circuit.measure_all()
    circuit.draw(output='mpl', cregbundle=True)
  • Um novo kwarg, initial_state , foi adicionado à função qiskit.visualization.circuit_drawer() e ao método QuantumCircuit método draw(). Quando definido como True , o estado inicial agora será incluído nas visualizações de circuito de todos os gavetas. Resolve o problema nº 4293.

    Por exemplo:

    from qiskit import QuantumCircuit
    circuit = QuantumCircuit(2)
    circuit.measure_all()
    circuit.draw(output='mpl', initial_state=True)
  • Os rótulos agora serão exibidos ao usar a gaveta 'mpl'. Há dois tipos de etiquetas: etiquetas de portão e etiquetas de controle. As etiquetas do portão substituirão o nome do portão na tela. Os rótulos de controle serão exibidos acima ou abaixo dos controles de um portão. Corrige os problemas #3766, #4580 Resolve os problemas #3766 e #4580.

    Por exemplo:

    from qiskit import QuantumCircuit
    from qiskit.circuit.library.standard_gates import YGate
    circuit = QuantumCircuit(2)
    circuit.append(YGate(label='A Y Gate').control(label='Y Control'), [0, 1])
    circuit.draw(output='mpl')

Notas da Atualização

  • As implementações do X Gate multicontrolado ( MCXGrayCode, MCXRecursive, e MCXVChain) tiveram suas propriedades name alteradas para descrever com mais precisão sua implementação: mcx_gray, mcx_recursive, e mcx_vchain respectivamente. Anteriormente, essas portas compartilhavam o nome mcx com MCXGateo que fazia com que essas portas fossem transpiladas e simuladas incorretamente.

  • Por padrão, os gerenciadores de passagens predefinidos em qiskit.transpiler.preset_passmanagers estão usando UnrollCustomDefinitions e BasisTranslator para lidar com a mudança de base em vez do padrão anterior Unroller. Isso foi feito porque as novas passagens são mais flexíveis e permitem o direcionamento para qualquer conjunto de bases, mas o resultado pode ser diferente. Para usar o padrão anterior, você pode definir o código translation_method em transpile() para 'unroller'.

  • As funções de conversão qiskit.converters.circuit_to_gate() e :func` qiskit.converters.circuit_to_instruction\ incluíam automaticamente a porta ou a instrução gerada no site ativoSessionEquivalenceLibrary. Esses conversores agora aceitam um argumento opcional de palavra-chave equivalence_library` para especificar se e onde as instâncias convertidas devem ser registradas. O comportamento padrão foi alterado para não registrar a instância convertida.

  • O valor padrão do cregbundle kwarg para o método qiskit.circuit.QuantumCircuit.draw() método e função qiskit.visualization.circuit_drawer() foi alterado para True. Isso significa que, por padrão, os bits clássicos no diagrama de circuito agora serão agrupados por padrão, por exemplo:

    from qiskit.circuit import QuantumCircuit
    
    circ = QuantumCircuit(4)
    circ.x(0)
    circ.h(1)
    circ.measure_all()
    circ.draw(output='mpl')

    Se você quiser que o desenho do circuito mantenha o comportamento anterior e mostre cada bit clássico no diagrama, defina o kwarg cregbundle como False. Por exemplo:

    from qiskit.circuit import QuantumCircuit
    
    circ = QuantumCircuit(4)
    circ.x(0)
    circ.h(1)
    circ.measure_all()
    circ.draw(output='mpl', cregbundle=False)
  • Schedule plotagem com qiskit.pulse.Schedule.draw() e qiskit.visualization.pulse_drawer() não exibirá mais a tabela de eventos por padrão. Isso pode ser reativado definindo o kwarg table como True.

  • O passe RemoveResetInZeroState foi incluído anteriormente no gerenciador de passes predefinidos level_0_pass_manager() que era usado com as funções optimization_level=0 for transpile() e execute() . No entanto, RemoveResetInZeroState é um passe de otimização e não deveria ter sido incluído no nível de otimização 0 e foi removido. Se você precisar executar o transpile() com RemoveResetInZeroState use um gerenciador de passes personalizado ou o site optimization_level 1, 2 ou 3.

  • O kwarg obsoleto line_length para a função qiskit.visualization.circuit_drawer() function and qiskit.circuit.QuantumCircuit.draw() foi removido. Ele foi descontinuado desde a versão 0.10.0. Em vez disso, você pode usar o fold kwarg para ajustar a largura do diagrama de circuito.

  • O modo de saída 'mpl' para o método qiskit.circuit.QuantumCircuit.draw() e circuit_drawer() agora exige que a biblioteca pylatexenc esteja instalada. Essa já era uma dependência opcional para visualização, mas antes só era necessária para o modo de saída 'latex' . Agora, ele também é necessário para a gaveta do matplotlib, pois é necessário para lidar com o dimensionamento correto de portões com rótulos de texto matemático do matplotlib para portões.

  • Os métodos obsoletos get_tokens para os sites qiskit.qasm.Qasm e qiskit.qasm.QasmParser foram removidos. Esses métodos foram descontinuados desde a versão 0.9.0. Em vez disso, devem ser usados os métodos qiskit.qasm.Qasm.generate_tokens() e qiskit.qasm.QasmParser.generate_tokens() .

  • O kwarg obsoleto channels_to_plot para qiskit.pulse.Schedule.draw(), qiskit.pulse.Instruction.draw(), qiskit.visualization.pulse.matplotlib.ScheduleDrawer.draw e pulse_drawer() foi removido. O kwarg está obsoleto desde a versão 0.11.0 e foi substituído pelo kwarg channels , que funciona de forma idêntica e deve ser usado em seu lugar.

  • O atributo circuit_instruction_map obsoleto da classe qiskit.providers.models.PulseDefaults foi removido. Esse atributo está obsoleto desde a versão 0.12.0 e foi substituído pelo atributo instruction_schedule_map , que pode ser usado em seu lugar.

  • O método union de Schedule e Instruction foram descontinuados desde a versão 0.12.0 e agora foram removidos. Use os métodos qiskit.pulse.Schedule.insert() e qiskit.pulse.Instruction.meth() em vez disso, use os métodos kwarg``time=0``.

  • O argumento obsoleto scaling para o método draw de Schedule e Instruction foi substituído por scale desde a versão 0.12.0 e agora foi removido. Em vez disso, use o scale kwarg.

  • O argumento obsoleto period para as funções qiskit.pulse.library foram substituídos por freq desde a versão 0.13.0 e agora foram removidos. Use o kwarg freq em vez de period.

  • O módulo qiskit.pulse.commands que contém as classes Commands foi preterido na versão 0.13.0 e agora foi removido. Você terá que atualizar o código do Pulse se ainda estiver usando comandos. Por exemplo:

    Antigo
    Novo
    Command(args)(channel)Instruction(args, channel)
    \Python
    Acquire(duration)( AcquireChannel(0 ))
    ```\Python
    Acquire(duration, AcquireChannel(0 ))
    | ```python
    Delay(duration)(channel) 
    ```             | ```python
    Delay(duration, channel) 
    ```                                          |
    | ```python
    FrameChange(angle)(DriveChannel(0)) 
    ```  | ```python
    # FrameChange was also renamed ShiftPhase(angle, DriveChannel(0)) 
    ``` |
    | ```python
    Gaussian(...)(DriveChannel(0)) 
    ```       | ```python
    # Pulses need to be `Play`d Play(Gaussian(...), DriveChannel(0)) 
    ```  |
    
    
  • Todas as classes e funções do módulo qiskit.tool.qi foram descontinuadas na versão 0.12.0 e agora foram removidas. Em vez disso, use o módulo qiskit.quantum_info e os novos métodos e classes que ele possui para trabalhar com estados e operadores quânticos.

  • As funções qiskit.quantum_info.basis_state e qiskit.quantum_info.projector estão obsoletas desde o Qiskit Terra 0.12.0 e agora foram removidas. Use o endereço qiskit.quantum_info.QuantumState e seus derivados qiskit.quantum_info.Statevector e qiskit.quantum_info.DensityMatrix para trabalhar com estados.

  • As funções de plotagem interativa de qiskit.visualization, iplot_bloch_multivector, iplot_state_city, iplot_state_qsphere, iplot_state_hinton, iplot_histogram, iplot_state_paulivec agora são apenas aliases obsoletos para os equivalentes baseados em matplotlib e não são mais interativos. O código JS estático hospedado no qual essas funções se baseavam foi removido e elas não podem mais funcionar. Uma depreciação normal não foi possível porque o site do qual eles dependiam não existe mais.

  • Os componentes de validação que usam o marshmallow de qiskit.validation foram removidos do terra. Como eles não são mais usados para construir objetos em terra.

  • As classes de esquema do marshmallow em qiskit.result foram removidas, pois não são mais usadas pela classe qiskit.result.Result classe.

  • A saída do método to_dict() para a classe qiskit.result.Result não está mais em um formato para serialização direta de JSON. Dependendo do conteúdo contido nas instâncias dessas classes, pode haver tipos que o codificador JSON padrão não sabe como manipular, por exemplo, números complexos ou matrizes numéricas. Se você estiver serializando diretamente a saída do método to_dict() em JSON, deverá garantir que o codificador JSON possa lidar com esses tipos.

  • A opção de adquirir vários qubits de uma vez foi preterida na versão 0.12.0 e agora foi removida. Especificamente, os args de inicialização mem_slots e reg_slots foram removidos de qiskit.pulse.instructions.Acquiree channel, mem_slot e reg_slot gerarão um erro se uma lista for fornecida como entrada.

  • O suporte ao uso da variável de ambiente USE_RETWORKX , que foi introduzida na versão 0.13.0 para fornecer um fallback opcional para a implementação baseada em networkx qiskit.dagcircuit.DAGCircuit foi removido. Esse sinalizador foi criado apenas para fornecer uma válvula de escape para qualquer usuário que tenha encontrado um problema com a nova implementação de uma versão durante a transição para o retworkx.

  • O módulo dentro de qiskit.pulse responsável pelas transformações schedule->schedule foi renomeado de reschedule.py para transforms.py. O caminho de importação anterior foi descontinuado. Para atualizar seu código:

    from qiskit.pulse.rescheduler import <X>

    deve ser substituído por:

    from qiskit.pulse.transforms import <X>
  • Nas versões anteriores, um PassManager não permitia que as classes TransformationPass modificassem o PropertySet. Essa restrição foi suspensa, de modo que a classe TransformationPass agora tem acesso de leitura e gravação aos sites PropertySet e DAGCircuit durante run(). Essa alteração foi feita para facilitar de forma mais eficiente as classes do TransformationPass que têm um estado interno que pode ser necessário para passagens posteriores no PassManager. Sem essa alteração, um segundo AnalysisPass redundante teria sido necessário para recriar o estado interno, o que poderia acrescentar uma sobrecarga significativa.

Notas de descontinuação

Correções de bugs

  • O método qiskit.circuit.QuantumCircuit método num_nonlocal_gates incluía anteriormente objetos multiqubit qiskit.circuit.Instruction (por exemplo, Barrier) em sua contagem de portas não locais. Isso foi corrigido para que apenas os objetos não locais Gate sejam contados. Correções #4500

  • ControlledGate instâncias com um conjunto ctrl_state não estavam, em alguns casos, sendo avaliadas como iguais, mesmo que as portas comparadas fossem equivalentes. Isso foi resolvido de modo que as correções #4573

  • Ao acessar um bit de um qiskit.circuit.QuantumRegister ou qiskit.circuit.ClassicalRegister por índice ao usar tipos inteiros numpy <https://numpy.org/doc/stable/user/basics.types.html> `___ anteriormente gerava uma exceção CircuitError . Isso foi resolvido para que os tipos numpy possam ser usados além do tipo Python 's built-in int . Correções #3929.

  • Foi corrigido um erro que fazia com que apenas o primeiro qiskit.pulse.configuration.Kernel ou qiskit.pulse.configuration.Discriminator de um qiskit.pulse.Acquire fosse usado quando havia várias aquisições ao mesmo tempo em um qiskit.pulse.Schedule.

  • A unidade SI usada para a construção de objetos qiskit.pulse.SetFrequency é em Hz, mas quando um objeto PulseQobjInstruction é criado a partir de uma instância de SetFrequency , ele precisa ser convertido para GHz. Essa conversão não estava presente nas versões anteriores e foi corrigida.

  • Anteriormente, era possível definir o número de qubits de controle como zero e, nesse caso, a operação original, potencialmente não controlada, seria retornada. Isso poderia causar um AttributeError se o chamador tentasse acessar um atributo que somente os objetos ControlledGate objeto possui. Isso foi corrigido com a adição de um getter e setter para num_ctrl_qubits para validar que um valor válido está sendo usado. Correções #4576

  • Os controles abertos foram implementados modificando um objeto Gate objetos definition. No entanto, quando a porta já existe no conjunto de base, essa definição não foi usada, o que resultou no envio de circuitos incorretos para um backend após a transpilação. Isso foi corrigido com a modificação da passagem Unroller para usar a definição se encontrar um portão controlado com controles abertos. Correções #4437

  • O argumento da palavra-chave insert_barriers na classe ZZFeatureMap não inseriu de fato barreiras entre as camadas Hadamard e as camadas de evolução. Isso foi corrigido para que as barreiras sejam inseridas corretamente.

  • Corrigido o problema em que algumas portas com três ou mais qubits não eram compiladas em determinados casos. Consulte #4577 <https://github.com/Qiskit/qiskit/issues/4577 para obter mais detalhes.

  • O backend de saída do matplotlib ('mpl') para o qiskit.circuit.QuantumCircuit método draw() e a função qiskit.visualization.circuit_drawer() não estavam sendo dimensionados corretamente quando o kwarg scale foi definido. As fontes e as larguras de linha não foram dimensionadas com o restante da imagem. Isso foi corrigido e todos os elementos do diagrama de circuito agora são dimensionados corretamente. Por exemplo:

    from qiskit import QuantumCircuit
    circuit = QuantumCircuit(2)
    circuit.h(0)
    circuit.cx(0, 1)
    circuit.draw(output='mpl', scale=0.5)

    Correções #4179.

  • Corrige o problema em que a inicialização ou a evolução de qiskit.quantum_info.Statevector e qiskit.quantum_info.DensityMatrix por circuitos por circuito contendo instruções Barrier gerava uma exceção. Correções #4461

  • Anteriormente, quando um QuantumCircuit continha um Gate com uma condição clássica, o transpilador às vezes falhava ao usar optimization_level=3 em transpile() ou execute() levantando um UnboundLocalError. Isso foi corrigido com a atualização da passagem ConsolidateBlocks para levar em conta a condição clássica. Correções #4672.

  • Em algumas situações, nomes longos de portas e registros transbordavam ou deixavam um espaço vazio excessivo ao redor deles ao usar o backend de saída 'mpl' para o método qiskit.circuit.QuantumCircuit.draw() método e qiskit.visualization.circuit_drawer() função. Isso foi corrigido com o uso das larguras de texto corretas para uma fonte proporcional. Correções #4611, #4605, #4545, #4497, #4449 e #3641.

  • Ao usar o backend de saída style` kwarg on the :meth:`qiskit.circuit.QuantumCircuit.draw` or :func:`qiskit.visualization.circuit_drawer` with the ``'mpl' com a chave de dicionário 'showindex' definida como True, os números de índice na parte superior da coluna não se alinharam corretamente. Isso foi corrigido.

  • Ao usar o site cregbunde=True com o backend de saída 'mpl' para o método qiskit.circuit.QuantumCircuit.draw() método e qiskit.visualization.circuit_drawer() e medindo em uma segunda dobra, a seta de medida sobrescreveria a contagem de creg. A contagem foi movida para a esquerda para evitar isso. Correções #4148.

  • Ao usar o backend de saída 'mpl' para o método qiskit.circuit.QuantumCircuit.draw() método e qiskit.visualization.circuit_drawer() função CSwapGate e uma porta RZZGate as portas agora são exibidas com seus símbolos apropriados em vez de em uma caixa.

  • Ao usar o backend de saída 'mpl' para o método qiskit.circuit.QuantumCircuit.draw() método e qiskit.visualization.circuit_drawer() as portas controladas por função criadas usando o método to_gate() não eram espaçadas corretamente e podiam se sobrepor a outras portas no diagrama de circuito. Esse problema foi corrigido.

  • Ao usar o backend de saída 'mpl' para o método qiskit.circuit.QuantumCircuit.draw() método e qiskit.visualization.circuit_drawer() as portas de função com matrizes como parâmetros, como HamiltonianGate, não são mais exibidas com espaço excessivo ao redor delas. Correções #4352.

  • Ao usar o backend de saída 'mpl' para o método qiskit.circuit.QuantumCircuit.draw() método e qiskit.visualization.circuit_drawer() as portas genéricas de função criadas pela instanciação direta do método qiskit.circuit.Gate agora exibem a cor de fundo adequada para o portão. Correções #4496.

  • Ao usar o backend de saída 'mpl' para o método qiskit.circuit.QuantumCircuit.draw() método e função qiskit.visualization.circuit_drawer() um AttributeError que ocorria ao usar Isometry ou Initialize foi corrigido. Correções #4439.

  • Ao usar o backend de saída 'mpl' para o método qiskit.circuit.QuantumCircuit.draw() method and qiskit.visualization.circuit_drawer() alguns portões controlados por abertura não exibiam corretamente os controles de abertura. Isso foi corrigido para que os controles abertos sejam exibidos corretamente como círculos abertos. Correções #4248.

  • Ao usar o backend de saída 'mpl' para o método qiskit.circuit.QuantumCircuit.draw() método e função qiskit.visualization.circuit_drawer() a configuração do kwarg fold para -1 agora exibirá corretamente o circuito sem dobrar. Correções #4506.

  • Os pulsos paramétricos do site qiskit.pulse.library.discrete agora têm extremidades zero de pulsos paramétricos por padrão. Os pontos finais são definidos de forma que, para uma função f(x)f(x), f(1)=f(duration+1)=0f(-1) = f(duration + 1) = 0. Correções #4317

Outras observações

  • A classe qiskit.result.Result que foi construída anteriormente usando a biblioteca do marshmallow foi refatorada para não depender mais do marshmallow. Essa nova implementação deve ser uma transição perfeita, mas alguns comportamentos específicos que foram herdados anteriormente do marshmallow podem não funcionar. Registre problemas para quaisquer incompatibilidades encontradas.

Aer 0.6.1

Prelúdio

Esta versão do 0.6.0 inclui várias melhorias de desempenho para todos os simuladores no provedor Aer e alterações significativas no sistema de compilação ao compilar a partir da fonte. As principais alterações são o suporte à vetorização SIMD, a aproximação no método de estado do produto da matriz por meio do truncamento da dimensão da ligação, o cálculo mais eficiente do valor de expectativa de Pauli e uma eficiência muito maior na conversão Python de objetos de resultados C++. O sistema de compilação foi atualizado para usar o Conan para gerenciar dependências comuns de C++ ao compilar a partir da fonte.

Novos Recurso

  • Adicione suporte a instantâneos de matriz de densidade aos métodos "statevector" e "statevector_gpu" do site QasmSimulator.

  • Permitir snapshots da matriz de densidade em qubits específicos, não apenas em todos os qubits. Isso calcula o rastro parcial do estado sobre os qubits restantes.

  • Adiciona suporte ao instantâneo do valor da expectativa de Pauli ao método de simulação "density_matrix" do site qiskit.providers.aer.QasmSimulator. Adicione instantâneos aos circuitos usando a extensão qiskit.providers.aer.extensions.SnapshotExpectationValue .

  • Melhora consideravelmente o desempenho do algoritmo de instantâneo do valor de expectativa de Pauli para os métodos de simulação "statevector", "statevector_gpu", "density_matrix" e "density_matrix_gpu" do site qiskit.providers.aer.QasmSimulator.

  • Habilite a otimização do circuito de fusão de portas do site qiskit.providers.aer.QasmSimulator nos backends qiskit.providers.aer.StatevectorSimulator e qiskit.providers.aer.UnitarySimulator .

  • Melhorar o desempenho dos dados médios de instantâneos nos resultados do simulador. Isso afeta a probabilidade, o valor da expectativa de Pauli e os instantâneos da matriz de densidade usando as seguintes extensões:

    • qiskit.providers.aer.extensions.SnapshotExpectationValue
    • qiskit.providers.aer.extensions.SnapshotProbabilities
    • qiskit.providers.aer.extensions.SnapshotDensityMatrix
  • Adicionar construtor de movimentação e melhorar o uso da memória da classe de matriz C++ para minimizar as cópias de matrizes ao mover a saída dos simuladores para os resultados.

  • Melhorar o desempenho do simulador unitário.

  • Adicione uma aproximação ao método de simulação "matrix_product_state" do site QasmSimulator para limitar a dimensão da ligação do MPS.

    Há dois modos de aproximação. Ambos descartam os menores coeficientes de Schmidt seguindo o algoritmo SVD. Há dois parâmetros que controlam o grau de aproximação: "matrix_product_state_max_bond_dimension" (int): Define um limite para o número de coeficientes de Schmidt retidos no final do algoritmo svd. Os coeficientes além desse limite serão descartados. (Padrão: Nenhum, ou seja, nenhum limite na dimensão do vínculo). "matrix_product_state_truncation_threshold" (duplo): Descarta os menores coeficientes para os quais a soma de seus quadrados é menor que esse limite. (Padrão: 1e-16 ).

  • Melhorar o desempenho da amostragem de medidas ao usar o método de simulação "matrix_product_state" QasmSimulator .

  • Adicione suporte para as instruções de pulso Delay, Phase e SetPhase ao qiskit.providers.aer.PulseSimulator.

  • Melhore o desempenho do site qiskit.providers.aer.PulseSimulator armazenando em cache as chamadas para a função RHS

  • Introduzir métodos alternativos de solução de DE, especificáveis por meio do site backend_options no site qiskit.providers.aer.PulseSimulator.

  • Melhore o desempenho das classes de resultados do simulador usando a semântica de movimentação e removendo cópias desnecessárias que estavam ocorrendo ao combinar resultados de experimentos separados no objeto de resultado final.

  • Melhorar muito o desempenho da conversão pybind11 dos resultados do simulador usando a semântica de movimentação sempre que possível e movendo os resultados de vetores e matrizes para matrizes Numpy sem cópias.

  • Altere o mecanismo RNG dos simuladores de Mersenne twister de 32 bits para Mersenne twister de 64 bits.

  • Melhora o desempenho do método de simulação "statevector" do qiskit.providers.aer.QasmSimulator e do qiskit.providers.aer.StatevectorSimulator usando intrínsecos SIMD em sistemas que suportam o conjunto de instruções AVX2. AVX2 é detectado e ativado automaticamente em tempo de execução.

Notas da Atualização

  • Altera o sistema de compilação para usar o gerenciador de pacotes Conan. Essa ferramenta tratará da maioria das dependências necessárias para o código-fonte C++. Pode ser necessária uma conexão com a Internet para a primeira compilação ou quando as dependências forem adicionadas ou atualizadas, a fim de baixar os pacotes necessários se eles não estiverem no repositório local do Conan.

    Ao criar a versão autônoma do qiskit-aer, você deve instalar o conan primeiro com:

    pip install conan
  • Altera a forma como as passagens de transpilação são tratadas nas classes de controlador C++, de modo que cada passagem deve ser chamada explicitamente. Isso permite maior personalização sobre quando cada passagem deve ser chamada e com quais parâmetros. Em particular, isso permite definir parâmetros diferentes para a passagem de otimização da fusão de portas, dependendo do método de simulação QasmController.

  • Adicione gate_length_units kwarg a qiskit.providers.aer.noise.NoiseModel.from_device() para especificar gate_lengths personalizado na função de modelo de ruído do dispositivo para lidar com conversões de unidades para código interno.

  • Adicione a porta Controlled-Y ("cy") ao conjunto de portas compatíveis com os métodos do simulador do estabilizador.

  • Para o backend do Aer, a validação do jsonschema dos objetos qobj de entrada do terra agora é opcional, em vez de ser ativada por padrão. Se você quiser ativar a validação de jsonschema do qobj, defina o kwarg validate no método qiskit.providers.aer.QasmSimualtor.run() para o objeto de backend como True.

  • Adiciona um objeto OpSet à classe State do simulador básico para facilitar a validação de instruções, portas e instantâneos suportados pelos simuladores.

  • Refatoração da classe OpSet. Movemos OpSet para um arquivo de cabeçalho separado e adicionamos os métodos contains e difference com base em std::set::contains e std::algorithm::set_difference. Elas substituem as instruções invalid e validate removidas de OpSet,, mas com a ordem invertida. Ele retorna uma lista de outras operações que não estão no opset atual em vez de instruções do opset que não estão no outro.

  • Melhora a forma como a otimização da amostragem de medição é verificada. A parte cara dessa operação agora é feita uma vez durante a construção do circuito, em vez de várias vezes durante a simulação para verificar os requisitos de memória, o método de simulação e a execução final.

Correções de bugs

  • Remova o "extended_stabilizer" dos métodos de simulação selecionados automaticamente. Isso é necessário porque o método do estabilizador estendido não é exato e pode fornecer resultados incorretos para determinados circuitos, a menos que o usuário saiba como otimizar seus parâmetros de configuração.

    O método automático agora seleciona apenas os métodos "stabilizer", "density_matrix" e "statevector". Se um circuito não-Clifford que seja muito grande para o método statevector for executado, uma exceção será levantada, sugerindo que você tente usar explicitamente os métodos "extended_stabilizer" ou "matrix_product_state".

  • Desativa a fusão de portas para o método de simulação do estado do produto da matriz, pois isso estava causando problemas com o retorno de resultados incorretos em alguns casos.

  • Corrige um erro que causa a avaliação incorreta do canal no site qiskit.providers.aer.PulseSimulator.

  • Corrige vários pequenos bugs para casos extremos de análise Hamiltoniana na classe qiskit.providers.aer.pulse.system_models.hamiltonian_model.HamiltonianModel .

Ignis 0.4.0

Prelúdio

A principal alteração feita nesta versão é uma refatoração do código do Randomized Benchmarking para integrar a classe Clifford atualizada do Terra e melhorar a classe CNOT-Dihedral qiskit.quantum_info.Clifford atualizada do Terra e para aprimorar a classe CNOT-Dihedral.

Novos Recurso

  • A função qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq() foi refatorada para usar a classe Clifford atualizada Cliffordpara permitir o Randomized Benchmarking (RB) eficiente em sequências de Clifford com mais de 2 qubits. Além disso, o código da classe CNOT-Dihedral qiskit.ignis.verification.randomized_benchmarking.CNOTDihedral foi refatorado para torná-lo mais eficiente, usando arrays numpy, além de não usar arquivos pickle pré-gerados que armazenam todos os elementos do grupo de 2 qubit. A função qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq() tem um novo kwarg rand_seed que pode ser usado para especificar uma semente para o gerador de números aleatórios usado para gerar os circuitos RB. Isso pode ser útil para ter um circuito reproduzível.
  • A função qiskit.ignis.verification.qv_circuits() tem um novo kwarg seed que pode ser usado para especificar uma semente para o gerador de números aleatórios usado para gerar os circuitos do Quantum Volume. Isso pode ser útil para ter um circuito reproduzível.

Notas da Atualização

  • A função qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq() agora está usando a classe Clifford atualizada Clifford e a classe CNOT-Dihedral atualizada qiskit.ignis.verification.randomized_benchmarking.CNOTDihedral para construir sua saída, em vez de usar tabelas de grupos pré-geradas para os elementos dos grupos Clifford e CNOT-Dihedral, que foram armazenados em arquivos pickle. Isso pode resultar em diferenças sutis em relação ao resultado da versão anterior.
  • Um novo requisito scikit-learn foi adicionado à lista de requisitos. Essa dependência foi adicionada na versão 0.3.0, mas não foi exposta adequadamente como uma dependência nessa versão. Isso levaria a um ImportError se o módulo qiskit.ignis.measurement.discriminator.iq_discriminators fosse importado. Agora, ele está listado corretamente como uma dependência, de modo que o scikit-learn será instalado com o qiskit-ignis.
  • A função qiskit.ignis.verification.qv_circuits() agora está usando a classe da biblioteca de circuitos QuantumVolume para construir sua saída em vez de construir o circuito do zero. Isso pode resultar em diferenças sutis em relação ao resultado da versão anterior.
  • Os instaladores de tomografia agora também podem obter uma lista de objetos de resultado em vez de um único resultado, conforme solicitado na edição nº 320.

Notas de descontinuação

  • O kwarg interleaved_gates para a função qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq() foi preterido e será removido em uma versão futura. Ele foi substituído pelo site interleaved_elem. As funções auxiliares qiskit.ignis.verification.randomized_benchmarking.BasicUtils, qiskit.ignis.verification.randomized_benchmarking.CliffordUtils e qiskit.ignis.verification.randomized_benchmarking.DihedralUtils foram descontinuadas. Essas classes foram substituídas pelo site qiskit.ignis.verification.randomized_benchmarking.RBgroup , que lida com as operações de grupo necessárias para o RB. A classe qiskit.ignis.verification.randomized_benchmarking.Clifford é substituída por Clifford.

  • Os kwargs qr e cr para a função qiskit.ignis.verification.qv_circuits() foram preteridos e serão removidos em uma versão futura. Esses kwargs foram documentados como sendo usados para especificar um qiskit.circuit.QuantumRegister e qiskit.circuit.ClassicalRegister a serem usados nos circuitos Quantum Volume gerados, em vez de criar novos circuitos. No entanto, os parâmetros nunca foram realmente respeitados e um novo registro sempre seria criado, independentemente de eles estarem definidos ou não. Esse comportamento não foi alterado e esses kwargs ainda não têm nenhum efeito, mas estão sendo preteridos antes da remoção para evitar uma alteração significativa para os usuários que possam ter definido qualquer um deles.

  • O suporte para a transmissão de subconjuntos de qubits como uma lista no parâmetro qubit_lists para a função qiskit.ignis.verification.qv_circuits() foi preterido e será removido em uma versão futura. No passado, isso era usado para especificar um layout para executar o circuito em um dispositivo. Em outras palavras, se você tivesse um dispositivo de 5 qubits e quisesse executar um circuito QV de 2 qubits nos qubits 1, 3 e 4 desse dispositivo. Você passaria o endereço [1, 3, 4] como uma das listas em qubit_lists, o que geraria um circuito virtual de 5 qubits e teria qv aplicado aos qubits 1, 3 e 4 nesse circuito virtual. No entanto, essa funcionalidade não é necessária e se sobrepõe ao conceito de initial_layout no transpilador e ao fato de um circuito ter sido incorporado a um conjunto de layouts. Em vez disso, você deve executar transpile() ou execute() com o layout inicial definido para fazer isso. Por exemplo, a execução do exemplo acima se tornaria:

    from qiskit import execute
    from qiskit.ignis.verification import qv_circuits
    
    initial_layout = [1, 3, 4]
    qv_circs, _ = qv_circuits([list(range3)])
    execute(qv_circuits, initial_layout=initial_layout)

Correções de bugs

  • Correção de um erro na posição dos pulsos de medição inseridos pelo site py:func:qiskit.ignis.characterization.calibrations.pulse_schedules.drag_schedules. Correções #465

Aqua 0.7.5

Novos Recurso

  • Removida a dependência flexível do CPLEX no ADMMOptimizer. Agora, os otimizadores padrão usados pelo ADMMOptimizer são MinimumEigenOptimizer para problemas QUBO e SlsqpOptimizer como um otimizador contínuo. Você ainda pode usar o CplexOptimizer como um otimizador para o ADMMOptimizer, mas ele deve ser definido explicitamente.
  • Novo Yahoo! provedor financeiro criado.
  • Introduziu o QuadraticProgramConverter , que é uma classe abstrata para conversores. Foram adicionados os métodos convert/interpret para conversores em vez de encode/decode. Adicionados to_ising e from_ising à classe QuadraticProgram . Movemos todos os parâmetros de convert para o construtor, exceto name. Criado setter/getter para parâmetros do conversor. Adicionados auto_define_penalty e interpret for``LinearEqualityToPenalty``. Agora as mensagens de erro dos conversores são mais informativas.
  • Adicionado um otimizador SLSQP qiskit.optimization.algorithms.SlsqpOptimizer como um invólucro do método de otimização SciPy correspondente. Esse é um otimizador clássico, não depende de algoritmos quânticos e pode ser usado como um substituto para CobylaOptimizer.
  • O otimizador Cobyla foi modificado para acomodar um recurso de início múltiplo introduzido no otimizador SLSQP. Por padrão, o otimizador não é executado no modo de inicialização múltipla.
  • O SummedOp faz uma verificação matematicamente mais correta da igualdade, em que expressões como X + X == 2*X e X + Z == Z + X são avaliadas como True.

Notas de descontinuação

  • A classe do otimizador GSLS descontinuou o parâmetro __init__ max_iter em favor de maxiter. A classe do otimizador SPSA descontinuou o parâmetro __init__ max_trials em favor de maxiter. a função optimize_svm descontinuou o parâmetro max_iters em favor de maxiter. A classe ADMMParameters descontinuou o parâmetro __init__ max_iter em favor de maxiter.
  • As classes de conversão de ising qiskit.optimization.converters.QuadraticProgramToIsing e qiskit.optimization.converters.IsingToQuadraticProgram foram preteridas e serão removidas em uma versão futura. Em vez disso, os métodos qiskit.optimization.QuadraticProgram to_ising() e from_ising() devem ser usados.
  • O método pprint_as_string para qiskit.optimization.QuadraticProgram foi preterido e será removido em uma versão futura. Em vez disso, você deve apenas executar .pprint_as_string() na saída de to_docplex()
  • O método prettyprint para qiskit.optimization.QuadraticProgram foi preterido e será removido em uma versão futura. Em vez disso, você deve apenas executar .prettyprint() na saída de to_docplex()

Correções de bugs

  • Alterado na versão do python 3.8: Em macOS,, o método de início de spawn agora é o padrão. O método fork start deve ser considerado inseguro, pois pode levar a falhas nos subprocessos. No entanto, o P_BFGS não é compatível com o spawn, portanto, voltamos ao processo único. Consulte a página #1109 <https://github.com/qiskit-community/qiskit-aqua/issues/1109> para obter mais detalhes.
  • Os parâmetros de vinculação no site CircuitStateFn não copiavam o valor de is_measurement e sempre definiam is_measurement=False. Isso foi corrigido.
  • Anteriormente, SummedOp.to_matrix_op criava uma lista MatrixOp’s (com matrizes numpy) e depois as somava, retornando uma única MatrixOp. Alguns algoritmos (por exemplo, vqe) exigem a soma de milhares de matrizes, o que esgota a memória ao criar a lista de matrizes. Com essa alteração, nenhuma lista é construída. Em vez disso, cada operando na soma é convertido em uma matriz, adicionado a um acumulador e descartado.
  • A alteração de backends no VQE de statevector para qasm_simulator ou dispositivo real estava causando um erro devido à CircuitSampler reutilização incompatível. O VQE foi alterado para sempre criar um novo CircuitSampler e criar uma nova expectativa caso não seja inserido pelo usuário. Consulte #1153 <https://github.com/qiskit-community/qiskit-aqua/issues/1153> para obter mais detalhes.
  • Os provedores financeiros do Exchange e da Wikipedia foram corrigidos para lidar corretamente com os dados do Quandl. Consulte #775 <https://github.com/qiskit-community/qiskit-aqua/issues/775> para obter mais detalhes. Corrige um erro de divisão por 0 nos cálculos do vetor médio e da matriz de covariância dos provedores financeiros. Consulte o site <https://github.com/qiskit-community/qiskit-aqua/issues/781> nº 781 para obter mais detalhes.
  • A propriedade ListOp.combo_fn foi perdida em várias transformações, como a conversão para outro tipo de operador, a passagem, a redução ou a multiplicação. Agora, esse atributo é propagado para o operador resultante.
  • A avaliação de algumas expressões de operadores, como SummedOp``s and evaluations with the ``CircuitSampler , não tratava os coeficientes corretamente ou os ignorava completamente. E.g. a avaliação de ~StateFn(0 * (I + Z)) @ Plus não resultou em 0 ou a normalização de ~StateFn(I) @ ((Plus + Minus) / sqrt(2)) deixou passar um fator de sqrt(2). Isso foi corrigido.
  • OptimizationResult incluiu alguns setters públicos e as variáveis de classe foram Optional. Essa correção torna todas as variáveis de classe somente leitura para que o mypy e o pylint possam verificar os tipos com mais eficiência. MinimumEigenOptimizer.solve bitstrings gerados em um resultado como str. Essa correção alterou o resultado para List[float] , como fazem os outros algoritmos. Algumas classes públicas relacionadas a algoritmos de otimização estavam faltando na documentação do site qiskit.optimization.algorithms. Essa correção adicionou todas essas classes à documentação. #1131 <https://github.com/qiskit-community/qiskit-aqua/issues/1131> para obter mais detalhes.
  • OptimizationResult.__init__ não verificou se os tamanhos de x e variables são iguais ou não (eles deveriam ser iguais). Essa correção adicionou a verificação para gerar um erro se eles não corresponderem e corrige os erros detectados pela verificação. Essa correção também adiciona testes de unidade ausentes relacionados a OptimizationResult.variable_names e OptimizationResult.variables_dict em test_converters. #1167 <https://github.com/qiskit-community/qiskit-aqua/issues/1167> para obter mais detalhes.
  • Corrigir a vinculação de parâmetros no site OperatorStateFn, que não vinculava parâmetros da primitiva subjacente, mas apenas os coeficientes.
  • op.eval(other)onde op é do tipo OperatorBase, às vezes retorna silenciosamente um valor sem sentido quando o número de qubits em op e other não é igual. Essa correção resulta no comportamento correto, que é lançar um erro em vez de retornar um valor, porque a entrada nesse caso é inválida.
  • O método construct_circuit de VQE retornou anteriormente o valor de expectativa a ser avaliado como tipo OperatorBase. Essa funcionalidade foi transferida para construct_expectation e construct_circuit retorna uma lista dos circuitos que são avaliados para calcular o valor esperado.

IBM 0.8.0

Novos Recurso

  • IBMQBackend agora tem um novo método reservations() que retorna informações de reserva para o backend, com filtragem opcional. Além disso, agora você pode usar o site provider.backends.my_reservations() para consultar suas próprias reservas.
  • qiskit.providers.ibmq.job.IBMQJob.result() gera uma exceção IBMQJobFailureError se o trabalho falhar. A mensagem de exceção agora contém o motivo da falha do trabalho, se o trabalho inteiro falhou por um único motivo.
  • Um novo atributo client_version foi adicionado a IBMQJob e o qiskit.result.Result objeto recuperado via qiskit.providers.ibmq.job.IBMQJob.result(). client_version é um dicionário em que a chave é o nome e o valor é a versão do cliente usada para enviar o trabalho, como o Qiskit.
  • A função least_busy() agora recebe um novo parâmetro opcional reservation_lookahead. Se especificado ou definido como padrão, um backend será considerado indisponível se tiver reservas nos próximos n minutos, em que n é o valor de reservation_lookahead. Por exemplo, se o valor padrão de 60 for usado, todos os back-ends que tiverem reservas nos próximos 60 minutos serão considerados indisponíveis.
  • ManagedResults agora tem um novo método combine_results() que combina os resultados de todos os trabalhos gerenciados e retorna um único Result objeto. Esse objeto Result pode ser usado, por exemplo, em métodos de ajuste qiskit-ignis .

Notas da Atualização

  • Os carimbos de data e hora nos campos a seguir agora estão na hora local em vez de UTC:

    • Propriedades de back-end retornadas por qiskit.providers.ibmq.IBMQBackend.properties().
    • Propriedades de back-end retornadas por qiskit.providers.ibmq.job.IBMQJob.properties().
    • estimated_start_time e estimated_complete_time em QueueInfo, retornado por qiskit.providers.ibmq.job.IBMQJob.queue_info().
    • date in Result, retornado por qiskit.providers.ibmq.job.IBMQJob.result().

    Além disso, espera-se que o parâmetro datetime para qiskit.providers.ibmq.IBMQBackend.properties() também esteja no horário local, a menos que tenha informações de fuso horário UTC.

  • websockets 8.0 ou superior agora é necessário se o site Python 3.7 ou superior for usado. websockets 7.0 continuará a ser usado para Python 3.6 ou abaixo.

  • No Windows, a política de loop de eventos é definida como WindowsSelectorEventLoopPolicy em vez de usar o padrão WindowsProactorEventLoopPolicy. Isso corrige o problema em que o método qiskit.providers.ibmq.job.IBMQJob.result() podia travar no Windows. Correções #691

Notas de descontinuação

  • O uso do Qconfig.py para salvar as credenciais do IBM Quantum Experience está obsoleto e será removido na próxima versão. Em vez disso, você deve usar qiskitrc (o padrão).

Correções de bugs

  • Corrige um problema em que uma chamada para qiskit.providers.ibmq.IBMQBackend.jobs() pode travar se o número de trabalhos retornados for grande. Correções #674
  • Corrige um problema que gerava um ValueError ao criar mapas de erros no Jupyter para backends off-line. Correções #706
  • qiskit.providers.ibmq.IBMQBackend.jobs() agora retornará a lista correta de objetos IBMQJob quando o kwarg status for definido como 'RUNNING'.
  • Os metadados do pacote foram atualizados para refletir corretamente a dependência de qiskit-terra >= 0.14.0. Essa dependência foi adicionada implicitamente como parte da versão 0.7.0, mas não foi refletida nos requisitos do pacote, portanto, era possível instalar o qiskit-ibmq-provider com uma versão do qiskit-terra que era muito antiga. Correções #677
Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.