Skip to main content
IBM Quantum Platform

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 statevector simulators e 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étodo qiskit.register() fornece o equivalente à chamada qiskit.QuantumProgram.set_api() anterior. De forma semelhante, há um novo qiskit.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() e qiskit.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 denominado local_qiskit_simulator agora é local_qasm_simulator_cpp. Uma visão geral dos simuladores atuais:

    • QASM o 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 site result.get_counts().
    • Statevector o objetivo do simulador é obter o vetor de estado completo ( 2n2^n amplitudes) após a evolução do estado zero pelo circuito, e pode ser obtido em result.get_statevector().
    • Unitary o simulador deve obter a matriz unitária equivalente do circuito, retornada por meio de result.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 site result.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 sites qiskit.QuantumRegister e qiskit.QuantumCircuit podem 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, como

    qc = 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()
Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.