Skip to content

Conversation

babacry
Copy link
Collaborator

@babacry babacry commented Mar 17, 2025

Input: symbolized_circuit, sweep
Output: new_symbolzied_circuit, new_sweep

@babacry babacry force-pushed the merge_single branch 6 times, most recently from 3dea74b to d5da63a Compare March 18, 2025 02:09
Copy link

codecov bot commented Mar 18, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 98.67%. Comparing base (5112418) to head (e67e661).
Report is 41 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff            @@
##             main    #7149    +/-   ##
========================================
  Coverage   98.66%   98.67%            
========================================
  Files        1106     1110     +4     
  Lines       96086    96266   +180     
========================================
+ Hits        94808    94987   +179     
- Misses       1278     1279     +1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@babacry
Copy link
Collaborator Author

babacry commented Mar 18, 2025

Hi Eliott, Nour, I have added the function to support one use case. Could you PTAL? For the use case of combined input of sweep and parameterized circuit, will be added in the followup PR. Let's first make sure this PR is in the right place and do the right job. Thanks!

Copy link
Collaborator

@eliottrosenberg eliottrosenberg left a comment

Choose a reason for hiding this comment

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

I tested it a little bit in this colab, and it doesn't seem to work properly yet, the interface looks good to me.

@eliottrosenberg eliottrosenberg self-requested a review April 4, 2025 00:06
Copy link
Collaborator

@eliottrosenberg eliottrosenberg left a comment

Choose a reason for hiding this comment

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

Thanks so much @babacry!!! I tested it here, and it seems to work!

@eliottrosenberg
Copy link
Collaborator

One small comment: it would be nice if the merged single-qubit gates ended up in the same moment; see this cell of the colab.

@babacry
Copy link
Collaborator Author

babacry commented Apr 4, 2025

Got you, thanks a lot for the manual checks! I will update the pr accordingly and fix checks.

@babacry babacry force-pushed the merge_single branch 11 times, most recently from 33a8233 to 7ac61a5 Compare April 9, 2025 08:09
@babacry babacry marked this pull request as ready for review April 9, 2025 19:22
tag_transformers: remove_tags, index_tags.
symbolize: symbolize_single_qubit_gates_by_indexed_tags
@babacry
Copy link
Collaborator Author

babacry commented Apr 23, 2025

Thanks Nour for the valuable suggestions. I come up with a much better version with your inputs. @NoureldinYosri

I added tag_transformers and symbolize transformers which are some dependencies of merge_single_qubit_gates_symbolzied.

Could you help take another look? (I can split the tag_transformer, symbolize transformers out in different prs if this PR is too huge).

@babacry babacry requested a review from NoureldinYosri April 23, 2025 04:30
Copy link
Collaborator

@NoureldinYosri NoureldinYosri left a comment

Choose a reason for hiding this comment

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

lets split this PR into smaller PRs ... also what is happening with all these tags?

circuit: 'cirq.AbstractCircuit',
*,
context: Optional['cirq.TransformerContext'] = None,
merge_tags_fn: Optional[Callable[['cirq.CircuitOperation'], List[Hashable]]] = None,
Copy link
Collaborator

Choose a reason for hiding this comment

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

I feel like this is a bit too general ... what is the problem with recieving a list of tags ?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I kind of need a function here as what I need to do is given a circuit op, set the output tags with more rule based tag setters and I believe the flexibility of the function can help users in different use cases.

  • Currently, the merge function do the following mapping in the rewriter

CircuitOperation(X['tag_needed'] -- Y['tag1']) --> phxz(x,z,a) with no tags

  • In my use case, I need a rule based tag setter:

case 1: CircuitOperation(X['tag_needed'] -- Y['tag1']) --'tag_needed' presented--> phxz(...)['phxz_{iter}']
case 2: CircuitOperation(X -- Z) --no 'tags_needed' found --> phxz(...) with no tags

  • Flexibility of merge_tags_fn: e.g., if users want to preserve all the tags in the circuit op, they may do the merges in merge_tags_fn, then the tags can preserve like the following

CircuitOperation(X['tag0'] -- Y['tag1']) --> phxz(...)['tag0', 'tag1']

)
merged_circuits.append(merged_circuit)

if not all(
Copy link
Collaborator

Choose a reason for hiding this comment

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

I don't think this should happen here ... this should be a test for the correctness of the transformer

Copy link
Collaborator Author

@babacry babacry Apr 29, 2025

Choose a reason for hiding this comment

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

It's to validate the input parameters sweep, basically all the resolvers in sweep shoulld resolve the circuit to the same structure, otherwise, we can't do the merge here.

If we don't check here, Step 2 of parameterization would possibly crash with different kind of errors.

I should probably update the error message as InvalidArgument("Invalid input sweep, different resolvers in sweep resulted in different merged structures.")

@babacry
Copy link
Collaborator Author

babacry commented Apr 30, 2025

Thanks! @NoureldinYosri I will split the PRs =)

@babacry
Copy link
Collaborator Author

babacry commented Apr 30, 2025

Split 2 pre-requisites in #7306 and #7307

@mhucka
Copy link
Contributor

mhucka commented May 16, 2025

@babacry Are the 2 new PRs complete replacements for this one? If so, should this one be closed?

@babacry
Copy link
Collaborator Author

babacry commented May 17, 2025

@mhucka this pr will depend on the other 2 prs.

Though this PR is too noisy right now and out of sync, I will close this one and create a new PR with this closed pr attached. FYI @NoureldinYosri @eliottrosenberg .

@babacry babacry closed this May 17, 2025
@mhucka
Copy link
Contributor

mhucka commented May 17, 2025

@babacry Ok, thank you!

github-merge-queue bot pushed a commit that referenced this pull request Jun 24, 2025
Merge single qubit gates for symbolized circuits.

It is a updated version of #7149 where tag_transformers and symbolize
transformers are already merged.

---------

Co-authored-by: eliottrosenberg <[email protected]>
github-merge-queue bot pushed a commit that referenced this pull request Jun 24, 2025
Merge single qubit gates for symbolized circuits.

It is a updated version of #7149 where tag_transformers and symbolize
transformers are already merged.

---------

Co-authored-by: eliottrosenberg <[email protected]>
BichengYing pushed a commit to BichengYing/Cirq that referenced this pull request Jun 25, 2025
Merge single qubit gates for symbolized circuits.

It is a updated version of quantumlib#7149 where tag_transformers and symbolize
transformers are already merged.

---------

Co-authored-by: eliottrosenberg <[email protected]>
ddddddanni pushed a commit to ddddddanni/Cirq that referenced this pull request Jul 15, 2025
Merge single qubit gates for symbolized circuits.

It is a updated version of quantumlib#7149 where tag_transformers and symbolize
transformers are already merged.

---------

Co-authored-by: eliottrosenberg <[email protected]>
@babacry babacry deleted the merge_single branch July 16, 2025 23:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/parameters parameter resolution, parameterized gates, operations area/transformers priority/after-1.5 Leave for after the Cirq 1.5 release size: L 250< lines changed <1000

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants