CU3Gate
class qiskit.circuit.library.CU3Gate(theta, phi, lam, label=None, ctrl_state=None, *, _base_label=None)
Bases: ControlledGate
Controlled-U3 (porta de dois qubits de 3 parâmetros).
Essa é uma versão controlada da porta U3 (rotação genérica de um único qubit). Ele é restrito a 3 parâmetros e, portanto, não pode abranger portas genéricas controladas por dois qubits).
Essa porta está obsoleta. Em vez disso, o CUGate deve ser usado
circuit = QuantumCircuit(2)
gamma = 0
circuit.cu(theta, phi, lambda, gamma, 0, 1)Símbolo do circuito:
q_0: ──────■──────
┌─────┴─────┐
q_1: ┤ U3(ϴ,φ,λ) ├
└───────────┘Representação matricial:
Na convenção do Qiskit, os índices de qubit mais altos são mais significativos (convenção little endian). Em muitos livros didáticos, as portas controladas são apresentadas com a suposição de qubits mais significativos como controle, que no nosso caso seria q_1. Assim, uma matriz de livro didático para essa porta será:
┌───────────┐
q_0: ┤ U3(ϴ,φ,λ) ├
└─────┬─────┘
q_1: ──────■──────Criar um novo portão CU3.
Atributos
Parâmetros
- theta (ParameterValueType)
- phi (ParameterValueType)
- lam (ParameterValueType)
- label (str | None)
- ctrl_state (int |str | None)
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 precisa de uma instrução; em um determinado circuito, espera-se que Instruction.name seja um discriminador mais adequado na maioria das situações.
ctrl_state
Retorna o estado de controle da porta como um número inteiro decimal.
decompositions
Obtenha as decomposições da instrução no site SessionEquivalenceLibrary.
definition
Definição de retorno em termos de outras portas básicas. Se o portão tiver controles abertos, conforme determinado por ctrl_statea definição retornada é conjugada com X sem alterar o endereço interno _definition.
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
Obter o nome do portão. Se o portão tiver controles abertos, o nome do portão se tornará:
<original_name_o<ctrl_state>
em que <original_name> é o nome do portão para o caso padrão de qubits de controle fechados e <ctrl_state> é o valor inteiro do estado de controle do portão.
num_clbits
Retorna o número de clbits.
num_ctrl_qubits
Obtenha o número de qubits de controle.
Retorna
O número de qubits de controle para a porta.
Tipo de retorno
num_qubits
Retorna o número de qubits.
params
Obter parâmetros da base_gate.
Retorna
Lista de parâmetros de porta.
Tipo de retorno
Aumentos
CircuitError - A porta controlada não define uma porta básica
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 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
control
control(num_ctrl_qubits=1, label=None, ctrl_state=None, annotated=None)
Retorna a versão controlada de si mesmo.
A porta controlada é implementada como ControlledGate quando annotated é False, e como AnnotatedOperation quando annotated é True.
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"). SeNone, o padrão é o estado2**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 comoFalse.
Retorna
Uma versão controlada deste portão.
Aumentos
QiskitError – inválido num_ctrl_qubits ou ctrl_state.
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)
Retorno invertido da porta CU3.
Parâmetros
annotated (bool) – quando definido como True, normalmente é usado para retornar um AnnotatedOperation com um modificador inverso definido em vez de um Gate. Entretanto, para essa classe, esse argumento é ignorado, pois o inverso dessa porta é sempre um CU3Gate com valores de parâmetros inversos.
Retorna
porta inversa.
Tipo de retorno
is_parameterized
power
power(exponent, annotated=False)
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)
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.
reverse_ops
reverse_ops()
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
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_matrix
to_matrix()
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()
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)
Os parâmetros do gate devem ser int, float ou ParameterExpression