Releases: Strilanc/Quirk
Releases · Strilanc/Quirk
v2.3 - September 2019
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 - March 2019
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
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 tohtml
- 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
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
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
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
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
Fixes a bug where controlled display gates were conditioning on the Z axis, even for X and Y controls.
v1.7 - September 2016
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
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