Quirk Versions Save

A drag-and-drop quantum circuit simulator that runs in your browser. A toy for exploring and understanding small quantum circuits.

v2.3

4 years ago

Notable User Changes:

  • Added formulaic XYZ gates, which can have their rotation angle set to a custom constant or equation
  • Added parity controls, which are satisfied as a group if an odd number of them are individually satisfied
  • Removed the Sampling Display, the Mystery Gate, and the XYZ^1/8 gates from the toolbox
  • Holding "alt" while dragging will now replace gates with their alternates (the alternate is often the inverse)
  • Moved the 'Silly' section to the bottom toolbox, renamed it to 'Scalar', and expanded to include i, -i, sqrt(i), sqrt(-i)
  • X and Y axis post-selection gates now use symbols that match the input state symbols
  • Middle-clicking the initial state of a wire now clears it to |0>
  • All display state tooltips now include the decimal equivalent of the state's binary string
  • Fixed amplitude displays not normalizing incoherent conditioned results
  • Fixed amplitude displays not showing "assuming deferred measurement" warning
  • Fixed column dragging not working on OSX

Notable Dev Changes:

  • Fixed a Travis-CI breakage due to export DISPLAY being deprecated

v2.2

5 years ago

Notable User Changes:

  • Added Detector gates, which perform collapsing measurements
  • Qubit initial states can now be cycled between 0/1/+/-/i/-i by clicking on wires' initial state labels
  • Qubit wires can now be re-ordered by control-clicking the wire's initial state label and dragging
  • The export menu can now export simulation data, including the data from displays
  • Gate columns and rows can now be control-dragged out of the circuit to delete them
  • Added another example circuit: magic state distillation
  • Added the imaginary gate (global phase by i)
  • Fixed density matrix display showing transposed contents
  • Fixed the custom matrix gate "ensure unitary" option incorrectly permuting the matrix
  • Fixed quantum-controlled permutation gates being allowed on measured qubits

Notable Dev Changes:

  • Dropped Code Climate
  • Travis-ci now runs some of the WebGL tests
  • Fixed precision issues in modular multiplication gates and phase gradient gates
  • Rewrote amplitude displays to be more resilient to floating point error

v2.1-september-2017

6 years ago

Notable User Changes:

  • Added the dynamic phase gradient gate "Grad^t"
  • Worked around a Chrome bug causing shader compilation to fail
  • The NOT gate is now drawn as a circled plus even when uncontrolled or in the toolbox.
  • Fixed permutation gates with coherent controls not being disabled when applied to measured qubits.
  • Added a "clear circuit" button that doesn't remove custom gates
  • Location-independent gates (e.g. set-input gates and global phase gates) are now drawn as octagons
  • Set-input gates are now considered "non-local" and show a vertical dashed line
  • Removed reversed-input gates from toolbox
  • Fixed gates not being removed when middle-clicking through their resize tab
  • Change the phase gradient gate's symbol to "Grad^1/2"
  • Entering a single value when defining a custom matrix gate now produces a global phase gate
  • X/Y post-selection gates symbols now use circled characters
  • Fixed a precision-loss bug in the shader used by phase gradient gates

