BoxOp
class qiskit.circuit.BoxOp(body, duration=None, unit=None, label=None, annotations=())
Bases: ControlFlowOp
Uma "caixa" com escopo de operações em um circuito que são tratadas atomicamente no contexto maior.
Uma "caixa" é uma construção de fluxo de controle que é inserida incondicionalmente. O conteúdo da caixa se comporta de certa forma como se o início e o fim da caixa fossem barreiras, exceto pelo fato de que é permitido comutar operações "até o fim" da caixa. A caixa também é um escopo explícito para fins de variáveis, trechos e passagens do compilador.
Uma caixa pode ser "anotada" com objetos personalizados arbitrários definidos pelo usuário Annotation definidos pelo usuário. Nos casos em que a ordem é importante, elas devem ser interpretadas aplicando-se primeiro a primeira anotação da lista, depois a segunda, e assim por diante. Em geral, recomenda-se que as anotações não dependam da ordem, sempre que possível.
Normalmente, você cria isso usando a forma de interface do construtor de QuantumCircuit.box().
Construtor padrão de BoxOp.
Parâmetros
- body (QuantumCircuit) – o circuito a ser usado como estrutura da caixa. Isso deve encapsular explicitamente todas
expr.Varas variáveis que possam ser herdadas do circuito externo. O número necessário de qubits e clbits para a instrução resultante é inferido a partir do número presente no circuito, mesmo que estejam inativos. - duration (None) – uma duração opcional para a caixa como um todo.
- unit (Literal['dt', 's', 'ms', 'us', 'ns', 'ps', 'expr'] | None) – a unidade do site
duration. - label (str | None) – um rótulo de cadeia de caracteres opcional para a instrução.
- annotations (Iterable[Annotation]) – qualquer
Annotations para aplicar à caixa. Nos casos em que a ordem é importante, as anotações devem ser interpretadas na mesma ordem em que aparecem no iterável.
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
TrueEm geral, não se deve confiar na classe exata de uma instrução; em um determinado circuito, espera-se que Instruction.name seja um discriminador mais adequado na maioria das situações.
blocks
body
O endereço body QuantumCircuit da operação.
Esse é o mesmo objeto retornado como a única entrada em params() e blocks().
decompositions
Obtenha as decomposições da instrução no site SessionEquivalenceLibrary.
definition
Definição de retorno em termos de outros portões básicos.
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
Métodos
add_decomposition
add_decomposition(decomposition)
Adicione uma decomposição da instrução ao site SessionEquivalenceLibrary.
broadcast_arguments
broadcast_arguments(qargs, cargs)
Validação dos argumentos.
Parâmetros
- qargs (List) – Lista de argumentos de bits quânticos.
- cargs (List) – Lista de argumentos clássicos de bits.
Lucros
Tuple(List, List) - 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.
copy
copy(name=None)
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
inverse
inverse(annotated=False)
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
iter_captured_stretches
iter_captured_stretches()
Obtém um iterador sobre as variáveis de extensão capturadas exclusivas em todos os blocos dessa construção.
Tipo de retorno
Iterável [ expr.Stretch ]
iter_captured_vars
iter_captured_vars()
Obtém um iterador sobre as variáveis capturadas exclusivas em todos os blocos dessa construção.
Tipo de retorno
repeat
repeat(n)
Cria uma instrução com self repetido vezes.
Parâmetros
n (int) – Número de vezes para repetir a instrução
Retorna
Contendo a definição.
Tipo de retorno
Aumentos
CircuitError - Se n < 1.
replace_blocks
replace_blocks(blocks)
Retorna uma nova versão das operações desse fluxo de controle com os blocks mapeados para os novos dados.
Normalmente, isso é usado em um fluxo de trabalho como, por exemplo:
existing_op = ...
def map_block(block: QuantumCircuit) -> QuantumCircuit:
new_block = block.copy_empty_like()
# ... do something to `new_block` ...
return new_block
new_op = existing_op.replace_blocks(
map_block(block) for block in existing_op.blocks
)É responsabilidade do chamador garantir que os blocos mapeados sejam definidos em um conjunto unificado de recursos de circuito, da mesma forma que a construção de um ControlFlowOp usando seu construtor padrão.
Parâmetros
blocos - os novos blocos de subcircuito a serem usados.
Retorna
Novo ControlFlowOp com blocos substituídos.
reverse_ops
reverse_ops()
Em 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
soft_compare
soft_compare(other)
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 conta.
Parâmetros
other (instruction) – outras instruções.
Retorna
são iguais a si mesmo e ao outro até as expressões de parâmetro.
Tipo de retorno
to_mutable
to_mutable()
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.