# Qiskit

Qiskit é um software development kit (SDK) para trabalhar com computadores quânticos no nível de circuitos, pulsos e algoritmos. Ele fornece ferramentas para criar e manipular programas quânticos e executá-los em dispositivos quânticos protótipos na IBM Quantum Platform ou em simuladores em um computador local. Ele segue o modelo de circuito para computação quântica universal, e pode ser usado para qualquer hardware quântico (atualmente suporta qubits supercondutores e íons aprisionados) que segue este modelo.
Qiskit foi fundado pela IBM para permitir o desenvolvimento de software para seu serviço de computação quântica em nuvem, IBM Quantum Experience. Contribuições também são feitas por apoiadores externos, geralmente de instituições acadêmicas.
A versão principal do Qiskit utiliza a linguagem de programação Python. Versões para Swift e JavaScript foram inicialmente exploradas, embora o desenvolvimento para essas versões tenha sido interrompido. Em vez disso, uma reimplementação mínima de recursos básicos está disponível como MicroQiskit, que foi projetada para ser fácil de portar para plataformas alternativas.
Uma variedade de notebooks Jupyter são fornecidos com exemplos de computação quântica sendo usados. Exemplos incluem o código-fonte por trás de estudos científicos que utilizam o Qiskit, bem como um conjunto de exercícios para ajudar as pessoas a aprenderem o básico da programação quântica. Um livro didático de código aberto baseado no Qiskit está disponível como suplemento para cursos universitários de algoritmos quânticos ou computação quântica.

## Componentes

Qiskit é composto por elementos que trabalham juntos para possibilitar a computação quântica. O objetivo central do Qiskit é construir uma pilha de software que torne mais fácil para qualquer pessoa usar computadores quânticos, independentemente do seu nível de habilidade ou área de interesse; o Qiskit permite que os usuários projetem experimentos e aplicativos e os executem em computadores quânticos reais e/ou simuladores clássicos. O Qiskit fornece a capacidade de desenvolver software quântico tanto no nível de código de máquina do OpenQASM, quanto em níveis abstratos adequados para usuários finais sem experiência em computação quântica. Essa funcionalidade é fornecida pelos seguintes componentes.

### Qiskit Terra

O elemento Terra é a base sobre a qual o resto do Qiskit é construído. Qiskit Terra fornece ferramentas para criar circuito quânticos no nível do código de máquina quântico ou próximo a ele. Permite que os processos que são executados em hardware quântico sejam explicitamente construídos em termos de portas quânticas. Ele também fornece ferramentas para permitir que os circuitos quânticos sejam otimizados para um dispositivo, além de gerenciar lotes de trabalhos e executá-los em dispositivos quânticos de acesso remoto e simuladores.
A seguir, mostra um exemplo simples de Qiskit Terra. Nele, um circuito quântico é criado para dois qubits, que consiste nas portas quânticas necessárias para criar um Estado de Bell. O circuito quântico então termina com medidas quânticas, que extraem um bit de cada qubit.

### Qiskit Aer

O elemento Aer fornece simuladores de computação quântica de alto desempenho com modelos realistas de ruído. No curto prazo, o desenvolvimento de software quântico dependerá em grande parte da simulação de dispositivos quânticos pequenos. Para o Qiskit, isso é fornecido pelo componente Aer. Isso fornece simuladores hospedados localmente no dispositivo do usuário, bem como recursos de HPC disponíveis através da nuvem. Os simuladores também podem simular os efeitos do ruído para modelos de ruído simples e sofisticados.
Continuando com o exemplo anterior: Uma vez que o circuito quântico tenha sido criado, ele pode ser executado em um backend (seja hardware quântico ou um simulador). No exemplo a seguir, um simulador local é usado.
A instrução de impressão final aqui mostrará os resultados retornados pelo backend. Este é um dicionário Python que descreve as strings de bits obtidas a partir de múltiplas execuções do circuito quântico. No circuito quântico usado neste exemplo, as strings de bits '00' e '11' devem ser os únicos resultados possíveis, e devem ocorrer com igual probabilidade. Os resultados completos, portanto, normalmente terão as amostras divididas aproximadamente igualmente entre os dois, como {'00':519, '11':505} .
Experimentos feitos em hardware quântico usando o Qiskit foram usados em muitos artigos de pesquisa, tais como em testes de correção de erros quânticos, geração de emaranhamento e simulação de dinâmicas longe do equilíbrio.

