Skip to main content
IBM Quantum Platform

BitFlipOracleGate

class qiskit.circuit.library.BitFlipOracleGate(expression, var_order=None, label=None)

GitHub

Bases: Gate

Implementa um oráculo de inversão de bits

O objeto Bit-flip Oracle Gate constrói circuitos para qualquer expressão lógica de entrada arbitrária. Uma expressão lógica é composta pelos operadores lógicos & (AND lógico), | (OR lógico), ~ (NOT lógico) e ^ (XOR lógico). bem como símbolos para literais (variáveis). Por exemplo, 'a & b' e ( v0 | ~v1 ) & ( ~v2 & v3 ) são representações válidas de expressões lógicas booleanas.

Um oráculo de inversão de bits para uma função booleana f(x) realiza a seguinte operação quântica:

xyxf(x)y|x\rangle|y\rangle \mapsto |x\rangle|f(x)\oplus y\rangle

Por conveniência, esse oráculo, além de analisar expressões lógicas arbitrárias, também é compatível com cadeias de caracteres de entrada no formato DIMACS CNF, que é o formato padrão para especificar instâncias de problemas de SATisfiabilidade (SAT) na Forma Normal Conjuntiva (CNF), que é uma conjunção de uma ou mais cláusulas, em que uma cláusula é uma disjunção de um ou mais literais. Consulte qiskit.circuit.library.bit_flip_oracle.BitFlipOracleGate.from_dimacs_file().

A partir de 16 variáveis, deve-se esperar possíveis problemas de desempenho ao usar o sintetizador padrão.

Parâmetros

  • expression (str | BooleanExpression) – Uma cadeia de caracteres de expressão booleana semelhante a Python ou um objeto BooleanExpression.
  • var_order (list[str] | None) – Uma lista com a ordem em que as variáveis serão criadas. (padrão: por aparência)
  • label (str | None) – Um rótulo para o gate a ser exibido nas visualizações. Por padrão, o rótulo está configurado para exibir a representação textual da expressão booleana (truncada, se necessário)

Atributos

base_class

Obtém a classe base dessa instrução. É garantido que isso esteja na árvore de herança de self.

A "classe base" de uma instrução é a classe mais baixa em sua árvore de herança com a qual o objeto deve ser considerado totalmente compatível para aplicativos de circuito. Isso normalmente significa que a subclasse é definida apenas para oferecer algum tipo de conveniência ao programador em relação à classe base, e a classe base é a classe "verdadeira" em uma perspectiva comportamental. Em particular, você não deve substituir base_class se estiver definindo uma versão personalizada de uma instrução que será implementada de forma diferente pelo hardware, como uma estratégia de medição alternativa ou uma versão de uma porta parametrizada com um conjunto específico de parâmetros para fins de distinção em um Target da porta parametrizada completa.

Isso geralmente é exatamente equivalente a type(obj), exceto no caso de instâncias únicas de instruções de biblioteca padrão. Essas instâncias singleton são subclasses especiais de sua classe base, e essa propriedade retornará essa base. Por exemplo:

>>> isinstance(XGate(), XGate)
True
>>> type(XGate()) is XGate
False
>>> XGate().base_class is XGate
True

Em geral, não se deve confiar na classe precisa de uma instrução; em um determinado circuito, espera-se que Instruction.name seja um discriminador mais adequado na maioria das situações.

decompositions

Obtenha as decomposições da instrução no site SessionEquivalenceLibrary.

definition

Definição de retorno em termos de outras portas básicas.

label

Etiqueta de instruções de devolução

mutable

Essa instância é uma instância única mutável ou não.

Se esse atributo for False , a instância do portão será um singleton compartilhado e não será mutável.

name

Retorna o nome.

num_clbits

Retorna o número de clbits.

num_qubits

Retorna o número de qubits.

params

Os parâmetros do site Instruction. O ideal é que sejam ângulos de portão.


Métodos

add_decomposition

add_decomposition(decomposition)

GitHub

Adicione uma decomposição da instrução ao site SessionEquivalenceLibrary.

broadcast_arguments

broadcast_arguments(qargs, cargs)

GitHub

Validação e manipulação dos argumentos e seu relacionamento.

Por exemplo, cx([q[0],q[1]], q[2]) significa cx(q[0], q[2]); cx(q[1], q[2]). Esse método produz os argumentos no agrupamento correto. No exemplo dado:

in: [[q[0],q[1]], q[2]],[]
outs: [q[0], q[2]], []
      [q[1], q[2]], []

