NLocal
class qiskit.circuit.library.NLocal(num_qubits=None, rotation_blocks=None, entanglement_blocks=None, entanglement=None, reps=1, insert_barriers=False, parameter_prefix='θ', overwrite_block_parameters=True, skip_final_rotation_layer=False, skip_unentangled_qubits=False, initial_state=None, name='nlocal', flatten=None)
Bases: BlueprintCircuit
A classe de circuito n-local.
A estrutura do circuito n-local é composta por camadas alternadas de rotação e emaranhamento. Em ambas as camadas, os blocos de circuito parametrizados atuam no circuito de uma maneira definida. Na camada de rotação, os blocos são aplicados empilhados uns sobre os outros, enquanto na camada de emaranhamento, de acordo com a estratégia entanglement . Os blocos do circuito podem ter tamanhos arbitrários (menor igual ao número de qubits no circuito). Cada camada é repetida reps vezes e, por padrão, uma camada de rotação final é anexada.
Por exemplo, um bloco de rotação em 2 qubits e um bloco de emaranhamento em 4 qubits usando o emaranhamento 'linear' produz o seguinte circuito.
┌──────┐ ░ ┌──────┐ ░ ┌──────┐
┤0 ├─░─┤0 ├──────────────── ... ─░─┤0 ├
│ Rot │ ░ │ │┌──────┐ ░ │ Rot │
┤1 ├─░─┤1 ├┤0 ├──────── ... ─░─┤1 ├
├──────┤ ░ │ Ent ││ │┌──────┐ ░ ├──────┤
┤0 ├─░─┤2 ├┤1 ├┤0 ├ ... ─░─┤0 ├
│ Rot │ ░ │ ││ Ent ││ │ ░ │ Rot │
┤1 ├─░─┤3 ├┤2 ├┤1 ├ ... ─░─┤1 ├
├──────┤ ░ └──────┘│ ││ Ent │ ░ ├──────┤
┤0 ├─░─────────┤3 ├┤2 ├ ... ─░─┤0 ├
│ Rot │ ░ └──────┘│ │ ░ │ Rot │
┤1 ├─░─────────────────┤3 ├ ... ─░─┤1 ├
└──────┘ ░ └──────┘ ░ └──────┘
| |
+---------------------------------+
repeated reps timesSe especificado, as barreiras podem ser inseridas entre cada bloco. Se um objeto de estado inicial for fornecido, ele será adicionado na frente do NLocal.
A função n_local() constrói um circuito funcionalmente equivalente, porém mais rápido.
A classe qiskit.circuit.library.n_local.n_local.NLocal está obsoleta desde o Qiskit 2.1. Ele será removido no Qiskit 3.0. Isso também se aplica às subclasses NLocal. Em vez disso, use a função correspondente do módulo qiskit.circuit.library.n_local.
Parâmetros
- num_qubits (int | None) – O número de qubits do circuito.
- rotation_blocks (QuantumCircuit |list[QuantumCircuit] | qiskit.circuit.Instruction |list[qiskit.circuit.Instruction] | None) – Os blocos usados nas camadas de rotação. Se várias forem passadas, elas serão aplicadas uma após a outra (como novas subcamadas).
- entanglement_blocks (QuantumCircuit |list[QuantumCircuit] | qiskit.circuit.Instruction |list[qiskit.circuit.Instruction] | None) – Os blocos usados nas camadas de emaranhamento. Se vários forem passados, eles serão aplicados um após o outro. Para usar diferentes emaranhados para as subcamadas, consulte
get_entangler_map(). - entanglement (list[int] | list[list[int]] | None) – Os índices que especificam em quais qubits os blocos de entrada atuam. Se
None, os blocos de emaranhamento são aplicados na parte superior do circuito. - reps (int) – Especifica a frequência com que os blocos de rotação e os blocos de entrelaçamento são repetidos.
- insert_barriers (bool) – Se
True, são inseridas barreiras entre cada camada. Se forFalse, nenhuma barreira será inserida. - parameter_prefix (str) – O prefixo usado se forem gerados parâmetros padrão.
- overwrite_block_parameters (bool |list[list[Parameter]]) – Se os parâmetros nos blocos adicionados devem ser substituídos. Se
False, os parâmetros nos blocos não serão alterados. - skip_final_rotation_layer (bool) – Se uma camada de rotação final é adicionada ao circuito.
- skip_unentangled_qubits (bool) – Se
True, as portas de rotação atuam somente nos qubits que estão emaranhados. SeFalse, as portas de rotação atuam em todos os qubits. - initial_state (QuantumCircuit | None) – A
QuantumCircuitobjeto que pode ser usado para descrever um estado inicial anexado ao circuito NLocal. - name (str) – O nome do circuito.
- flatten (bool | None) – Defina essa opção como
Truepara gerar um circuito plano em vez de aninhá-lo em várias camadas de objetos de porta. Por padrão, atualmente, o conteúdo do circuito de saída será agrupado em objetos aninhados para uma visualização mais limpa. No entanto, se estiver usando esse circuito para qualquer coisa além de visualização, é altamente recomendável definir esse sinalizador comoTruepara evitar uma grande sobrecarga de desempenho para a vinculação de parâmetros.
Aumentos
- ValueError - Se o parâmetro
repsfor menor ou igual a 0. - TypeError - Se o parâmetro
repsnão for um valor int.
Atributos
entanglement
Obtenha a estratégia de emaranhamento.
Retorna
A estratégia de entrelaçamento, consulte get_entangler_map() para obter mais detalhes sobre como o formato é interpretado.
entanglement_blocks
Os blocos nas camadas de emaranhamento.
Retorna
Os blocos nas camadas de emaranhamento.
flatten
Retorna se o circuito está envolvido em portas/instruções aninhadas ou achatadas.
initial_state
Retorna o estado inicial que é adicionado na frente do circuito n-local.
Retorna
O estado inicial.
insert_barriers
Se as barreiras são inseridas entre as camadas ou não.
Retorna
Truese as barreiras forem inseridas entre as camadas, False caso contrário.
num_layers
Retorna o número de camadas no circuito n-local.
Retorna
O número de camadas no circuito.
num_parameters_settable
O número total de parâmetros que podem ser definidos com valores distintos.
Isso não muda quando os parâmetros são vinculados ou trocados pelos mesmos parâmetros e, portanto, é diferente de num_parameters , que conta o número de objetos exclusivos atualmente no circuito Parameter objetos exclusivos atualmente no circuito.
Retorna
O número de parâmetros originalmente disponíveis no circuito.
Essa quantidade não requer que o circuito seja construído ainda.
num_qubits
Retorna o número de qubits nesse circuito.
Retorna
O número de qubits.
ordered_parameters
Os parâmetros usados no circuito subjacente.
Isso inclui valores flutuantes e duplicatas.
Exemplos
>>> # prepare circuit ...
>>> print(nlocal)
┌───────┐┌──────────┐┌──────────┐┌──────────┐
q_0: ┤ Ry(1) ├┤ Ry(θ[1]) ├┤ Ry(θ[1]) ├┤ Ry(θ[3]) ├
└───────┘└──────────┘└──────────┘└──────────┘
>>> nlocal.parameters
{Parameter(θ[1]), Parameter(θ[3])}
>>> nlocal.ordered_parameters
[1, Parameter(θ[1]), Parameter(θ[1]), Parameter(θ[3])]Retorna
Os objetos de parâmetros usados no circuito.
parameter_bounds
Os limites de parâmetros para os parâmetros não vinculados no circuito.
Retorna
Uma lista de pares indicando os limites, como (inferior, superior). Nenhum indica um parâmetro não limitado na direção correspondente. Se None for retornado, o problema é totalmente ilimitado.
preferred_init_points
Os pontos iniciais dos parâmetros. Pode ser armazenado como estimativa inicial na otimização.
Retorna
Os valores iniciais dos parâmetros, ou None, se nenhum tiver sido definido.
reps
O número de vezes que a rotação e o bloco de emaranhamento são repetidos.
Retorna
O número de repetições.
rotation_blocks
Os blocos nas camadas de rotação.
Retorna
Os blocos nas camadas de rotação.
name
Tipo: str
Um nome legível por humanos para o circuito.
Exemplo
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuitMétodos
add_layer
add_layer(other, entanglement=None, front=False)
Anexar outra camada ao NLocal.
Parâmetros
- other (QuantumCircuit |qiskit.circuit.Instruction) – A camada a ser composta pode ser outro NLocal, uma instrução ou porta, ou um QuantumCircuit.
- entanglement (list[int] | str |list[list[int]] | None) – Os índices de emaranhamento ou de qubit.
- front (bool) – Se True,
otherserá anexado na frente, caso contrário, na parte de trás.
Retorna
de modo que composições encadeadas sejam possíveis.
Aumentos
TypeError - Se o outro não for compatível, ou seja, não for uma instrução e não tiver um método to_instruction.
Tipo de retorno
assign_parameters
assign_parameters(parameters, inplace=False, **kwargs)
Atribuir parâmetros ao circuito n-local.
Esse método também suporta a passagem de uma lista em vez de um dicionário. Se uma lista for passada, ela deverá ter o mesmo comprimento que o número de parâmetros não vinculados no circuito. Os parâmetros são atribuídos na ordem dos parâmetros em ordered_parameters().
Retorna
Uma cópia do circuito NLocal com os parâmetros especificados.
Aumentos
AttributeError - Se os parâmetros forem fornecidos como lista e não corresponderem ao número de parâmetros.
Parâmetros
- parameters (Mapping[Parameter, ParameterExpression |float] | Sequence[ParameterExpression |float])
- inplace (bool)
Tipo de retorno
QuantumCircuit | Nenhum
get_entangler_map
get_entangler_map(rep_num, block_num, num_block_qubits)
Obtenha o mapa de emaranhamento para a repetição rep_num e o bloco block_num.
O mapa de emaranhamento do bloco atual é derivado do valor de self.entanglement. Abaixo estão listados os diferentes casos, onde i e j denotam o número de repetição e o número do bloco, respectivamente, e n o número de qubits no bloco.
tipo de emaranhamento | mapa de emaranhamento |
|---|---|
None | [[0, ..., n - 1]] |
str (por exemplo 'full') | a conectividade especificada nos n qubits |
List[int] | [entanglement] |
List[List[int]] | entanglement |
List[List[List[int]]] | entanglement[i] |
List[List[List[List[int]]]] | entanglement[i][j] |
List[str] | a conectividade especificada em entanglement[i] |
List[List[str]] | a conectividade especificada em entanglement[i][j] |
Callable[int, str] | mesmo que List[str] |
Callable[int, List[List[int]]] | mesmo que List[List[List[int]]] |
Observe que todos os índices devem ser tomados no módulo do comprimento da matriz em que atuam, ou seja, nenhum erro de índice fora dos limites será gerado, mas repetiremos a iteração desde o início da lista.
Parâmetros
- rep_num (int) – A repetição atual em que nos encontramos.
- block_num (int) – O número do bloco dentro das camadas de emaranhamento.
- num_block_qubits (int) – O número de qubits no bloco.
Retorna
O mapa de emaranhamento para o bloco atual na repetição atual.
Aumentos
ValueError - Se o valor de entanglement não puder ser convertido em um mapa de emaranhamento correspondente.
Tipo de retorno
Sequência[* Sequência*[ int ]]
get_unentangled_qubits
get_unentangled_qubits()
Obtenha os índices de qubits não emaranhados em um conjunto.
Retorna
Os qubits não emaranhados.
Tipo de retorno