### Qiskit Ignis

A partir da versão 0.7.0, lançada em 6 de dezembro de 2021, o Qiskit Ignis foi descontinuado e substituído pelo projeto Qiskit Experiments.
O elemento Ignis fornece ferramentas para verificação de hardware quântico, caracterização de ruído e correção de erros. Ignis é um componente que contém ferramentas para caracterizar o ruído em dispositivos de curto prazo, além de permitir que cálculos sejam realizados na presença de ruído. Isso inclui ferramentas para avaliar dispositivos de curto prazo, mitigação de erros e correção de erros.
Ignis é destinado àqueles que desejam projetar códigos de correção de erros quânticos, ou que desejam estudar maneiras de caracterizar erros por meio de métodos como tomografia, ou até mesmo encontrar uma maneira melhor de usar portas explorando o desacoplamento dinâmico e o controle ótimo.

### Qiskit Aqua

A partir da versão 0.9.0, lançada em 2 de abril de 2021, o Qiskit Aqua foi descontinuado com seu suporte encerrado e seu arquivamento eventual ocorrerá no mínimo 3 meses após essa data.
O elemento Aqua fornecia uma biblioteca de algoritmos interdisciplinares sobre os quais aplicações específicas de domínio podem ser construídas. No entanto, o lançamento do Qiskit 0.25.0 incluiu uma reestruturação das aplicações e algoritmos. O que anteriormente era chamado de Qiskit Aqua, o módulo de aplicações e algoritmos único do Qiskit, agora está dividido em módulos de aplicação dedicados para Otimização, Finanças, Aprendizado de Máquina e Natureza (incluindo Física e Química). Os algoritmos principais e a funcionalidade do operador opflow foram movidos para o Qiskit Terra.
Além da reestruturação, todos os algoritmos seguem um paradigma unificado: os algoritmos são classificados de acordo com os problemas que resolvem, e dentro de uma classe de aplicação, os algoritmos podem ser usados de forma intercambiável para resolver o mesmo problema. Isso significa que, ao contrário do que acontecia antes, as instâncias de algoritmos estão desacopladas do problema que resolvem.

### Qiskit Optimization

Qiskit Optimization é um framework de código aberto que abrange toda a gama desde a modelagem em alto nível de problemas de otimização, com conversão automática de problemas para diferentes representações necessárias, até uma suíte de algoritmos de otimização quântica fáceis de usar que estão prontos para serem executados em simuladores clássicos, bem como em dispositivos quânticos reais via Qiskit. O módulo de Otimização permite a modelagem fácil e eficiente de problemas de otimização usando docplex.

### Qiskit Finance

Qiskit Finance é um framework de código aberto que contém componentes de incerteza para problemas de ações/títulos, tradutores Ising para otimizações de portfólio e provedores de dados para fornecer dados reais ou aleatórios para experimentos financeiros.

### Qiskit Machine Learning

O pacote de Aprendizado de Máquina (até 2021) contém conjuntos de dados de exemplo atualmente. Ele possui alguns algoritmos de classificação como QSVM e VQC (Classificador Variacional Quântico), onde esses dados podem ser usados para experimentos, e também há o algoritmo QGAN (Rede Adversária Generativa Quântica).

### Qiskit Nature

Qiskit Nature é uma estrutura de código aberto que suporta problemas, incluindo cálculos de energia do estado fundamental, estados excitados e momentos de dipolo de moléculas, tanto de concha aberta quanto fechada. O código inclui drivers de química, que quando fornecidos com uma configuração molecular, retornarão integrais de um e dois corpos, bem como outros dados que são eficientemente computados de forma clássica. Esses dados de saída de um driver podem então ser usados como entrada no Qiskit Nature, que contém lógica capaz de traduzir isso para uma forma adequada para algoritmos quânticos.