As regras gerais de transmissão são:

  • Se len(qargs) == 1:

    [q[0], q[1]] -> [q[0]],[q[1]]
  • Se len(qargs) == 2:

    [[q[0], q[1]], [r[0], r[1]]] -> [q[0], r[0]], [q[1], r[1]]
    [[q[0]], [r[0], r[1]]]       -> [q[0], r[0]], [q[0], r[1]]
    [[q[0], q[1]], [r[0]]]       -> [q[0], r[0]], [q[1], r[0]]
  • Se len(qargs) >= 3:

    [q[0], q[1]], [r[0], r[1]],  ...] -> [q[0], r[0], ...], [q[1], r[1], ...]

Parâmetros

  • qargs (list) – Lista de argumentos de bits quânticos.
  • cargs (list) – Lista de argumentos clássicos de bits.

Retorna

Uma tupla com argumentos únicos.

Aumentos

CircuitError - Se a entrada não for válida. Por exemplo, o número de argumentos não corresponde à expectativa da porta.

Tipo de retorno

Iterável [ tupla [ lista, lista ]]

control

control(num_ctrl_qubits=1, label=None, ctrl_state=None, annotated=None)

GitHub

Retorna a versão controlada de si mesmo.

A porta controlada é implementada como ControlledGate quando annotated é False, e como AnnotatedOperation quando annotated é True.

Obsoleto desde a versão 2.3

qiskit.circuit.gate.Gate.control()O argumento annotated está obsoleto a partir do Qiskit 2.3. Ele será removido no Qiskit 3.0. O método Gate.control não aceita mais annotated=None. O novo padrão é annotated=True, que representa o portão controlado como um portão controlado ( AnnotatedOperation ), a menos que já exista uma classe dedicada para portões controlados. Você pode definir explicitamente annotated=False para preservar o comportamento anterior. No entanto, recomenda-se usar annotated=True, pois isso adia a construção do circuito controlado para o transpiler e, além disso, permite otimizações adicionais do gate controlado (geralmente levando a circuitos de maior qualidade).

Parâmetros

  • num_ctrl_qubits (int) – Número de controles a serem adicionados. Padroniza para 1.
  • label (str | None) – Etiqueta opcional para o portão. Padroniza para None. Ignorado se o gate controlado for implementado como uma operação anotada.
  • ctrl_state (int |str | None) – O estado de controle da porta, especificado como um número inteiro ou uma sequência de bits (por exemplo "110"). Se None, o padrão é o estado 2**num_ctrl_qubits - 1todos-uns.
  • annotated (bool | None) – Indica se o gate controlado deve ser implementado como um gate controlado ou como uma operação anotada. Se None, tratado como False.

Retorna

Uma versão controlada deste portão.

Aumentos

QiskitError – inválido num_ctrl_qubits ou ctrl_state.

copy

copy(name=None)

GitHub

Cópia da instrução.

Parâmetros

name (str) – nome a ser dado ao circuito copiado; se for None , o nome permanecerá o mesmo.

Retorna

uma cópia da instrução atual, com o nome atualizado, caso tenha sido fornecido

Tipo de retorno

qiskit.circuit.Instruction

from_dimacs_file

classmethod from_dimacs_file(filename)

GitHub

Crie um BitFlipOracleGate a partir da cadeia de caracteres no formato DIMACS.

É possível criar um BitFlipOracleGate a partir de um arquivo no formato DIMACS CNF, que é o formato padrão para especificar instâncias de problemas de SATisfiabilidade (SAT) na Forma Normal Conjuntiva (CNF), que é uma conjunção de uma ou mais cláusulas, em que uma cláusula é uma disjunção de um ou mais literais.

A seguir, um exemplo de um CNF expresso no formato DIMACS:

c DIMACS CNF file with 3 satisfying assignments: 1 -2 3, -1 -2 -3, 1 2 -3.
p cnf 3 5
-1 -2 -3 0
1 -2 3 0
1 2 -3 0
1 -2 -3 0
-1 2 3 0

A primeira linha, após o caractere c, é um comentário. A segunda linha especifica que o CNF é sobre três variáveis booleanas - vamos chamá-las de x1,x2,x3x_1, x_2, x_3 - e contém cinco cláusulas. As cinco cláusulas, listadas a seguir, são implicitamente unidas pelo operador lógico AND, \land, enquanto as variáveis em cada cláusula, representadas por seus índices, são implicitamente disjuntas pelo operador lógico OR, \lor. O símbolo - que precede um índice de variável booleana corresponde ao operador lógico NOT, ¬\lnot. O caractere 0 (zero) marca o fim de cada cláusula. Essencialmente, o código acima corresponde ao seguinte CNF:

