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

Allow sympy expressions as classical controls #4740

Merged
merged 50 commits into from
Dec 23, 2021
Merged

Conversation

daxfohl
Copy link
Contributor

@daxfohl daxfohl commented Dec 9, 2021

Part 14 of https://tinyurl.com/cirq-feedforward.

Adds the ability to create classical control conditions based on sympy expressions.

To account for the fact that measurement key strings can contain characters not allowed in sympy variables, the measurement keys in a sympy condition string must be wrapped in curly braces to denote them. For example, to create an expression that checks if measurement A was greater than measurement B, the proper syntax is cirq.parse_sympy_condition('{A} > {B}').

This PR does not yet handle qudits completely, as multi-qubit measurements are interpreted as base-2 when converting to integer. A subsequent PR (https://github.com/daxfohl/Cirq/compare/sympy3...daxfohl:qudits?expand=1) will allow this functionality.

@CirqBot CirqBot added the size: M 50< lines changed <250 label Dec 9, 2021
cirq-core/cirq/ops/classically_controlled_operation.py Outdated Show resolved Hide resolved
cirq-core/cirq/ops/classically_controlled_operation.py Outdated Show resolved Hide resolved
cirq-core/cirq/ops/classically_controlled_operation.py Outdated Show resolved Hide resolved
cirq-core/cirq/ops/classically_controlled_operation.py Outdated Show resolved Hide resolved
cirq-core/cirq/ops/classically_controlled_operation.py Outdated Show resolved Hide resolved
cirq-core/cirq/ops/raw_types.py Outdated Show resolved Hide resolved
cirq-core/cirq/ops/raw_types.py Outdated Show resolved Hide resolved
@daxfohl daxfohl marked this pull request as ready for review December 9, 2021 22:10
@daxfohl daxfohl requested review from cduck, vtomole and a team as code owners December 9, 2021 22:11
@daxfohl daxfohl requested a review from maffoo December 9, 2021 22:11
@95-martin-orion 95-martin-orion self-assigned this Dec 9, 2021
@95-martin-orion 95-martin-orion self-requested a review December 9, 2021 22:33
@daxfohl
Copy link
Contributor Author

daxfohl commented Dec 21, 2021

I noticed last night that the diagrams need annotated with the condition string. I think that should be a separate PR.

@daxfohl
Copy link
Contributor Author

daxfohl commented Dec 23, 2021

Ready to merge?

@95-martin-orion 95-martin-orion added the automerge Tells CirqBot to sync and merge this PR. (If it's running.) label Dec 23, 2021
@CirqBot CirqBot added the front_of_queue_automerge CirqBot uses this label to indicate (and remember) what's being merged next. label Dec 23, 2021
@CirqBot CirqBot merged commit ff671ae into quantumlib:master Dec 23, 2021
@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 Dec 23, 2021
@daxfohl daxfohl deleted the sympy3 branch December 23, 2021 21:47
MichaelBroughton pushed a commit to MichaelBroughton/Cirq that referenced this pull request Jan 22, 2022
Part 14 of https://tinyurl.com/cirq-feedforward.

Adds the ability to create classical control conditions based on sympy expressions.

To account for the fact that measurement key strings can contain characters not allowed in sympy variables, the measurement keys in a sympy condition string must be wrapped in curly braces to denote them. For example, to create an expression that checks if measurement A was greater than measurement B, the proper syntax is  `cirq.parse_sympy_condition('{A} > {B}')`.

This PR does not yet handle qudits completely, as multi-qubit measurements are interpreted as base-2 when converting to integer. A subsequent PR (https://github.com/daxfohl/Cirq/compare/sympy3...daxfohl:qudits?expand=1) will allow this functionality.
rht pushed a commit to rht/Cirq that referenced this pull request May 1, 2023
Part 14 of https://tinyurl.com/cirq-feedforward.

Adds the ability to create classical control conditions based on sympy expressions. 

To account for the fact that measurement key strings can contain characters not allowed in sympy variables, the measurement keys in a sympy condition string must be wrapped in curly braces to denote them. For example, to create an expression that checks if measurement A was greater than measurement B, the proper syntax is  `cirq.parse_sympy_condition('{A} > {B}')`.

This PR does not yet handle qudits completely, as multi-qubit measurements are interpreted as base-2 when converting to integer. A subsequent PR (https://github.com/daxfohl/Cirq/compare/sympy3...daxfohl:qudits?expand=1) will allow this functionality.
harry-phasecraft pushed a commit to PhaseCraft/Cirq that referenced this pull request Oct 31, 2024
Part 14 of https://tinyurl.com/cirq-feedforward.

Adds the ability to create classical control conditions based on sympy expressions. 

To account for the fact that measurement key strings can contain characters not allowed in sympy variables, the measurement keys in a sympy condition string must be wrapped in curly braces to denote them. For example, to create an expression that checks if measurement A was greater than measurement B, the proper syntax is  `cirq.parse_sympy_condition('{A} > {B}')`.

This PR does not yet handle qudits completely, as multi-qubit measurements are interpreted as base-2 when converting to integer. A subsequent PR (https://github.com/daxfohl/Cirq/compare/sympy3...daxfohl:qudits?expand=1) will allow this functionality.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
size: M 50< lines changed <250
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants