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

Create a new implementation of parallel XEB and its methods #6940

Draft
wants to merge 12 commits into
base: main
Choose a base branch
from

Conversation

NoureldinYosri
Copy link
Collaborator

@NoureldinYosri NoureldinYosri commented Jan 10, 2025

This is a new implemenation of parallel XEB that doesn't rely on legacy code. This module reimplements almost all of the what is needed to run parallel XEB. The reason for a completly new implementation is that the old implementation (also written by me) relied on old code that don't support the new use case of running XEB on circuits that depenend on the qubit pair and the effort needed to update the old code is more than the effort needed to write a new implementation.

>> import cirq
>> import cirq.experiments.error_mitigation.parallel_xeb as xeb
>> sampler = cirq.DensityMatrixSimulator(
    seed=0, noise=cirq.ConstantQubitNoiseModel(cirq.depolarize(1e-2))
)
>> qubits = cirq.q(0, 0), cirq.q(0, 1), cirq.q(0, 2)
>> parameters = xeb.XEBParameters(
    n_repetitions = 10**4,
    n_combinations = 20,
    n_circuits = 30,
    cycle_depths = (5, 25, 50, 100, 200, 300),
)
>> circ = cirq.Circuit(cirq.X(cirq.q(0)), cirq.Y(cirq.q(1)), cirq.CZ(cirq.q(1), cirq.q(0)))
>> xeb.parallel_xeb_workflow(sampler, qubits=qubits, target={(cirq.q(0, 0), cirq.q(0, 1)): circ})
TwoQubitXEBResult(fidelities=                           a  layer_fid                cycle_depths  \
pair                                                                  
(q(0, 0), q(0, 1))  0.948672   0.958812  [5, 25, 50, 100, 200, 300]   

                                                           fidelities  \
pair                                                                    
(q(0, 0), q(0, 1))  [0.7693233439521296, 0.3291275172915138, 0.118...   

                       a_std  layer_fid_std  
pair                                         
(q(0, 0), q(0, 1))  0.007211       0.000565  )

Copy link

codecov bot commented Jan 10, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 97.86%. Comparing base (988ecbc) to head (b6a4866).
Report is 32 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #6940   +/-   ##
=======================================
  Coverage   97.86%   97.86%           
=======================================
  Files        1084     1084           
  Lines       94408    94447   +39     
=======================================
+ Hits        92393    92432   +39     
  Misses       2015     2015           

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

@@ -403,6 +403,7 @@ def parallel_xeb_workflow(
pool: Optional['multiprocessing.pool.Pool'] = None,
batch_size: int = 9,
tags: Sequence[Any] = (),
entangling_circuit_or_op: Optional[Union['cirq.AbstractCircuit', 'cirq.Operation']] = None,
Copy link
Collaborator

@eliottrosenberg eliottrosenberg Jan 14, 2025

Choose a reason for hiding this comment

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

Actually, in order to do parallel XEB, we will want to be able to input something like a set of circuits (that each act on two qubits) or a dictionary from pairs to circuits because, for example, we may have different z-phase corrections on different pairs of qubits.

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 reimplemented parallel XEB to support this use case. ptal

Copy link
Collaborator

Choose a reason for hiding this comment

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

Thanks, Nour! I will take a look soon.

@CirqBot CirqBot added the size: M 50< lines changed <250 label Jan 18, 2025
@NoureldinYosri NoureldinYosri marked this pull request as draft February 5, 2025 05:41
@NoureldinYosri NoureldinYosri changed the title update parallel XEB methods to support circuits instead of single gates Create a new implementation of parallel XEB and its dependencies Feb 5, 2025
@NoureldinYosri NoureldinYosri changed the title Create a new implementation of parallel XEB and its dependencies Create a new implementation of parallel XEB and its methods Feb 5, 2025
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 tried using it and got an error (colab). Also, maybe we can call the folder benchmarking instead of error_mitigation.

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