(¬x1¬x2¬x3)(x1¬x2x3)(x1x2¬x3)(x1¬x2¬x3)(¬x1x2x3)(\lnot x_1 \lor \lnot x_2 \lor \lnot x_3) \land (x_1 \lor \lnot x_2 \lor x_3) \land (x_1 \lor x_2 \lor \lnot x_3) \land (x_1 \lor \lnot x_2 \lor \lnot x_3) \land (\lnot x_1 \lor x_2 \lor x_3).

Parâmetros

filename (str) – Um arquivo no formato DIMACS.

Retorna

Uma porta quântica com um oráculo de inversão de bits.

Tipo de retorno

BitFlipOracleGate

inverse

inverse(annotated=False)

GitHub

Inverta essa instrução.

Se annotated for False, a instrução inversa será implementada como uma nova instrução com a definição recursivamente invertida.

Se annotated for True, a instrução inversa será implementada como AnnotatedOperatione corresponde à instrução dada anotada com o "modificador inverso".

As instruções especiais herdadas de Instruction podem implementar seu próprio inverso (por exemplo, T e Tdg, Barrier, etc.) Em particular, eles podem escolher como lidar com o argumento annotated , o que pode incluir ignorá-lo e sempre retornar uma classe de porta concreta se o inverso for definido como uma porta padrão.

Parâmetros

annotated (bool) – se definido como True, a porta inversa de saída será retornada como AnnotatedOperation.

Retorna

A operação inversa.

Aumentos

CircuitError - se a instrução não for composta e não tiver sido implementado um inverso para ela.

is_parameterized

is_parameterized()

GitHub

Retorna se o site Instruction contém parâmetros de tempo de compilação.

power

power(exponent, annotated=False)

GitHub

Eleve esse portão ao poder de exponent.

Implementado como uma porta unitária (ref. UnitaryGate) ou como uma operação anotada (ref. AnnotatedOperation). No caso de várias portas padrão, como RXGatequando a potência de uma porta pode ser expressa em termos de outra porta padrão que é retornada diretamente.

Parâmetros

  • exponent (float) – o poder de elevar o portão para
  • annotated (bool) – indica se o power gate pode ser implementado como uma operação anotada. No caso de várias portas padrão, como RXGateesse argumento é ignorado quando a potência de uma porta pode ser expressa em termos de outra porta padrão.

Retorna

Uma operação que implementa gate^exponent

Aumentos

CircuitError - Se a porta não for unitária

repeat

repeat(n)

GitHub

Cria uma instrução com nnself repetido vezes.

Parâmetros

n (int) – Número de vezes para repetir a instrução

Retorna

Contendo a definição.

Tipo de retorno

qiskit.circuit.Instruction

Aumentos

CircuitError - Se n < 1.

reverse_ops

reverse_ops()

GitHub

Para uma instrução composta, inverta a ordem das subinstruções.

Isso é feito por meio da inversão recursiva de todas as subinstruções. Ele não inverte nenhuma porta.

Retorna

uma nova instrução com

subinstruções invertidas.

Tipo de retorno

qiskit.circuit.Instruction

soft_compare

soft_compare(other)

GitHub

Comparação suave entre portões. Seus nomes, número de qubits e números de bits clássicos devem corresponder. O número de parâmetros deve corresponder. Cada parâmetro é comparado. Se a pessoa for um ParameterExpression, isso não será levado em consideração.

Parâmetros

other (instruction) – outras instruções.

Retorna

são iguais a si mesmo e a outro até as expressões de parâmetro.

Tipo de retorno

bool

to_matrix

to_matrix()

GitHub

Retorna um Numpy.array para a matriz unitária da porta.

Retorna

se a subclasse Gate tiver uma definição de matriz.

Tipo de retorno

np.ndarray

Aumentos

CircuitError - Se uma subclasse do Gate não implementar esse método, será gerada uma exceção quando esse método da classe base for chamado.

to_mutable

to_mutable()

GitHub

Retorna uma cópia mutável desse portão.

Esse método retornará uma nova cópia mutável dessa instância de porta. Se uma instância singleton estiver sendo usada, essa será uma nova instância exclusiva que poderá ser alterada. Se a instância já for mutável, será uma cópia profunda dessa instância.

validate_parameter

validate_parameter(parameter)

GitHub

Os parâmetros do gate devem ser int, float ou ParameterExpression

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.