

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Lista de tipos de resultados
<a name="braket-result-types"></a>

O Amazon Braket pode retornar diferentes tipos de resultados quando um circuito é medido usando o `ResultType`. Um circuito pode retornar os seguintes tipos de resultados.
+  `AdjointGradient` retorna o gradiente (derivada vetorial) do valor esperado de um observável fornecido. Esse observável está agindo em um alvo fornecido em relação aos parâmetros especificados usando o método de diferenciação adjunta. Você só pode usar esse método quando tiros = 0.
+  `Amplitude` retorna a amplitude dos estados quânticos especificados na função de onda de saída. Ele está disponível somente nos simuladores locais SV1 e nos simuladores.
+  `Expectation` retorna o valor esperado de um determinado observável, que pode ser especificado com a classe `Observable` apresentada posteriormente neste capítulo. O alvo qubits usado para medir o observável deve ser especificado e o número de alvos especificados deve ser igual ao número qubits sobre o qual o observável atua. Se nenhum alvo for especificado, o observável deve operar somente em 1 qubit e é aplicado a todos os qubits em paralelo.
+  `Probability` retorna as probabilidades de medir os estados de base computacional. Se nenhuma meta for especificada, `Probability` retorna a probabilidade de medir todos os estados básicos. Se os alvos forem especificados, somente as probabilidades marginais dos vetores básicos nos qubits especificados serão retornadas. Os simuladores gerenciados QPUs estão limitados a 15 qubits no máximo, e os simuladores locais estão limitados ao tamanho da memória do sistema.
+  `Reduced density matrix` retorna uma matriz de densidade para um subsistema de qubits de destino especificado de um sistema de qubits. Para limitar o tamanho desse tipo de resultado, o Braket limita o número de alvos qubits a um máximo de 8.
+  `StateVector` retorna o vetor de estado completo. Ele está disponível no simulador local.
+  `Sample` retorna as contagens de medição de um alvo qubit especificado definido e observável. Se nenhum alvo for especificado, o observável deve operar somente em 1 qubit e é aplicado a todos os qubits em paralelo. Se os alvos forem especificados, o número de alvos especificados deverá ser igual ao número de qubits sobre os quais o observável atua.
+  `Variance` retorna a variância (`mean([x-mean(x)]2)`) do conjunto qubit de destino especificado e observável como o tipo de resultado solicitado. Se nenhum alvo for especificado, o observável deve operar somente em 1 qubit e é aplicado a todos os qubits em paralelo. Caso contrário, o número de alvos especificados deve ser igual ao número qubits ao qual o observável pode ser aplicado.

 **Os tipos de resultados compatíveis para diferentes provedores:** 


|  |  |  |  |  |  |  |  |  | 
| --- |--- |--- |--- |--- |--- |--- |--- |--- |
|  |  sim local  |   SV1   |   DM1   |   TN1   |   AQT   |   IonQ   |   IQM   |   Rigetti   | 
|  Gradiente adjunto  |  N  |  S  |  N  |  N  |  N  |  N  |  N  |  N  | 
|  Amplitude  |  S  |  S  |  N  |  N  |  N  |  N  |  N  |  N  | 
|  Expectativa  |  S  |  S  |  S  |  S  |  S  |  S  |  S  |  S  | 
|  Probabilidade  |  S  |  S  |  S  |  N  |  S  |  S  |  S  |  S  | 
|  Matriz de densidade reduzida  |  S  |  N  |  S  |  N  |  N  |  N  |  N  |  N  | 
|  Vetor de estado  |  S  |  N  |  N  |  N  |  N  |  N  |  N  |  N  | 
|  Amostra  |  S  |  S  |  S  |  S  |  S  |  S  |  S  |  S  | 
|  Variação  |  S  |  S  |  S  |  S  |  S  |  S  |  S  |  S  | 

É possível verificar os tipos de resultados compatíveis ao examinar as propriedades do dispositivo, conforme mostrado no exemplo a seguir.

```
from braket.aws import AwsDevice

device = AwsDevice("arn:aws:braket:us-west-1::device/qpu/rigetti/Ankaa-3")

# Print the result types supported by this device
for iter in device.properties.action['braket.ir.openqasm.program'].supportedResultTypes:
    print(iter)
```

```
name='Sample' observables=['x', 'y', 'z', 'h', 'i'] minShots=10 maxShots=50000
name='Expectation' observables=['x', 'y', 'z', 'h', 'i'] minShots=10 maxShots=50000
name='Variance' observables=['x', 'y', 'z', 'h', 'i'] minShots=10 maxShots=50000
name='Probability' observables=None minShots=10 maxShots=50000
```

Para chamar `ResultType`, anexe-o a um circuito, conforme mostrado no exemplo a seguir.

```
from braket.circuits import Circuit, Observable

circ = Circuit().h(0).cnot(0, 1).amplitude(state=["01", "10"])
circ.probability(target=[0, 1])
circ.probability(target=0)
circ.expectation(observable=Observable.Z(), target=0)
circ.sample(observable=Observable.X(), target=0)
circ.state_vector()
circ.variance(observable=Observable.Z(), target=0)

# Print one of the result types assigned to the circuit
print(circ.result_types[0])
```

**nota**  
Diferentes dispositivos quânticos fornecem resultados em vários formatos. Por exemplo, os dispositivos Rigetti retornam medições, enquanto os dispositivos IonQ fornecem probabilidades. O Amazon Braket SDK oferece uma propriedade de medidas para todos os resultados. No entanto, para dispositivos que retornam probabilidades, essas medidas são pós-computadas e baseadas nas probabilidades, pois as medições por disparo não estão disponíveis. Para determinar se um resultado foi pós-computado, verifique `measurements_copied_from_device` no objeto resultante. Essa operação está detalhada no arquivo [gate\$1model\$1quantum\$1task\$1result.py](https://github.com/aws/amazon-braket-sdk-python/blob/ca5b08dada4839ca31c012ff50aa20b656fd1879/src/braket/tasks/gate_model_quantum_task_result.py#L70-L72) no repositório Amazon Braket SDK GitHub .

## Observáveis
<a name="braket-result-types-observables"></a>

A classe `Observable` do Amazon Braket permite medir um observável específico. 

Você pode aplicar somente uma única não identidade observável a cada qubit. Ocorre um erro se você especificar dois ou mais observáveis sem identidade diferentes para o mesmo qubit. Para isso, cada fator de um produto tensorial conta como um indivíduo observável. Isso significa que você pode ter vários produtos tensoriais no mesmo qubit, desde que os fatores que atuam sobre o qubit permaneçam os mesmos.

Um observável pode ser escalado e adicionar outros observáveis (escalonados ou não). Isso cria um `Sum` que pode ser usado no tipo de resultado `AdjointGradient`.

A classe `Observable` inclui os seguintes observáveis.

```
import numpy as np

Observable.I()
Observable.H()
Observable.X()
Observable.Y()
Observable.Z()

# Get the eigenvalues of the observable
print("Eigenvalue:", Observable.H().eigenvalues)
# Or rotate the basis to be computational basis
print("Basis rotation gates:", Observable.H().basis_rotation_gates)

# Get the tensor product of the observable for the multi-qubit case
tensor_product = Observable.Y() @ Observable.Z()
# View the matrix form of an observable by using
print("The matrix form of the observable:\n", Observable.Z().to_matrix())
print("The matrix form of the tensor product:\n", tensor_product.to_matrix())

# Factorize an observable in the tensor form
print("Factorize an observable:", tensor_product.factors)

# Self-define observables, given it is a Hermitian
print("Self-defined Hermitian:", Observable.Hermitian(matrix=np.array([[0, 1], [1, 0]])))

print("Sum of other (scaled) observables:", 2.0 * Observable.X() @ Observable.X() + 4.0 * Observable.Z() @ Observable.Z())
```

```
Eigenvalue: [ 1. -1.]
Basis rotation gates: (Ry('angle': -0.7853981633974483, 'qubit_count': 1),)
The matrix form of the observable:
 [[ 1.+0.j  0.+0.j]
 [ 0.+0.j -1.+0.j]]
The matrix form of the tensor product:
 [[ 0.+0.j  0.+0.j  0.-1.j  0.+0.j]
 [ 0.+0.j -0.+0.j  0.+0.j  0.+1.j]
 [ 0.+1.j  0.+0.j  0.+0.j  0.+0.j]
 [ 0.+0.j  0.-1.j  0.+0.j -0.+0.j]]
Factorize an observable: (Y('qubit_count': 1), Z('qubit_count': 1))
Self-defined Hermitian: Hermitian('qubit_count': 1, 'matrix': [[0.+0.j 1.+0.j], [1.+0.j 0.+0.j]])
Sum of other (scaled) observables: Sum(TensorProduct(X('qubit_count': 1), X('qubit_count': 1)), TensorProduct(Z('qubit_count': 1), Z('qubit_count': 1)))
```

## Parâmetros
<a name="braket-result-types-parameters"></a>

Os circuitos podem incorporar parâmetros livres. Esses parâmetros livres só precisam ser construídos uma vez para serem executados várias vezes e podem ser usados para calcular gradientes. 

Cada parâmetro livre usa um nome codificado em string que é usado para: 
+ Definir valores do parâmetro
+ Identificar quais parâmetros usar

```
from braket.circuits import Circuit, FreeParameter, observables
from braket.parametric import FreeParameter

theta = FreeParameter("theta")
phi = FreeParameter("phi")
circ = Circuit().h(0).rx(0, phi).ry(0, phi).cnot(0, 1).xx(0, 1, theta)
```

## Gradiente adjunto
<a name="braket-result-types-adjoint-gradient"></a>

O dispositivo SV1 calcula o gradiente adjunto de um valor esperado observável, incluindo hamiltoniano de vários termos. Para diferenciar os parâmetros, especifique seu nome (em formato de string) ou por referência direta.

```
from braket.aws import AwsDevice
from braket.devices import Devices

device = AwsDevice(Devices.Amazon.SV1)

circ.adjoint_gradient(observable=3 * Observable.Z(0) @ Observable.Z(1) - 0.5 * observables.X(0), parameters = ["phi", theta])
```

Passar valores de parâmetros fixos como argumentos para um circuito parametrizado removerá os parâmetros livres. Executar esse circuito com `AdjointGradient` produz um erro, porque os parâmetros livres não existem mais. O exemplo de código a seguir demonstra o uso correto e incorreto:

```
# Will error, as no free parameters will be present
#device.run(circ(0.2), shots=0)

# Will succeed
device.run(circ, shots=0, inputs={'phi': 0.2, 'theta': 0.2})
```