# cirq.ops.CCZPowGate

A doubly-controlled-Z that can be raised to a power.

The matrix of `CCZ**t` is `diag(1, 1, 1, 1, 1, 1, 1, exp(i pi t))`.

`exponent` The t in gate**t. Determines how much the eigenvalues of the gate are scaled by. For example, eigenvectors phased by -1 when `gate**1` is applied will gain a relative phase of e^{i pi exponent} when `gate**exponent` is applied (relative to eigenvectors unaffected by `gate**1`).
`global_shift` Offsets the eigenvalues of the gate at exponent=1. In effect, this controls a global phase factor on the gate's unitary matrix. The factor is:

``````exp(i * pi * global_shift * exponent)
``````

For example, `cirq.X**t` uses a `global_shift` of 0 but `cirq.rx(t)` uses a `global_shift` of -0.5, which is why `cirq.unitary(cirq.rx(pi))` equals -iX instead of X.

`exponent`

`global_shift`

## Methods

### `controlled`

View source

Returns a controlled `ZPowGate` with two additional controls.

The `controlled` method of the `Gate` class, of which this class is a child, returns a `ControlledGate` with `sub_gate = self`. This method overrides this behavior to return a `ControlledGate` with `sub_gate = ZPowGate`.

### `num_qubits`

View source

The number of qubits this gate acts on.

### `on`

View source

Returns an application of this gate to the given qubits.

Args
`*qubits` The collection of qubits to potentially apply the gate to.

### `on_each`

View source

Returns a list of operations applying the gate to all targets.

Args
`*targets` The qubits to apply this gate to. For single-qubit gates this can be provided as varargs or a combination of nested iterables. For multi-qubit gates this must be provided as an `Iterable[Sequence[Qid]]`, where each sequence has `num_qubits` qubits.

Returns
Operations applying this gate to the target qubits.

Raises
`ValueError` If targets are not instances of Qid or Iterable[Qid]. If the gate qubit number is incompatible.

### `qubit_index_to_equivalence_group_key`

View source

Returns a key that differs between non-interchangeable qubits.

### `validate_args`

View source

Checks if this gate can be applied to the given qubits.

By default checks that:

• inputs are of type `Qid`
• len(qubits) == num_qubits()
• qubit_i.dimension == qid_shape[i] for all qubits

Child classes can override. The child implementation should call `super().validate_args(qubits)` then do custom checks.

Args
`qubits` The sequence of qubits to potentially apply the gate to.

#### Throws:

• `ValueError`: The gate can't be applied to the qubits.

View source

View source

View source

### `__call__`

View source

Call self as a function.

View source

View source

View source

View source

View source

View source

View source

### `__truediv__`

View source

[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"Missing the information I need" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"Too complicated / too many steps" },{ "type": "thumb-down", "id": "outOfDate", "label":"Out of date" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"Samples / code issue" },{ "type": "thumb-down", "id": "otherDown", "label":"Other" }]
[{ "type": "thumb-up", "id": "easyToUnderstand", "label":"Easy to understand" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"Solved my problem" },{ "type": "thumb-up", "id": "otherUp", "label":"Other" }]