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

WIP: Block System #11

Merged
merged 32 commits into from
May 2, 2018
Merged

WIP: Block System #11

merged 32 commits into from
May 2, 2018

Conversation

Roger-luo
Copy link
Member

@Roger-luo Roger-luo commented Apr 26, 2018

Interface of AbstractBlock

Properties

  • nqubits number of qubits
  • cache_level cache level of this block
  • full get this block's dense matrix form
  • sparse get this block's sparse matrix form

Methods

  • apply! apply this block to a register
  • update! update parameters according to given sequence
  • cache! force cache all blocks that under given cache level

@coveralls
Copy link

coveralls commented Apr 26, 2018

Pull Request Test Coverage Report for Build 83

  • 186 of 229 (81.22%) changed or added relevant lines in 6 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage decreased (-13.01%) to 83.764%

Changes Missing Coverage Covered Lines Changed/Added Lines %
src/Blocks/Core.jl 36 37 97.3%
src/Blocks/Measure.jl 0 1 0.0%
src/Register.jl 9 15 60.0%
src/Blocks/Cache.jl 15 23 65.22%
src/Blocks/Compose.jl 98 125 78.4%
Totals Coverage Status
Change from base Build 71: -13.01%
Covered Lines: 227
Relevant Lines: 271

💛 - Coveralls

@codecov-io
Copy link

codecov-io commented Apr 26, 2018

Codecov Report

Merging #11 into master will decrease coverage by 63.37%.
The diff coverage is 2.72%.

Impacted file tree graph

@@             Coverage Diff             @@
##           master      #11       +/-   ##
===========================================
- Coverage     100%   36.62%   -63.38%     
===========================================
  Files           3        8        +5     
  Lines          60      172      +112     
===========================================
+ Hits           60       63        +3     
- Misses          0      109      +109
Impacted Files Coverage Δ
src/QuCircuit.jl 100% <ø> (ø) ⬆️
src/Register.jl 85.96% <0%> (-14.04%) ⬇️
src/Blocks/Cache.jl 0% <0%> (ø)
src/Blocks/Compose.jl 0% <0%> (ø)
src/Blocks/Measure.jl 0% <0%> (ø)
src/Blocks/Core.jl 0% <0%> (ø)
src/Blocks/Primitive.jl 30% <30%> (ø)
... and 3 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 1a7d01b...0dd0960. Read the comment docs.

@Roger-luo Roger-luo self-assigned this Apr 28, 2018
@Roger-luo Roger-luo added this to the v0.1 milestone Apr 28, 2018
@Roger-luo
Copy link
Member Author

Refactor composite blocks

abstract type hierarchy:

abstract type AbstractBlock{N} end
abstract type LeafBlock{N} <: AbstractBlock{N} end
abstract type AbstractGate{N} <: LeafBlock{N} end

Do we still need a abstract block for unitaries?

abstract type UnitaryBlock{N} <: AbstractBlock{N} end

Concentrator is removed from composite blocks, composite blocks now only contains ChainBlock, KronBlock, these two are unitaries.

ChainBlock <: UnitaryBlock # or AbstractBlock
KronBlock <: UnitaryBlock # or AbstractBlock

ChainBlock

ChainBlock now checks its contents' shape.

KronBlock

Can KronBlock takes a Concentrator as its sub-block? I don't think so. Concentrator itself can not kroneckered with other unitaries. Therefore, a UnitaryBlock could be necessary for this type check.

Measure

Measure will only be implemented as a method:

  • measure(reg, address)->bitstring measure a result (a bit string), but do not change the original register state
  • measure!(reg, address)->bitstring, reg measure a result (a bit string), and change the register state (to an eigen state)
  • measure_remove(reg, address) -> new_reg measure a result and trace the qubits

@GiggleLiu

@Roger-luo
Copy link
Member Author

Another change, since Concentrator is actually a rank-3 tensor, but the full & sparse methods are supposed to return a matrix (unitary) from block, it will now only return a subtype of UnitaryBlock's matrix.

the matrix form of ChainBlock will be implemented to be able to generate unitary with correct size when it contains several Concentrator with correct shape.

@Roger-luo
Copy link
Member Author

const UnitaryBlock = Union{AbstractGate, ChainBlock, KronBlock}

@Roger-luo
Copy link
Member Author

Cache Level

Add a new type parameter for each block types to specify its cache level. The block interface is extended to

apply!(block, reg, cache_level=0) # do not cache by default
cache!(block, level) # requires level, force update all the cache
dispatchin!(block, params) # dispatch params in block

@Roger-luo Roger-luo merged commit 9309f17 into master May 2, 2018
@Roger-luo Roger-luo deleted the block branch May 2, 2018 09:30
Roger-luo added a commit that referenced this pull request Dec 7, 2021
Roger-luo added a commit that referenced this pull request Dec 7, 2021
* add two more helper functions: sprand_hermitian, sprand_unitary.
Roger-luo pushed a commit that referenced this pull request Dec 8, 2021
Updating the tutorials Part 1 to 4
Roger-luo pushed a commit that referenced this pull request Dec 8, 2021
* monor fix

* seperate YaoExtensions

* new H2 atoms

* update docs

* update Grover search
GiggleLiu pushed a commit that referenced this pull request Apr 21, 2024
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
GiggleLiu added a commit that referenced this pull request Apr 21, 2024
GiggleLiu added a commit that referenced this pull request Apr 21, 2024
* Initial commit

* Files generated by PkgTemplates

PkgTemplates version: 0.7.5

* plots for ZX-diagrams

* rename plot

* plots for ZX-diagrams (#10)

* plots for ZX-diagrams

* rename plot

* CompatHelper: add new compat entry for "Compose" at version "0.9" (#11)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* CompatHelper: add new compat entry for "LightGraphs" at version "1.3" (#12)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Rogerluo <rogerluo.rl18@gmail.com>

* CompatHelper: add new compat entry for "GraphPlot" at version "0.4" (#13)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Rogerluo <rogerluo.rl18@gmail.com>

* CompatHelper: add new compat entry for "ZXCalculus" at version "0.1" (#15)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Rogerluo <rogerluo.rl18@gmail.com>

* CompatHelper: add new compat entry for "Colors" at version "0.12" (#14)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Rogerluo <rogerluo.rl18@gmail.com>

* rm logs

* fix compat

* CompatHelper: bump compat for "Compose" to "0.9" (#16)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* update for new Multigraph backend

* update zx

* update project.toml

* update project.toml

* update compat

* revert version bump due to an error occured in IonCLI

* update compat

* bump version to 0.2.1

* bump version to 0.3.0

* fix version conflict

* fix version compat

* Basic circuit vizualization (#22)

* new circuit plot

* fine tune

* fine tune

* rm 1.0 travis CI

* make CNOT a CNOT

* general update

Co-authored-by: Rogerluo <rogerluo.rl18@gmail.com>

* bump version to 0.4.0

* Update TagBot.yml

* add compat

* add compat

* Polish code and fix #3 (#24)

* polish code, make the implementation more general

* cxx.png

* bump version to 0.4.1

* use plot interface for circuits

* nvm

* add example for ZXCalculus

* fix format

* fix fig

* add Multigraphs backend (#30)

* add Multigraphs

* up compat

* CompatHelper: add new compat entry for "GraphPlot" at version "0.4" (#31)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix the plot for ZXGraph with phase gadgets (#27)

* bump version to 0.5.0

* works

* viz scale gate (unitary)

* fix phase

* fix tests

* update viznet

* CompatHelper: bump compat for "ZXCalculus" to "0.4" (#37)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* new measure (#39)

* New multiqubit gate (#40)

* new measure

* new mutiple qubit gates

* multi-gate labeling

* allow changing line color

* allow changing line color (#42)

* Update Project.toml

* Initial commit

* Files generated by PkgTemplates

PkgTemplates version: 0.7.23

* update

* tests pass

* update tests

* CompatHelper: add new compat entry for OMEinsum at version 0.6, (keep existing compat)

* CompatHelper: add new compat entry for Yao at version 0.6, (keep existing compat)

* update docs

* Update README.md

* setup ci

* update project.toml

* Update README.md

* bump OMEinsumContractionOrders version

* Update Project.toml

* Add vega plot backend (#43)

* rework with Compose

* fix tests

* fix version

* add Vega backend

* add tests

* resolve version

* Revert "Add vega plot backend (#43)" (#44)

This reverts commit f04e3f4.

* fix tests, upgrade Graphs

* bump version, add codecov

* Update README.md

* polish viz circuit (#47)

* Update TagBot.yml

* boundary condition specification

* Update Project.toml

* Add instructions for changing plot attributes  (#49)

* Add attribute instruction plots

* Update README.md

* Delete attr_circuit_1.svg

* Update README.md

* Fixed a tiny one letter typo (#50)

Really sorry!!! 😬

* update yao

* update deps (#51)

* update circuit

* fix readme example

* bump version

* bump version

* Update README.md

* Update Project.toml (#52)

Just noticed that I wasn't able to upgrade to Yao 0.8 with YaoPlots. This should do it :D

* Update Project.toml

* Bump version of BitBasis in Project.toml (#53)

Sorry! Forgot about this one 🥲

* Update Project.toml

* update

* better visualization of labeled multi-qubit circuits (#55)

* update

* update

* update

* to basic style

* update

* update vizcircuit

* fix tests

* fix tests

* rm wg

* Update Project.toml

* fix multi-level

* Update CI.yml

* bump version

* [WIP] Switch to Luxor backend (#56)

* update luxor

* fix line break

* fix labelled example

* fix margin

* fix test

* ...

* more spacious

* ...

* seperate zx calculus

* upgrad OMEinsum

* update dpes

* fix #58 (#59)

* barrier for chain (#60)

* Update README.md

* add type TensorNetwork

* update README

* fix show

* cuda extension

* fix cuda ext

* Plot bloch sphere (#62)

* new bloch

* update README

* Update Project.toml

* Update Project.toml

* optimize projection gate

* update

* fix a dispatch

* impove test

* Update Project.toml

* Update README.md

* Update README.md

* Subtree merged in lib/YaoToEinsum

* complete YaoToEinsum merge

* complete YaoPlots merge

* clean up images

---------

Co-authored-by: Roger-luo <rogerluo.rl18@gmail.com>
Co-authored-by: Chen Zhao <zhaochen17@mails.ucas.ac.cn>
Co-authored-by: Chen Zhao <50411747+ChenZhao44@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: CompatHelper Julia <compathelper_noreply@julialang.org>
Co-authored-by: Chetan Vardhan <51269425+VarLad@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants