Notas de versão do Qiskit 0.5
0.5
Terra 0.5
Destaques
Esta versão traz vários aprimoramentos para o Qiskit, tanto para a experiência do usuário quanto para a parte interna. Consulte o changelog completo para obter uma descrição detalhada das alterações - os destaques são:
- novo
statevectorsimulatorse aprimoramentos de recursos e desempenho nos existentes (em particular no simulador C++), juntamente com uma reorganização de como trabalhar com back-ends com foco em extensibilidade e flexibilidade (usando aliases e provedores de back-end) - reorganização dos recursos assíncronos, fornecendo uma interface mais amigável para a execução de trabalhos de forma assíncrona por meio de instâncias do
Job - diversos aprimoramentos e correções em todo o Terra, tanto para a conveniência dos usuários (como permitir registros anônimos) quanto para melhorar a funcionalidade (como plotagem aprimorada de circuitos)
Considerações de Compatibilidade
Observe que várias alterações incompatíveis com versões anteriores foram introduzidas durante esta versão como resultado do desenvolvimento contínuo. Embora alguns desses recursos continuem a ter suporte durante um período de tempo antes de serem totalmente descontinuados, é recomendável atualizar seus programas para se preparar para as novas versões e aproveitar as vantagens da nova funcionalidade.
QuantumProgram mudanças
Vários métodos da classe QuantumProgram estão a caminho de se tornarem obsoletos:
-
para interagir com os back-ends e a API :
A maneira recomendada de abrir uma conexão com a API IBM Q e de usar os back-ends é por meio das funções de nível superior diretamente, em vez dos métodos
QuantumProgram. Em particular, o métodoqiskit.register()fornece o equivalente à chamadaqiskit.QuantumProgram.set_api()anterior. De forma semelhante, há um novoqiskit.available_backends(),qiskit.get_backend()e funções relacionadas para consultar diretamente os backends disponíveis. Por exemplo, o seguinte snippet para a versão 0.4:from qiskit import QuantumProgram quantum_program = QuantumProgram() quantum_program.set_api(token, url) backends = quantum_program.available_backends() print(quantum_program.get_backend_status('ibmqx4')seria equivalente ao seguinte trecho para a versão 0.5:
from qiskit import register, available_backends, get_backend register(token, url) backends = available_backends() backend = get_backend('ibmqx4') print(backend.status) -
métodos de compilação e execução de programas :
As funções de nível superior agora também oferecem equivalentes para os métodos
qiskit.QuantumProgram.compile()eqiskit.QuantumProgram.execute(). Por exemplo, o seguinte trecho da versão 0.4:quantum_program.execute(circuit, args, ...)seria equivalente ao seguinte trecho para a versão 0.5:
from qiskit import execute execute(circuit, args, ...)
Em geral, da versão 0.5 em diante, recomendamos que você tente usar os objetos e as classes individuais diretamente, em vez de depender do QuantumProgram. Por exemplo, um QuantumCircuit pode ser instanciado e construído anexando diretamente QuantumRegister, ClassicalRegister e gates. Consulte o exemplo de atualização na seção Quickstart ou os exemplos using_qiskit_core_level_0.py e using_qiskit_core_level_1.py no repositório principal.
Alterações no nome do backend
Para oferecer uma estrutura mais extensível para back-ends, houve algumas alterações no design:
-
nomes de simuladores locais
Os nomes dos simuladores locais foram homogeneizados para seguir o mesmo padrão:
PROVIDERNAME_TYPE_simulator_LANGUAGEORPROJECT- por exemplo, o simulador C++ anteriormente denominadolocal_qiskit_simulatoragora élocal_qasm_simulator_cpp. Uma visão geral dos simuladores atuais:QASMo simulador deve ser como um experimento. Você aplica um circuito em alguns qubits e observa os resultados das medições - e repete várias vezes para obter um histograma de contagens por meio do siteresult.get_counts().Statevectoro objetivo do simulador é obter o vetor de estado completo ( amplitudes) após a evolução do estado zero pelo circuito, e pode ser obtido emresult.get_statevector().Unitaryo simulador deve obter a matriz unitária equivalente do circuito, retornada por meio deresult.get_unitary().- Além disso, você pode obter estados intermediários de um simulador aplicando uma instrução
snapshot(slot)em vários pontos do circuito. Isso salvará o estado atual do simulador em um determinado slot, que poderá ser recuperado posteriormente por meio do siteresult.get_snapshot(slot).
-
aliases de backend :
O SDK agora oferece um sistema de "alias" que permite usar automaticamente o simulador de melhor desempenho de um tipo específico, se ele estiver disponível em seu sistema. Por exemplo, com o seguinte snippet:
from qiskit import get_backend backend = get_backend('local_statevector_simulator')o backend será o simulador de vetor de estado C++, se disponível, voltando para o simulador de vetor de estado Python se não estiver presente.
Nomes e parâmetros mais flexíveis
Várias funções do SDK se tornaram mais flexíveis e fáceis de usar:
-
nomes de circuitos e registros automáticos
qiskit.ClassicalRegisteragora, os sitesqiskit.QuantumRegistereqiskit.QuantumCircuitpodem ser instanciados sem que seja necessário dar um nome explícito a eles - um novo recurso de autonomeação atribuirá automaticamente um identificador a eles:q = QuantumRegister(2)Observe também que a ordem dos parâmetros foi trocada
QuantumRegister(size, name). -
métodos que aceitam nomes ou instâncias
Em combinação com as alterações de autonomeação, vários métodos, como
qiskit.Result.get_data(), agora aceitam nomes e instâncias por conveniência. Por exemplo, ao recuperar os resultados de um trabalho que tem um único circuito, comoqc = QuantumCircuit(..., name='my_circuit') job = execute(qc, ...) result = job.result()As chamadas a seguir são equivalentes:
data = result.get_data('my_circuit') data = result.get_data(qc) data = result.get_data()