Estratégia de Desenvolvimento¶
Versionamento¶
O projeto do Qiskit é composto por vários elementos cada um executando diferentes funcionalidades. Cada um é útil de forma independente e pode ser usado por conta própria, mas por conveniência fornecemos este repositório e meta-pacote para fornecer um único ponto de entrada para instalar todos os elementos de uma só vez. Isso é para simplificar o processo de instalação e fornecer uma interface unificada para os usuários finais. No entanto, porque cada elemento Qiskit possui lançamentos e versões próprios alguns cuidados são necessários ao lidar com versões entre os diferentes repositórios. Este documento delineia as diretrizes para lidar com versões e releases tanto dos elementos Qiskit quanto do meta-pacote.
Para o resto deste guia, a nomenclatura de versionamento semântico padrão será usada: Maior.Menor.Correção
para se referir aos diferentes componentes de um número de versão. Por exemplo, se o número da versão era 0.7.1
, então a versão maior é 0
, a versão menor 7
e a versão de correção é 1
.
Versão do Meta-Pacote¶
A versão meta-pacote Qiskit é um valor independente que é determinado pelo release de cada um dos elementos que estão sendo rastreados. Cada vez que liberamos um release para um componente rastreado (ou adiciamos um elemento) os requisitos de meta-pacote, e versão precisarão ser atualizados e um novo release publicado. O momento deve ser coordenado com a liberação de elementos para garantir que os releases de meta-pacote se encaixem com os releases dos elementos.
Adicionando Novos Elementos¶
Quando um novo elemento Qiskit está sendo adicionado aos requisitos do meta-pacote, precisamos aumentar a versão Menor do meta-pacote.
Por exemplo, se o meta-pacote está rastreando 2 elementos qiskit-aer
e qiskit-terra
e sua versão é 0.7.4
. Em seguida, lançamos um novo elemento qiskit-ignis
que pretendiamos ter incluído também no meta-pacote. Quando adicionamos o novo elemento ao meta-pacote, aumentamos a versão para 0.8.0
.
Incrementos da Versão de Correção¶
Quando qualquer elemento Qiskit que já está sendo rastreado pelo meta-pacote libera uma versão de correção para corrigir bugs em um lançamento precisamos também aumentar o requisito no setup.py e, em seguida, incrementar a versão de correção do meta-pacote.
Por exemplo, se o meta-pacote está monitorando 3 elementos qiskit-terra==0.8.1
, qiskit-aer==0.2.1
, e qiskit-ignis==0.1.4
com a versão atual 0.9.6
. Quando o qiskit-terra lançar uma nova versão de correção para corrigir um bug 0.8.2
o meta-pacote também precisará aumentar sua versão de correção e lançamento, tornando-se 0.9.7
.
Adicionalmente, há ocasionalmente outros bugs no próprio meta-pacote que precisam ser corrigidos através da liberação de novos releases. Quando esses erros forem encontrados, devemos aumentar a versão de correção para diferenciá-la do release quebrado. Não delete o release quebrado ou quaisquer releases antigos do pypi em qualquer situação, em vez disso basta aumentar a versão de correção e fazer o upload de um novo release.
Incrementos da Versão de Menor¶
Além de adicionar um novo elemento ao meta-pacote a versão menor do meta-pacote também deve ser aumentada sempre que uma versão menor for aumentada em um elemento rastreado.
Por exemplo, se o meta-pacote está rastreando 2 elementos qiskit-terra==0.7.0
e qiskit-aer==0.1.1
e a versão atual é 0.7.5
. Quando o elemento qiskit-aer
libera 0.2.0
então precisamos aumentar a versão do meta-pacote para ser 0.8.0
para corresponder à nova versão.
Incrementos da Versão de Maior¶
A versão maior é diferente das outras componentes de números de versão. Ao contrário das outras componentes de números de versão, que são atualizados em sincronia com cada elemento rastreado, a versão maior só é aumentada quando todas as versões reastreadas são incrementadas (pelo menos antes de 1.0.0
). No momento, todos os elementos ainda têm um componente de número de versão maior de 0
e até que cada elemento rastreado no meta-repositório esteja marcado como estável ao subir para a versão principal para ser >=1
a versão do meta-pacote não deve aumentar a versão maior.
O comportamento do rastreamento da componente de número da versão maior após todos os elementos estarem em >=1.0.0 ainda não foi decidido.
Rastreamento do Requisito do Elemento Qiskit¶
Embora não esteja estritamente relacionado com o meta-pacote e com o versionamento do Qiskit, como rastreamos as versões do elemento na lista de requisitos do meta-pacote é importante. Cada elemento listado no setup.py deve ser fixado a uma única versão. Isso significa que cada versão do Qiskit só deve instalar uma única versão para cada elemento rastreado. Por exemplo, a lista de requisitos em qualquer ponto deve parecer com:
requirements = [
"qiskit_terra==0.7.0",
"qiskit-aer==0.1.1",
]
Isto serve para ajudar na depuração, mas também para tornar o rastreamento das versões entre múltiplos elementos mais transparente.
Vale ressaltar também que a ordem na qual instalamos os elementos é criticamente importante também. pip
não tem um resolvedor de dependências real o que significa que a ordem da instalação importa. Portanto, se existem versões de requisitos sobrepostos entre elementos ou dependências entre elementos precisamos garantir que a ordem na lista de requisitos instale tudo como esperado. Se a ordem precisa ser alterada para alguma incompatibilidade no tempo de instalação ela deve ser notada claramente.
Extensões da Comunidade¶
O Qiskit foi projetado com modularidade em mente. Ele é extensível de muitas maneiras diferentes; na página, destacamos as maneiras pelas quais a comunidade do Qiskit se engajou com o Qiskit e desenvolveu extensões e pacotes em cima dele.
Provedores¶
O provedor base do Qiskit é uma entidade que fornece acesso a um grupo de diferentes backends (por exemplo, backends disponíveis através do IBM Quantum). Ele interage com aqueles backends para fazer muitas coisas: descobrir quais estão disponíveis, recuperar uma instância de um backend particular, obter propriedades e configurações do backend, e manipular a execução e o trabalho com tarefas (jobs).
Provedores adicionais¶
Simulador quântico baseado em diagramas de decisão
- Organization: Johannes Kepler University, Linz, Austria (Alwin Zulehner and Robert Wille)- Description: A local provider which allows Qiskit to use decision diagram-based quantum simulation- Qiskit Version: 0.7Quantum Inspire
- Organization: QuTech-Delft- Description: A provider for the Quantum Inspire backend- Qiskit Version: 0.7- More info: Medium Blog and GitHub.
Transpilador¶
Otimização de circuitos está no coração de tornar a computação quântica viável em hardware real. Um componente central do Qiskit é o transpilador, que é um framework para manipulação de circuitos quânticos de acordo com certas transformações (conhecidas como passes do transpilador). O transpilador possibilita que os usuários criem conjuntos personalizados de passes, orquestrados por um gerenciador de passes, para transformar o circuito de acordo com as regras especificadas pelos passes. Além disso, a arquitetura do transpilador é projetada para modularidade e extensibilidade, permitindo que os usuários do Qiskit escrevam seus próprios passes, usem-os no gerenciador de passes e combinem-os com passes existentes. Dessa forma, a arquitetura do transpilador abre a porta para pesquisa em otimização agressiva de circuitos quânticos.
Passes adicionais¶
t|ket〉passe de otimização & roteamento
- Organization: Cambridge Quantum Computing- Description: Transpiler pass for circuit optimization and mapping to backend using CQC’s t|ket〉compiler.- Qiskit Version: 0.7- More info: Tutorial Notebook and GitHub.
Ferramentas¶
Estender o Qiskit com novas ferramentas e funcionalidades é uma parte importante da construção de uma comunidade. Essas ferramentas podem ser novas visualizações, integração com o slack, extensões para Jupyter e muito mais.
Ferramentas Adicionais¶
Biblioteca OpenControls
- Organization: Q-CTRL- Description: Library of quantum control pulses derived from the open literature.- Qiskit Version: 0.7- More info: GitHub and Q-CTRL website