Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ArithmeticGate implementation #4702

Merged
merged 25 commits into from
May 5, 2022
Merged

ArithmeticGate implementation #4702

merged 25 commits into from
May 5, 2022

Conversation

daxfohl
Copy link
Contributor

@daxfohl daxfohl commented Nov 23, 2021

Migrate ArithmeticOperation to ArithmeticGate.

As implemented, ArithmeticGate.on(qubits) returns a GateOperation. In other words, ArithmeticGate is completely unrelated to ArithmeticOperation. They can be considered two different ways to do the same thing. This was done in order to enable ArithmeticOperation to be deprecated.

Additionally this PR implements QuirkArithmeticGate, deprecating QuirkArithmeticOperation, and rewrites ModularExp as a gate without a deprecation cycle since it's in /examples.

The code for ArithmeticGate (and subclasses) is basically identical with ArithmeticOperation, except instead of Sequence[Qid]], a quantum register is a Sequence[int], where the int represents the dimension. It implements the qid_shape protocol from this data, and the GateOperation constructor already has logic to ensure the appropriate number/dimension of qubits are applied.

Tests are added to that effect.

Closes #4683

@daxfohl daxfohl requested review from cduck, vtomole and a team as code owners November 23, 2021 19:12
@google-cla google-cla bot added the cla: yes Makes googlebot stop complaining. label Nov 23, 2021
@daxfohl daxfohl requested a review from viathor November 23, 2021 19:13
@daxfohl daxfohl marked this pull request as draft November 23, 2021 19:13
@CirqBot CirqBot added the size: L 250< lines changed <1000 label Nov 23, 2021
@daxfohl daxfohl changed the title Gates add ArithmeticGate implementation Nov 23, 2021
@daxfohl daxfohl marked this pull request as ready for review December 27, 2021 22:05
@daxfohl
Copy link
Contributor Author

daxfohl commented Feb 18, 2022

xref #4683

Copy link
Collaborator

@tanujkhattar tanujkhattar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's fix mypy typing issues and improve type annotations coverage.

cirq-core/cirq/ops/arithmetic_operation.py Outdated Show resolved Hide resolved
cirq-core/cirq/ops/arithmetic_operation.py Outdated Show resolved Hide resolved
cirq-core/cirq/ops/arithmetic_operation.py Outdated Show resolved Hide resolved
cirq-core/cirq/ops/arithmetic_operation.py Outdated Show resolved Hide resolved
cirq-core/cirq/ops/arithmetic_operation.py Outdated Show resolved Hide resolved
@tanujkhattar tanujkhattar self-assigned this May 5, 2022
Copy link
Collaborator

@tanujkhattar tanujkhattar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM % nits

cirq-core/cirq/interop/quirk/cells/arithmetic_cells.py Outdated Show resolved Hide resolved
examples/examples_test.py Outdated Show resolved Hide resolved
@daxfohl daxfohl requested a review from tanujkhattar May 5, 2022 20:57
@tanujkhattar tanujkhattar added the automerge Tells CirqBot to sync and merge this PR. (If it's running.) label May 5, 2022
@CirqBot CirqBot added the front_of_queue_automerge CirqBot uses this label to indicate (and remember) what's being merged next. label May 5, 2022
@CirqBot CirqBot merged commit 2d56814 into quantumlib:master May 5, 2022
@CirqBot CirqBot removed automerge Tells CirqBot to sync and merge this PR. (If it's running.) front_of_queue_automerge CirqBot uses this label to indicate (and remember) what's being merged next. labels May 5, 2022
@daxfohl daxfohl deleted the gates-add branch May 5, 2022 21:17
CirqBot pushed a commit that referenced this pull request Jun 24, 2022
#4702 was started in November but did not get merged until May, which was after 14.1 went out. These deprecations need to be bumped to 0.16 instead of 0.15.

Once 0.15 goes out then I can reopen #5579 and delete these.
rht pushed a commit to rht/Cirq that referenced this pull request May 1, 2023
Migrate ArithmeticOperation to ArithmeticGate.

As implemented, ArithmeticGate.on(qubits) returns a GateOperation. In other words, ArithmeticGate is completely unrelated to ArithmeticOperation. They can be considered two different ways to do the same thing. This was done in order to enable ArithmeticOperation to be deprecated.

Additionally this PR implements QuirkArithmeticGate, deprecating QuirkArithmeticOperation, and rewrites ModularExp as a gate without a deprecation cycle since it's in /examples.

The code for ArithmeticGate (and subclasses) is *basically* identical with ArithmeticOperation, except instead of `Sequence[Qid]]`, a quantum register is a `Sequence[int]`, where the int represents the dimension. It implements the _qid_shape_ protocol from this data, and the GateOperation constructor already has logic to ensure the appropriate number/dimension of qubits are applied.

Tests are added to that effect.

Closes quantumlib#4683
rht pushed a commit to rht/Cirq that referenced this pull request May 1, 2023
quantumlib#4702 was started in November but did not get merged until May, which was after 14.1 went out. These deprecations need to be bumped to 0.16 instead of 0.15.

Once 0.15 goes out then I can reopen quantumlib#5579 and delete these.
harry-phasecraft pushed a commit to PhaseCraft/Cirq that referenced this pull request Oct 31, 2024
Migrate ArithmeticOperation to ArithmeticGate.

As implemented, ArithmeticGate.on(qubits) returns a GateOperation. In other words, ArithmeticGate is completely unrelated to ArithmeticOperation. They can be considered two different ways to do the same thing. This was done in order to enable ArithmeticOperation to be deprecated.

Additionally this PR implements QuirkArithmeticGate, deprecating QuirkArithmeticOperation, and rewrites ModularExp as a gate without a deprecation cycle since it's in /examples.

The code for ArithmeticGate (and subclasses) is *basically* identical with ArithmeticOperation, except instead of `Sequence[Qid]]`, a quantum register is a `Sequence[int]`, where the int represents the dimension. It implements the _qid_shape_ protocol from this data, and the GateOperation constructor already has logic to ensure the appropriate number/dimension of qubits are applied.

Tests are added to that effect.

Closes quantumlib#4683
harry-phasecraft pushed a commit to PhaseCraft/Cirq that referenced this pull request Oct 31, 2024
quantumlib#4702 was started in November but did not get merged until May, which was after 14.1 went out. These deprecations need to be bumped to 0.16 instead of 0.15.

Once 0.15 goes out then I can reopen quantumlib#5579 and delete these.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cla: yes Makes googlebot stop complaining. size: L 250< lines changed <1000
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Update non-gate quantum ops to have gates
3 participants