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

More documentation on the various ways to construct Stab/Destab/MixedDestab objects #258

Open
Krastanov opened this issue Apr 10, 2024 · 8 comments
Labels
documentation Improvements or additions to documentation good first issue Good for newcomers

Comments

@Krastanov
Copy link
Member

Krastanov commented Apr 10, 2024

A friend asked me over email something that should probably be added to the documentation (after being polished)

A quick question, in quantumclifford.jl, how should I manually construct the (Mixed)Destabilizer tableau? Suppose I have a list of stabilizers and destabilizers as strings, for example s = ["XX","ZZ"] and d=["ZI","IX"].

My answer was

image
image

@Krastanov Krastanov added documentation Improvements or additions to documentation good first issue Good for newcomers labels Apr 10, 2024
@Fe-r-oz
Copy link
Contributor

Fe-r-oz commented May 24, 2024

I will be delighted to work in this issue!

@Krastanov
Copy link
Member Author

That would be great! It is a pretty difficult balance to strike between too much information on a given page and too many separate pages -- this will need some pedagogical effort, maybe a separate page, maybe a lot of reference to that new page, maybe something else

@Fe-r-oz
Copy link
Contributor

Fe-r-oz commented May 24, 2024

Indeed, I understand your point. Striking balance is important so that the reader is not overwhelmed by too much information in one page. I will give proper attention to it.

@Fe-r-oz
Copy link
Contributor

Fe-r-oz commented May 25, 2024

On the page about choosing Data Structure, https://quantumsavory.github.io/QuantumClifford.jl/stable/datastructures/#Choosing-Appropriate-Data-Structure

Would you like to add a flowchart like this? I can modify it as per your requirements if needed.

FlowChart

@Fe-r-oz
Copy link
Contributor

Fe-r-oz commented May 25, 2024

Another Representation:

Screenshot from 2024-05-25 10-02-42

@Krastanov
Copy link
Member Author

These look promising! Are you using mermaid for them? I would prefer to keep the source for diagrams as part of the documentation, so that it is easy to modify. We already do something like that for QuantumSavory: https://quantumsavory.github.io/QuantumSavory.jl/stable/register_interface/

Using mermaid can also help with making the visualization a bit tighter -- there is a lot of empty space in this one.

I would suggest doing first the separation between (Mixed)Stabilizer and (Mixed)Destabilizer and only then dealing with the mixed-vs-nonmixed distinction.

MixedDestabilizer is probably the main and most useful datastructure, but it is not included here.

I think all of these datastructures support projective measurements, definitely including Stabilizer.

Some of the descriptions inside of the bottom rectangles does not make much sense to me right now -- "handles commuting operators" and "requires user to check for consistency" and "no canonicalization needed".

Explicit descriptions of what these datastructures are would be useful.

@Fe-r-oz
Copy link
Contributor

Fe-r-oz commented May 25, 2024

Latest Improvements:

flowchart TD
    A["<code>Tableau Data Structure Selection</code>"]
    class A startEnd
    A --> B{"Is the state a stabilizer?"}
    class A,B startEnd
    B -->|Yes| C{"Pure state?"}
    B -->|No| D{"Pure state?"}
    class B,C,D decision
    C -->|Yes| E["<code>Stabilizer</code>"]
    E --> E_desc["<code>Pure stabilizer states<br/>Efficient 'project!' operations</code>"]
    class E_desc description
    C -->|No| F["<code>MixedStabilizer</code>"]
    F --> F_desc["<code>Tracks rank of mixed states<br/>'Project!' on non-Stabilizer commuting operators</code>"]
    class F_desc description
    D -->|Yes| G["<code>Destabilizer</code>"]
    G --> G_desc["<code>Pure stabilizer states<br/>Tracks destabilizers<br/>Efficient 'project!' operations</code>"]
    class G_desc description
    D -->|No| H["<code>MixedDestabilizer<code>"]
    H --> H_desc["<code>Tracks destabilizers<br/>Tracks 'logical' operators<br/>Efficient 'project!' operations</code>"]
    class H_desc description
Loading

@Fe-r-oz
Copy link
Contributor

Fe-r-oz commented May 27, 2024

To be consistent with other member packages, I think it's better to use the default scheme instead of the ones presented.

Fe-r-oz added a commit to Fe-r-oz/QuantumClifford.jl that referenced this issue Sep 9, 2024
Fe-r-oz added a commit to Fe-r-oz/QuantumClifford.jl that referenced this issue Sep 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

2 participants