Notable Dev Changes:

  • Renamed the template folder to html
  • Added hidden modular-multiply-accumulate and pivot-flip gates
  • Added license headers (Quirk's copyright is now owned by Google)
  • Added utility testing methods for gates that only perform phasing
  • Test pages now include a progress indicator
  • Worked around travis-ci adding enough webgl support to run circuit tests, but not enough to pass all of them
  • ketShaderPhase now works with angles instead of complex unit values.

v2.0-april-2017

7 years ago

Breaking changes from v1 to v2:

  • Changed spherical coordinate system to match physics conventions
    • Off is upward, On is downward
    • Z up/down, Y left/right, X toward/away
    • Theta ranges from 0 (up) to 180 (down)
    • Phi=0 points toward user, Phi=90 points rightward
  • Swapped the Off/On symbols for both the X-controls and Y-controls
    • X-On is a circled plus (matches the NOT gate, since they interchange)
    • X-Off is a circled-minus
    • Y-On is a circled cross
    • Y-Off is a circled slash
    • Serialized ids did not change; old circuits will load correctly

Notable User Changes:

  • Bug fixes:
    • Fixed reversed-input gates not reversing
    • Fixed input gates not drawing control lines into custom circuit gates
    • Fixed drawing control lines to custom identity operations
    • Fixed permute-wire drawings not fully erasing covered wires
    • Fixed bad URLs being created for custom gates with '%' or '&' in their names
  • Toolbox changes
    • Hid exp(iUt) gates
    • Hid 16'th-root gates
    • Hid shift-cycling gates
    • Moved all X/Y/Z gates to top
    • Added parametrized X/Y/Z gates
    • Added comparison gates
    • Added multiplication gates
    • Added 'set default input' gates
    • Added modular arithmetic gates and Input R
    • Added interleave gates
  • Appearance:
    • Bottom toolbox has a fourth row
    • Input gates shaded gray
    • Bit-rotate gates show a rearranged-wire symbol
    • Bit-permutating gates show the wire re-arranging even when controlled
    • Increment/Decrement gates now show "+1" and "-1" instead of "++" and "--"
    • Sample gate shows an extra decimal ket in its tooltip text
    • Added 'Shor Period Finding' example
    • Added version indicator
    • Gates no longer show a 'resizable' symbol
    • Phase gradient gates now show "e^iπ%" instead of incorrect "Z^#"

Notable Dev Changes:

  • Improved startup time
    • Added mutation-based GateBuilder and used it instead of replacement-based Gate.with methods
    • All resizable gates now give matrix functions instead of spending time making matrices
    • Avoided creating webgl context twice
    • Switched shaderFromBitPermutation from Seq to a raw loop
  • Support for multi-line gate symbols
  • Support for clickable gate buttons
  • Separated gate effect properties into 'actual' (for simulating) and 'known' (for drawing/testing)
  • Commented the Gate class
  • Extracted unit-tested methods from control-line-drawing code
  • Added 'knownPermutation' gate effect, and added tests for validating actual effect against permutation
  • Added ketInputGateShaderCode/ketInputGateArgs, unifying how gates get inputs
  • Added serialized 'param' property to gates

v1.9b-february-2017

7 years ago

Notable user changes:

  • Fixed extra digit in output-superposition column labels in odd-sized circuits
  • Removed 8-wire height limit on counting gates
  • Added more example circuits

Notable dev changes:

  • Added hidden ±=A² gates

v1.9-february-2017

7 years ago

Notable User Changes:

  • Added an intro menu w/ tutorial video, github link, example circuits
  • Kets are now big-endian
  • Showing per-gate-column loss%/gain% due to non-unitary operations such as post-selection
  • No longer drawing 'control wire' from input gates to non-input-taking gates
  • Shift gates now drawn as a wire-rearrangement
  • Reverse and Shift gates now allowed on wires that are a mix of measured and coherent
  • Small performance boost from cached drawing of output superposition labels

Notable Dev Changes:

  • Added hidden "±1s(A)" bitcount gates
  • Added hidden "⊕A" xor gates
  • Full react-simulate-redraw integration test
  • Fixed columns not dragging downward when 16 wires visible
  • Fixed column drag error on macs
  • Lint fixes

v1.8-october-2016

7 years ago

Notable user changes:

  • iPhone compatibility
  • Performance improvements
  • Drag columns up and down with ctrl+drag
  • 'Use controls' tutorial hint

Notable dev changes:

  • Added perf tests
  • Tests now pass on iPhone and on Android
  • 'ketShader' utility for writing gate shaders easily (order of magnitude fewer lines per shader)
  • Introduced ShaderCoder/ShaderParts to allow transparent fallback to byte textures
  • Refactored every single shader to use ShaderCoder / ketShader
  • Test circuit diagrams can now select from a gate family by adding hole characters below a gate character
  • Lots of Seq stuff turned into loops for performance reasons
  • No more caching of circuits containing dynamic gates
  • webGlTests now run once with float textures allowed and once with the byte texture fallback forced
  • All texture alloc management is now done via WglTexturePool and WglTextureTrader, creating a more imperative style
  • Texture sizes now commonly specified by the power-of-2 exponent of their area
  • Cached toolbox painting
  • Skipping unit tests that require float textures when running on a device without support for that.
  • Debugged some seriously challenging shader precision issues

v1.7b-bug-fixed-september-2016

7 years ago

Fixes a bug where controlled display gates were conditioning on the Z axis, even for X and Y controls.

v1.7-september-2016

7 years ago

Notable user changes:

  • Ability to make custom rotation/matrix/circuit gates
  • Input gates
  • Arithmetic gates now use the Input gates
  • Shift gates now use up/down arrow symbols
  • Silly Ne-Gate
  • 'Clear ALL' button
  • Dynamic gates have yellow highlight in toolbox
  • Removed default density matrix displays at right of circuit

Notable dev changes:

  • Improved startup time
  • Added meta tags
  • Fixed disabled controls starting a control line
  • Added hidden 'anti-cross' (/) and |/></| gates
  • Reworked circuit inspection code to work on inner circuits within a gate in an outer circuit
  • Gates specify custom disable reason finders and texture->texture transformations
  • Optimized final amplitude display drawing (200ms -> 20ms for 16 qubit circuit)
  • Optimized redraw scheduling
  • Unit testing utilities to compare a circuit operation against a matrix
  • Serializing custom gates
  • Parsing formulas

v1.6-june-2016

7 years ago

Notable user changes:

  • Export menu
  • Undo/redo buttons
  • A second toolbox below the circuit
  • Showing 'discard rate' when post-selection is present
  • New gates (Inverse QFT, reverse, zero, shifts [<<, >>, <<t, >>t], multiply-accumulates [c+=ab, c-=ab], X/Y-axis control/post-selection [⊕, ⊖, ⊗, |X⟩⟨X|, |+⟩⟨+|, |-⟩⟨-|])

Notable dev changes:

  • Build output is now a single html file
  • Testing that gate shaders correspond to their claimed matrices
  • Testing backwards/forwards serializer compatibility w.r.t. known gate ids
  • Support for saving an offline copy (including all code and current circuit)
  • Support for transformed controls (via pre/post shaders)
  • 'sans-serif' instead of 'helvetica'
  • Hidden tiny-Z gates ("Z^⅟₁₂₈", "Z^⅟₆₄", and "Z^⅟₃₂")
  • Fixed double-draw when grabbing things
  • Fixed not showing "Scripts disabled" in some cases
  • Some untangling in main.js