Skip to content

Commit

Permalink
Add tutorial for qubit tapering (#413)
Browse files Browse the repository at this point in the history
* update requirements

* Update requirements.txt (#329)

* Add more `plt.show` calls in the l2l demo (#331)

* plt.show; last updated

* Model name

* diff_method=None (#332)

* Added a note to Quantum Volume Demo (#335)

* Added a note to teach users how to access a list of
available IBM Q backends

* Having two notes next to eachother looks visually bad so
I just merged it with the previous note

* Update requirements.txt

Co-authored-by: antalszava <antalszava@gmail.com>

* Update requirements.txt

Co-authored-by: antalszava <antalszava@gmail.com>

* Add dev branch

* Update demos to make use of the new qml.sample and qml.expval(H) functionality (story #: 8118)  (#330)

* Updated qsim to use the new qml.sample functionality
**needs to be tested ! **

* just removed one commented line

* Updated one of the paragraphs to be consistent with
the changes

* Updated coherent vqls to use the builtin functionality of
qml.sample, also tested it locally and it seems to run without
errors!

* updated qaoa_maxcut to use new qml.sample functionality

* updated vqls tutorial to make  use of the new functionality
of qml.sample

* Made some changes to chem reaction tutorial, want to confirm with
CI to see if it works properly because I can't run it locally

* fixed quick little bug with wires in circuit def

* quick change to help debug error in CI

* Found the bug with chem_reactions tutorial, hopefully
this fixes it

* updated falqon tutorial and removed dependance on qml.ExpvalCost,
still need to confirm it works with CI

* fixed a small bug, wrote Qnode isntead of QNode

* Updated falqon to use qml.expval instead of qml.ExpvalCost

* updated optimized measurement tutorial to make use of qml.expval,
still need to test with CI

* debugging measurement optimize tutorial

* The bug regarding Qnodes is well known, just made a change
the Christina suggested as a temporary fix

* Updated molecular geometry optimization tutorial to make
use of qml.expval

* Updated qaoa tutorial to make use of qml.expval, updated docs
in both examples to remove qml.ExpValCost

* Updated vqe and vqe qng tutorials to use qml.expval(H)

* Updated the vqe soin sectors demo with qml.expval, fixed a typo in
overview of vqe tutorial

* Updated parallel vqe tutorial to remove dependance on qml.ExpvalCost,
was not able to fully test this because I don't have rigitti setup

* Updated these tutorials to remove qml.ExpvalCost dependance

* Cleaning up some typos and comments

* Updated measurement optimization tutorial to make use of qml.Tracker

* Update demonstrations/tutorial_qaoa_maxcut.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Update demonstrations/qsim_beyond_classical.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Update demonstrations/tutorial_coherent_vqls.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Updated tutorials based on pr comments

* Fixed bug in the spsa demo

* clean up

* Update demonstrations/tutorial_qaoa_maxcut.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* cleaned up docs

* Cleaning up documentation

* added comment

* Update demonstrations/braket-parallel-gradients.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Clean up

- added variable num_wires to mol_geo_opt tutorial

- replaced new_graph.nodes with dev.wires to clairfy
iteration over wires

* Update demonstrations/tutorial_coherent_vqls.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/qsim_beyond_classical.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_coherent_vqls.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_mol_geo_opt.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_qaoa_intro.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_vqe_qng.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_vqls.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_mol_geo_opt.py

Co-authored-by: Josh Izaac <josh146@gmail.com>

* Update demonstrations/tutorial_qaoa_maxcut.py

Co-authored-by: Josh Izaac <josh146@gmail.com>

* Address comments

- made circuit a qnode to prevent the need to initialize multiple
qnodes one after another

Co-authored-by: antalszava <antalszava@gmail.com>
Co-authored-by: Maria Schuld <mariaschuld@gmail.com>
Co-authored-by: Josh Izaac <josh146@gmail.com>

* Update tutorial_gbs.py (#351)

* pin pyparsing (#358)

* Merge `master` into `dev` (#362)

* Update pyscf version. (#273)

Co-authored-by: Olivia Di Matteo <dimatteo.olivia@gmail.com>

* Update qnode.draw to qml.draw() (#352)

* pin pyparsing (#357)

* replaced pad --> pad_with in this tutorial as it has now been deprecated (#359)

* Add an action for demo output checking (#356)

* Update demos to make use of the new qml.sample and qml.expval(H) functionality (story #: 8118)  (#330)

* Updated qsim to use the new qml.sample functionality
**needs to be tested ! **

* just removed one commented line

* Updated one of the paragraphs to be consistent with
the changes

* Updated coherent vqls to use the builtin functionality of
qml.sample, also tested it locally and it seems to run without
errors!

* updated qaoa_maxcut to use new qml.sample functionality

* updated vqls tutorial to make  use of the new functionality
of qml.sample

* Made some changes to chem reaction tutorial, want to confirm with
CI to see if it works properly because I can't run it locally

* fixed quick little bug with wires in circuit def

* quick change to help debug error in CI

* Found the bug with chem_reactions tutorial, hopefully
this fixes it

* updated falqon tutorial and removed dependance on qml.ExpvalCost,
still need to confirm it works with CI

* fixed a small bug, wrote Qnode isntead of QNode

* Updated falqon to use qml.expval instead of qml.ExpvalCost

* updated optimized measurement tutorial to make use of qml.expval,
still need to test with CI

* debugging measurement optimize tutorial

* The bug regarding Qnodes is well known, just made a change
the Christina suggested as a temporary fix

* Updated molecular geometry optimization tutorial to make
use of qml.expval

* Updated qaoa tutorial to make use of qml.expval, updated docs
in both examples to remove qml.ExpValCost

* Updated vqe and vqe qng tutorials to use qml.expval(H)

* Updated the vqe soin sectors demo with qml.expval, fixed a typo in
overview of vqe tutorial

* Updated parallel vqe tutorial to remove dependance on qml.ExpvalCost,
was not able to fully test this because I don't have rigitti setup

* Updated these tutorials to remove qml.ExpvalCost dependance

* Cleaning up some typos and comments

* Updated measurement optimization tutorial to make use of qml.Tracker

* Update demonstrations/tutorial_qaoa_maxcut.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Update demonstrations/qsim_beyond_classical.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Update demonstrations/tutorial_coherent_vqls.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Updated tutorials based on pr comments

* Fixed bug in the spsa demo

* clean up

* Update demonstrations/tutorial_qaoa_maxcut.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* cleaned up docs

* Cleaning up documentation

* added comment

* Update demonstrations/braket-parallel-gradients.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Clean up

- added variable num_wires to mol_geo_opt tutorial

- replaced new_graph.nodes with dev.wires to clairfy
iteration over wires

* Update demonstrations/tutorial_coherent_vqls.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/qsim_beyond_classical.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_coherent_vqls.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_mol_geo_opt.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_qaoa_intro.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_vqe_qng.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_vqls.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_mol_geo_opt.py

Co-authored-by: Josh Izaac <josh146@gmail.com>

* Update demonstrations/tutorial_qaoa_maxcut.py

Co-authored-by: Josh Izaac <josh146@gmail.com>

* Address comments

- made circuit a qnode to prevent the need to initialize multiple
qnodes one after another

Co-authored-by: antalszava <antalszava@gmail.com>
Co-authored-by: Maria Schuld <mariaschuld@gmail.com>
Co-authored-by: Josh Izaac <josh146@gmail.com>

* sources + yml

* add diff job

* on push

* branch name

* unzip with path

* updates

* tutorials from master and dev too

* path to script

* Update diffs found

* add toc and references

* Update diffs found

* comments

* mv to .github/workflows dedicated folder

* diffs document updates

* revert changes to tutorial_vqe_qng.py

* Update .github/workflows/html_parser.py

Co-authored-by: Jay Soni <jbsoni@uwaterloo.ca>

* suggestions

* no sys

* Move demo_diff.md so that workflows access is not required

* change trigger and branch

Co-authored-by: Jay Soni <jbsoni@uwaterloo.ca>
Co-authored-by: Maria Schuld <mariaschuld@gmail.com>
Co-authored-by: Josh Izaac <josh146@gmail.com>
Co-authored-by: QML demo checker Bot <>

Co-authored-by: Olivia Di Matteo <2068515+glassnotes@users.noreply.github.com>
Co-authored-by: Olivia Di Matteo <dimatteo.olivia@gmail.com>
Co-authored-by: Josh Izaac <josh146@gmail.com>
Co-authored-by: Jay Soni <jbsoni@uwaterloo.ca>
Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update templates access and remove template decorator (#360)

* Update pyscf version. (#273)

Co-authored-by: Olivia Di Matteo <dimatteo.olivia@gmail.com>

* Update qnode.draw to qml.draw() (#352)

* pin pyparsing (#357)

* replaced pad --> pad_with in this tutorial as it has now been deprecated (#359)

* Update templates.

Co-authored-by: Olivia Di Matteo <2068515+glassnotes@users.noreply.github.com>
Co-authored-by: Olivia Di Matteo <dimatteo.olivia@gmail.com>
Co-authored-by: Josh Izaac <josh146@gmail.com>
Co-authored-by: antalszava <antalszava@gmail.com>
Co-authored-by: Jay Soni <jbsoni@uwaterloo.ca>

* Remove use of the init module everywhere (#361)

* Update pyscf version. (#273)

Co-authored-by: Olivia Di Matteo <dimatteo.olivia@gmail.com>

* Update qnode.draw to qml.draw() (#352)

* pin pyparsing (#357)

* replaced pad --> pad_with in this tutorial as it has now been deprecated (#359)

* Add an action for demo output checking (#356)

* Update demos to make use of the new qml.sample and qml.expval(H) functionality (story #: 8118)  (#330)

* Updated qsim to use the new qml.sample functionality
**needs to be tested ! **

* just removed one commented line

* Updated one of the paragraphs to be consistent with
the changes

* Updated coherent vqls to use the builtin functionality of
qml.sample, also tested it locally and it seems to run without
errors!

* updated qaoa_maxcut to use new qml.sample functionality

* updated vqls tutorial to make  use of the new functionality
of qml.sample

* Made some changes to chem reaction tutorial, want to confirm with
CI to see if it works properly because I can't run it locally

* fixed quick little bug with wires in circuit def

* quick change to help debug error in CI

* Found the bug with chem_reactions tutorial, hopefully
this fixes it

* updated falqon tutorial and removed dependance on qml.ExpvalCost,
still need to confirm it works with CI

* fixed a small bug, wrote Qnode isntead of QNode

* Updated falqon to use qml.expval instead of qml.ExpvalCost

* updated optimized measurement tutorial to make use of qml.expval,
still need to test with CI

* debugging measurement optimize tutorial

* The bug regarding Qnodes is well known, just made a change
the Christina suggested as a temporary fix

* Updated molecular geometry optimization tutorial to make
use of qml.expval

* Updated qaoa tutorial to make use of qml.expval, updated docs
in both examples to remove qml.ExpValCost

* Updated vqe and vqe qng tutorials to use qml.expval(H)

* Updated the vqe soin sectors demo with qml.expval, fixed a typo in
overview of vqe tutorial

* Updated parallel vqe tutorial to remove dependance on qml.ExpvalCost,
was not able to fully test this because I don't have rigitti setup

* Updated these tutorials to remove qml.ExpvalCost dependance

* Cleaning up some typos and comments

* Updated measurement optimization tutorial to make use of qml.Tracker

* Update demonstrations/tutorial_qaoa_maxcut.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Update demonstrations/qsim_beyond_classical.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Update demonstrations/tutorial_coherent_vqls.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Updated tutorials based on pr comments

* Fixed bug in the spsa demo

* clean up

* Update demonstrations/tutorial_qaoa_maxcut.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* cleaned up docs

* Cleaning up documentation

* added comment

* Update demonstrations/braket-parallel-gradients.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Clean up

- added variable num_wires to mol_geo_opt tutorial

- replaced new_graph.nodes with dev.wires to clairfy
iteration over wires

* Update demonstrations/tutorial_coherent_vqls.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/qsim_beyond_classical.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_coherent_vqls.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_mol_geo_opt.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_qaoa_intro.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_vqe_qng.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_vqls.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_mol_geo_opt.py

Co-authored-by: Josh Izaac <josh146@gmail.com>

* Update demonstrations/tutorial_qaoa_maxcut.py

Co-authored-by: Josh Izaac <josh146@gmail.com>

* Address comments

- made circuit a qnode to prevent the need to initialize multiple
qnodes one after another

Co-authored-by: antalszava <antalszava@gmail.com>
Co-authored-by: Maria Schuld <mariaschuld@gmail.com>
Co-authored-by: Josh Izaac <josh146@gmail.com>

* sources + yml

* add diff job

* on push

* branch name

* unzip with path

* updates

* tutorials from master and dev too

* path to script

* Update diffs found

* add toc and references

* Update diffs found

* comments

* mv to .github/workflows dedicated folder

* diffs document updates

* revert changes to tutorial_vqe_qng.py

* Update .github/workflows/html_parser.py

Co-authored-by: Jay Soni <jbsoni@uwaterloo.ca>

* suggestions

* no sys

* Move demo_diff.md so that workflows access is not required

* change trigger and branch

Co-authored-by: Jay Soni <jbsoni@uwaterloo.ca>
Co-authored-by: Maria Schuld <mariaschuld@gmail.com>
Co-authored-by: Josh Izaac <josh146@gmail.com>
Co-authored-by: QML demo checker Bot <>

* remove init module everywhere

* minor improvement

* add 2pi scaling

* Update demonstrations/spsa.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Update demonstrations/tutorial_doubly_stochastic.py

Co-authored-by: antalszava <antalszava@gmail.com>

* add low and high; scale argument

* add low and high; scale argument

* use pad_with

Co-authored-by: Olivia Di Matteo <2068515+glassnotes@users.noreply.github.com>
Co-authored-by: Olivia Di Matteo <dimatteo.olivia@gmail.com>
Co-authored-by: Josh Izaac <josh146@gmail.com>
Co-authored-by: antalszava <antalszava@gmail.com>
Co-authored-by: Jay Soni <jbsoni@uwaterloo.ca>

* Requires grad updates (#364)

* chemical

* tutorial_mol_geo_opt

* tutorial_vqe_spin_sectors

* vqe; remove - option due to redundancy warning

* rotoselect

* natural grad demo

* qgrnn

* local cost func demo, requires_grad=True

* format

* gaussian transformation

* qaoa intro

* adaptive

* variational classifier

* Update demonstrations/tutorial_local_cost_functions.py

Co-authored-by: Christina Lee <christina@xanadu.ai>

* update with assignment

* suggestion + requires_grad specify

* qonn.py

Co-authored-by: Christina Lee <christina@xanadu.ai>

* requires_grad=True (#366)

* use approx='block-diag' instead of diag_approx=False (#365)

Co-authored-by: Josh Izaac <josh146@gmail.com>

* increase the number of epochs (#368)

* last bit of requires_grad=True changes (#370)

Co-authored-by: Christina Lee <christina@xanadu.ai>

* Prepare `dev` to be merged into `master` (#373)

* Update pyscf version. (#273)

Co-authored-by: Olivia Di Matteo <dimatteo.olivia@gmail.com>

* Update qnode.draw to qml.draw() (#352)

* pin pyparsing (#357)

* replaced pad --> pad_with in this tutorial as it has now been deprecated (#359)

* Add an action for demo output checking (#356)

* Update demos to make use of the new qml.sample and qml.expval(H) functionality (story #: 8118)  (#330)

* Updated qsim to use the new qml.sample functionality
**needs to be tested ! **

* just removed one commented line

* Updated one of the paragraphs to be consistent with
the changes

* Updated coherent vqls to use the builtin functionality of
qml.sample, also tested it locally and it seems to run without
errors!

* updated qaoa_maxcut to use new qml.sample functionality

* updated vqls tutorial to make  use of the new functionality
of qml.sample

* Made some changes to chem reaction tutorial, want to confirm with
CI to see if it works properly because I can't run it locally

* fixed quick little bug with wires in circuit def

* quick change to help debug error in CI

* Found the bug with chem_reactions tutorial, hopefully
this fixes it

* updated falqon tutorial and removed dependance on qml.ExpvalCost,
still need to confirm it works with CI

* fixed a small bug, wrote Qnode isntead of QNode

* Updated falqon to use qml.expval instead of qml.ExpvalCost

* updated optimized measurement tutorial to make use of qml.expval,
still need to test with CI

* debugging measurement optimize tutorial

* The bug regarding Qnodes is well known, just made a change
the Christina suggested as a temporary fix

* Updated molecular geometry optimization tutorial to make
use of qml.expval

* Updated qaoa tutorial to make use of qml.expval, updated docs
in both examples to remove qml.ExpValCost

* Updated vqe and vqe qng tutorials to use qml.expval(H)

* Updated the vqe soin sectors demo with qml.expval, fixed a typo in
overview of vqe tutorial

* Updated parallel vqe tutorial to remove dependance on qml.ExpvalCost,
was not able to fully test this because I don't have rigitti setup

* Updated these tutorials to remove qml.ExpvalCost dependance

* Cleaning up some typos and comments

* Updated measurement optimization tutorial to make use of qml.Tracker

* Update demonstrations/tutorial_qaoa_maxcut.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Update demonstrations/qsim_beyond_classical.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Update demonstrations/tutorial_coherent_vqls.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Updated tutorials based on pr comments

* Fixed bug in the spsa demo

* clean up

* Update demonstrations/tutorial_qaoa_maxcut.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* cleaned up docs

* Cleaning up documentation

* added comment

* Update demonstrations/braket-parallel-gradients.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Clean up

- added variable num_wires to mol_geo_opt tutorial

- replaced new_graph.nodes with dev.wires to clairfy
iteration over wires

* Update demonstrations/tutorial_coherent_vqls.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/qsim_beyond_classical.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_coherent_vqls.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_mol_geo_opt.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_qaoa_intro.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_vqe_qng.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_vqls.py

Co-authored-by: Maria Schuld <mariaschuld@gmail.com>

* Update demonstrations/tutorial_mol_geo_opt.py

Co-authored-by: Josh Izaac <josh146@gmail.com>

* Update demonstrations/tutorial_qaoa_maxcut.py

Co-authored-by: Josh Izaac <josh146@gmail.com>

* Address comments

- made circuit a qnode to prevent the need to initialize multiple
qnodes one after another

Co-authored-by: antalszava <antalszava@gmail.com>
Co-authored-by: Maria Schuld <mariaschuld@gmail.com>
Co-authored-by: Josh Izaac <josh146@gmail.com>

* sources + yml

* add diff job

* on push

* branch name

* unzip with path

* updates

* tutorials from master and dev too

* path to script

* Update diffs found

* add toc and references

* Update diffs found

* comments

* mv to .github/workflows dedicated folder

* diffs document updates

* revert changes to tutorial_vqe_qng.py

* Update .github/workflows/html_parser.py

Co-authored-by: Jay Soni <jbsoni@uwaterloo.ca>

* suggestions

* no sys

* Move demo_diff.md so that workflows access is not required

* change trigger and branch

Co-authored-by: Jay Soni <jbsoni@uwaterloo.ca>
Co-authored-by: Maria Schuld <mariaschuld@gmail.com>
Co-authored-by: Josh Izaac <josh146@gmail.com>
Co-authored-by: QML demo checker Bot <>

* Update header.html

* Update xanadu.css_t

* Update demo checker path (#363)

* remove unnecessary steps (display files); update the path where the markdown file is being stored

* temporarily add workflow execution when pushing to branch

* Update to a non-protected branch

* comment

* torch and tensorflow requirement bumps

* get numpy required by TF 2.6

* remove push trigger

* keras 2.6 (#369)

* Added tkt tutorial (#371)

* Added tkt tutorial

* Updated tkt tutorial

* Changed tutorial_tkt and built locally

* Apply suggestions from code review

* Delete junit.xml

Co-authored-by: Catalina Albornoz <catalina@xanadu.ai>
Co-authored-by: Nathan Killoran <co9olguy@users.noreply.github.com>

* Updating demos to be consistent with the new breaking changes. (#367)

* Updating demos to be consistent with the new breaking changes.

- Updated link in pytorch noise
- Removed .template when calling templates
- Need to update IBMQ decice

* more fixed then before but still getting some weird seg-faults

* updated the use of tape.execute --> qml.execute

* Qubit Unitary got a decomposition, had to stop expanding the quantum tape at the operator to match the ascii art display

Co-authored-by: Josh Izaac <josh146@gmail.com>

* Update demonstrations/tutorial_multiclass_classification.py

Co-authored-by: Olivia Di Matteo <2068515+glassnotes@users.noreply.github.com>
Co-authored-by: Olivia Di Matteo <dimatteo.olivia@gmail.com>
Co-authored-by: Josh Izaac <josh146@gmail.com>
Co-authored-by: Jay Soni <jbsoni@uwaterloo.ca>
Co-authored-by: Maria Schuld <mariaschuld@gmail.com>
Co-authored-by: CatalinaAlbornoz <albornoz.catalina@hotmail.com>
Co-authored-by: Catalina Albornoz <catalina@xanadu.ai>
Co-authored-by: Nathan Killoran <co9olguy@users.noreply.github.com>

* update requirements

* Increase cache (`dev`) (#385)

* JAX new version changes required

* Revert "JAX new version changes required"

This reverts commit 7b514ac.

* no jit (temp)

* get the norm check updated branch

* dummy change to run the demo

* increase the cache number

* get v0.19.1-rc0 branch

* Update demonstrations/tutorial_general_parshift.py

* increase the cache and continue pulling PennyLane master

* Stop importing QNode from beta folder in mitigation demo (#392)

* Update the backprop demo to work with the latest PL master (#391)

* Fix jax demo to work with the latest version of PennyLane (#393)

* Fixes the JAX demo

* fix

* `dev` branch fixes (#396)

* fix tutorial_classical_shadows.py

* pin to latest lightning

* get cmake

* update

* change order of installs

* pip install cmake

* gcc8 image

* newer circleci image

* spectrum -> qnode_spectrum (#397)

* use plt.show for the general parameter shift demo (#400)

* Fix demo diffs with PennyLane release v0.20.0 (#402)

* Fix metrix_tensor warning about approximation

* set the expansion strategy for the metrology demo

* Add max_diff to quantum analytic descent

Co-authored-by: antalszava <antalszava@gmail.com>

* use draw_mpl method and set device expansion (#398)

* use draw_mpl

* qonn uses draw transform rather than method

* Update demonstrations/qonn.py

Co-authored-by: antalszava <antalszava@gmail.com>

* plt.show

* Add `expansion_strategy="device"`

... to printed circuits with templates.

* Update demonstrations/tutorial_local_cost_functions.py

* Update demonstrations/tutorial_local_cost_functions.py

* Update demonstrations/tutorial_local_cost_functions.py

* print after plt.show

Co-authored-by: Josh Izaac <josh146@gmail.com>
Co-authored-by: antalszava <antalszava@gmail.com>
Co-authored-by: dime10 <dime10@users.noreply.github.com>

* Pin qiskit==0.32.0 temporarily (`dev`) (#404)

* pin Qiskit and dummy modify the demos where the change should occur

* change the order of statements to trigger the docs build

* Revert "Pin qiskit==0.32.0 temporarily (`dev`) (#404)" (#406)

This reverts commit cabe82a.

* qhack

* update SF dependency

* fix

* fix

* fix

* fix

* Make demos using Forest non-automatically run (#408)

* rename demos that would use Forest such that they are not automatically run; remove the Forest dep

* no quilc or qvm run

* Add outputs with images to ensemble multi qpu demo

* vqe parallel outputs

* more width

* path and width fix

* last updated; correct png

* image

* Update requirements.txt

* Update requirements

* add qubit tapering tutorial

* add background theory

* update rst tile

* correct refs

* add optimal sector

* modify introduction

* modify the unitary operator text

* add energy calculations

* fix build issues

* add ref and correct typo

* add HeH cation

* add state and HF energy

* add vqe simulation

* correct line lengths and typos

* add section titles

* add image

* rearrange text and create intro

* correct equation

* correct math equation

* apply suggestions from code review

Co-authored-by: ixfoduap <40441298+ixfoduap@users.noreply.github.com>

* apply review comments

* add example to intro

* modify tapering process in intro

* add imports

* remove qubit coupled cluster

* apply suggestions from code review

Co-authored-by: ixfoduap <40441298+ixfoduap@users.noreply.github.com>

* explain eigenvalue sector with more details

* modify example hamiltonian

* correct math typo

* add review comments

* correct Hamiltonian symbol

* fit line length

* Specify `diff_method=None` in `tutorial_jax_transformations.py` (#418)

* Re-add diff_method=None to jax transform PR

* increase no output timeout time

* Python unbeffered

* revert 30m

* change to using a machine instance

* increment the cache

* Revert "increment the cache"

This reverts commit 74f8a32.

* Revert "change to using a machine instance"

This reverts commit f22a6d2.

* temporarily get release Lightning

* no python buffer export

* Update requirements.txt

* Update requirements.txt

* update requirements

* pin markupsafe==2.0.1 (#433)

* Updated demo to avoid the soon to be deprecated qml.finite_diff func (#431)

Co-authored-by: antalszava <antalszava@gmail.com>

* add review comments

* Change querying matrices as per the new API (#437)

* obtaining matrix

* inc cache number

* update circuit drawing (#438)

* Update tutorial_vqt.py (#440)

* Use `cirq_pasqal` (#443)

* cirq_pasqal

* inc cache num

* bump: TF, Keras, NumPy and Mitiq

* NumPy

* torch no_grad used with plotting

* Qiskit Aer NoiseModel will be updating the .from_backend() method to take backend objects directly (#444)

* Update quantum volume Demo with instructions to configure IBM Q account  (#445)

* Qiskit Aer NoiseModel will be updating the .from_backend() method to take backend objects directly

* added note about how to setup IBM Q account

* fix note display in docs

* more formating

* fix link

* formatting again

* Update demonstrations/quantum_volume.py

Co-authored-by: David Ittah <dime10@users.noreply.github.com>

* Update demonstrations/quantum_volume.py

Co-authored-by: David Ittah <dime10@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: antalszava <antalszava@gmail.com>

* Update requirements

* update SF version

* Update (#465)

* Update `requirements.txt` (#466)

* update requirements.txt

* No qchem needed

* Update quantum volume demonstration as per drawing updates (#471)

* Add the show matrices option

* Update demonstrations/quantum_volume.py

Co-authored-by: Christina Lee <chrissie.c.l@gmail.com>

Co-authored-by: Christina Lee <chrissie.c.l@gmail.com>

* Update spsa (#464)

* Update

* Update demonstrations/spsa.py

Co-authored-by: antalszava <antalszava@gmail.com>

* Fix QChem related demo errors, get latest Lightning & pin Cirq (#467)

* install Lightning in the runner using Test PyPi

* try installing PennyLane rc

* pin openfermionpyscf and comment

* Pull Lightning from Test PyPi

* Measurement optimize adjust

* cache

* h5py version pin

* req file

* pin Cirq-core and cirq-pasqal

* revert method='pyscf' in adaptive demo

* Trigger CI

* reset cache

* no comma needed

* set requires_grad as false for hamiltonian coeffs (#473)

* use qchem

* add code review comments

* Remove QChem in the text (#474)

* Update mitiq demo drawing (#476)

* draw tape with new pipeline

* length

* stable -> latest (#477)

* update cross ref

* Apply suggestions from code review

Co-authored-by: ixfoduap <40441298+ixfoduap@users.noreply.github.com>

* use qml.eigvals

* Update dependencies in quantum chemistry tutorial (#475)

* add new image

* Apply suggestions from code review

Co-authored-by: antalszava <antalszava@gmail.com>

* resource class & parallel

* no parallel

* increment requirements

* correct qchem crossrefs

* update the date

* update posted date

* correct links

* Apply suggestions from code review

Co-authored-by: Utkarsh <utkarshazad98@gmail.com>

* remove blank lines

* modify format

* add dots

* correct fci energy

* correct eigvals

* add qubit tapering tutorial

* add background theory

* update rst tile

* correct refs

* add optimal sector

* modify introduction

* modify the unitary operator text

* add energy calculations

* fix build issues

* add ref and correct typo

* add HeH cation

* add state and HF energy

* add vqe simulation

* correct line lengths and typos

* add section titles

* add image

* rearrange text and create intro

* correct equation

* correct math equation

* apply suggestions from code review

Co-authored-by: ixfoduap <40441298+ixfoduap@users.noreply.github.com>

* apply review comments

* add example to intro

* modify tapering process in intro

* add imports

* remove qubit coupled cluster

* apply suggestions from code review

Co-authored-by: ixfoduap <40441298+ixfoduap@users.noreply.github.com>

* explain eigenvalue sector with more details

* modify example hamiltonian

* correct math typo

* add review comments

* correct Hamiltonian symbol

* fit line length

* add review comments

* use qchem

* add code review comments

* update cross ref

* Apply suggestions from code review

Co-authored-by: ixfoduap <40441298+ixfoduap@users.noreply.github.com>

* use qml.eigvals

* add new image

* correct qchem crossrefs

* update the date

* update posted date

* correct links

* Apply suggestions from code review

Co-authored-by: Utkarsh <utkarshazad98@gmail.com>

* remove blank lines

* modify format

* add dots

* correct fci energy

* correct eigvals

* update requirements

* Update date on demonstrations/tutorial_qubit_tapering.py

* Add Diff HF demo as related demo on demonstrations/tutorial_qubit_tapering.py

* Correct typo on demonstrations/tutorial_qubit_tapering.py

* Add bio to demonstrations/tutorial_qubit_tapering.py

* Update "about the author" in demonstrations/tutorial_qubit_tapering.py

* Update about the author in demonstrations/tutorial_qubit_tapering.py

* Update about the author in demonstrations/tutorial_qubit_tapering.py

* Update about the author demonstrations/tutorial_qubit_tapering.py

* Update about the author in demonstrations/tutorial_qubit_tapering.py

* Link to VQE tutorial on demonstrations/tutorial_qubit_tapering.py

Co-authored-by: Josh Izaac <josh146@gmail.com>

* Add link to molecular hamiltonian demo on demonstrations/tutorial_qubit_tapering.py

* Update author in demonstrations/tutorial_qubit_tapering.py

Co-authored-by: GitHub Nightly Merge Action <actions@github.com>
Co-authored-by: Josh Izaac <josh146@gmail.com>
Co-authored-by: antalszava <antalszava@gmail.com>
Co-authored-by: Jay Soni <jbsoni@uwaterloo.ca>
Co-authored-by: Maria Schuld <mariaschuld@gmail.com>
Co-authored-by: Olivia Di Matteo <2068515+glassnotes@users.noreply.github.com>
Co-authored-by: Olivia Di Matteo <dimatteo.olivia@gmail.com>
Co-authored-by: Romain <rmoyard@gmail.com>
Co-authored-by: Christina Lee <christina@xanadu.ai>
Co-authored-by: CatalinaAlbornoz <albornoz.catalina@hotmail.com>
Co-authored-by: Catalina Albornoz <catalina@xanadu.ai>
Co-authored-by: Nathan Killoran <co9olguy@users.noreply.github.com>
Co-authored-by: Tom Bromley <49409390+trbromley@users.noreply.github.com>
Co-authored-by: David Ittah <dime10@users.noreply.github.com>
Co-authored-by: ixfoduap <40441298+ixfoduap@users.noreply.github.com>
Co-authored-by: Christina Lee <chrissie.c.l@gmail.com>
Co-authored-by: Utkarsh <utkarshazad98@gmail.com>
  • Loading branch information
18 people committed May 16, 2022
1 parent 8127284 commit cda04ac
Show file tree
Hide file tree
Showing 3 changed files with 302 additions and 0 deletions.
Binary file added demonstrations/qubit_tapering/qubit_tapering.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
296 changes: 296 additions & 0 deletions demonstrations/tutorial_qubit_tapering.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,296 @@
r"""
Qubit tapering
==============
.. meta::
:property="og:description": Learn how to taper off qubits
:property="og:image": https://pennylane.ai/qml/_images/ qubit_tapering.png
.. related::
tutorial_quantum_chemistry Quantum chemistry with PennyLane
tutorial_vqe A brief overview of VQE
tutorial_givens_rotations Givens rotations for quantum chemistry
tutorial_adaptive_circuits Adaptive circuits for quantum chemistry
tutorial_differentiable_HF Differentiable Hartree-Fock
*Author: Soran Jahangiri. Posted: 16 May 2022. Last updated: 16 May 2022*
The performance of variational quantum algorithms is considerably limited by the number of qubits
required to represent wave functions. In the context of quantum chemistry, this
limitation hinders the treatment of large molecules with algorithms such as the :doc:`variational quantum
eigensolver (VQE) <tutorial_vqe>`. Several approaches have been developed to reduce the qubit requirements for
quantum chemistry calculations. In this tutorial, we demonstrate the symmetry-based qubit
tapering approach which allows reducing the number of qubits required to perform molecular quantum
simulations based on the :math:`\mathbb{Z}_2` symmetries present in molecular Hamiltonians
[#bravyi2017]_ [#setia2019]_.
A molecular Hamiltonian in the qubit basis can be expressed as a linear combination of Pauli words
as
.. math:: H = \sum_{i=1}^r h_i P_i,
where :math:`h_i` is a real coefficient and :math:`P_i` is a tensor product of Pauli and
identity operators acting on :math:`M` qubits
.. math:: P_i \in \pm \left \{ I, X, Y, Z \right \} ^ {\bigotimes M}.
The main idea in the symmetry-based qubit tapering approach is to find a unitary operator :math:`U`
that transforms :math:`H` to a new Hamiltonian :math:`H'` which has the same eigenvalues as
:math:`H`
.. math:: H' = U^{\dagger} H U = \sum_{i=1}^r c_i \mu_i,
such that each :math:`\mu_i` term in the new Hamiltonian always acts trivially, e.g., with an
identity or a Pauli operator, on a set of qubits. This allows tapering-off those qubits from the
Hamiltonian.
For instance, consider the following Hamiltonian
.. math:: H' = Z_0 X_1 - X_1 + Y_0 X_1,
where all terms in the Hamiltonian act on the second qubit with the :math:`X` operator. It is
straightforward to show that each term in the Hamiltonian commutes with :math:`I_0 X_1` and the
ground-state eigenvector of :math:`H'` is also an eigenvector of :math:`I_0 X_1` with eigenvalues
:math:`\pm 1`. We can also rewrite the Hamiltonian as
.. math:: H' = (Z_0 I_1 - I_0 I_1 + Y_0 I_1) I_0 X_1,
which gives us
.. math:: H'|\psi \rangle = \pm1 (Z_0 I_1 - I_0 I_1 + Y_0 I_1)|\psi \rangle,
where :math:`|\psi \rangle` is an eigenvector of :math:`H'`. This means that the Hamiltonian
:math:`H` can be simplified as
.. math:: H_{tapered} = \pm1 (Z_0 - I_0 + Y_0).
The tapered Hamiltonian :math:`H_{tapered}` has the eigenvalues
.. math:: [-2.41421, 0.41421],
and
.. math:: [2.41421, -0.41421],
depending on the value of the :math:`\pm 1` prefactor. The eigenvalues of the original Hamiltonian
:math:`H` are
.. math:: [2.41421, -2.41421, 0.41421, -0.41421],
which are thus reproduced by the tapered Hamiltonian.
More generally, we can construct the unitary :math:`U` such that each :math:`\mu_i` term acts with a
Pauli-X operator on a set of qubits
:math:`\left \{ j \right \}, j \in \left \{ l, ..., k \right \}` where :math:`j` is the qubit label.
This guarantees that each term of the transformed Hamiltonian commutes with each of the Pauli-X
operators applied to the :math:`j`-th qubit:
.. math:: [H', X^j] = 0,
and the eigenvectors of the transformed Hamiltonian :math:`H'` are also eigenvectors of each of the
:math:`X^{j}` operators. Then we can factor out all of the :math:`X^{j}` operators from the
transformed Hamiltonian and replace them with their eigenvalues :math:`\pm 1`. This gives us a
set of tapered Hamiltonians depending on which eigenvalue :math:`\pm 1` we chose for each of the
:math:`X^{j}` operators. For instance, in the case of two tapered qubits, we have four eigenvalue
sectors: :math:`[+1, +1]`, :math:`[-1, +1]`, :math:`[+1, -1]`, :math:`[-1, -1]`. In these tapered
Hamiltonians, the set of :math:`\left \{ j \right \}, j \in \left \{ l, ..., k \right \}` qubits
are eliminated. For tapered molecular Hamiltonians, it is possible to determine the optimal sector
of the eigenvalues that corresponds to the ground state. This is explained in more detail in the
following sections.
The unitary operator :math:`U` can be constructed as a
`Clifford <https://en.wikipedia.org/wiki/Clifford_gates>`__ operator [#bravyi2017]_
.. math:: U = \Pi_j \left [\frac{1}{\sqrt{2}} \left (X^{q(j)} + \tau_j \right) \right],
where :math:`\tau` denotes the generators of the symmetry group of :math:`H` and
:math:`X^{q}` operators act on those qubits that will be ultimately tapered off from
the Hamiltonian. The symmetry group of the Hamiltonian is defined as an Abelian group of Pauli words that commute
with each term in the Hamiltonian (excluding :math:`−I`). The
`generators <https://en.wikipedia.org/wiki/Generating_set_of_a_group>`__ of the symmetry group are
those elements of the group that can be combined, along with their inverses, to create any other
member of the group.
Let's use the qubit tapering method and obtain the ground state energy of the `Helium hydride
cation <https://en.wikipedia.org/wiki/Helium_hydride_ion>`__ :math:`\textrm{HeH}^+`.
Tapering the molecular Hamiltonian
----------------------------------
In PennyLane, a :doc:`molecular Hamiltonian <tutorial_quantum_chemistry>` can be created by specifying the atomic symbols and
coordinates.
"""
import pennylane as qml
from pennylane import numpy as np

symbols = ["He", "H"]
geometry = np.array([[0.00000000, 0.00000000, -0.87818361],
[0.00000000, 0.00000000, 0.87818362]])

H, qubits = qml.qchem.molecular_hamiltonian(symbols, geometry, charge=1)
print(H)

##############################################################################
# This Hamiltonian contains 27 terms where each term acts on up to four qubits.
#
# We can now obtain the symmetry generators and the :math:`X^{j}` operators that are
# used to construct the unitary :math:`U` operator that transforms the :math:`\textrm{HeH}^+`
# Hamiltonian. In PennyLane, these are constructed by using the
# :func:`~.pennylane.symmetry_generators` and :func:`~.pennylane.paulix_ops` functions.

generators = qml.symmetry_generators(H)
paulixops = qml.paulix_ops(generators, qubits)

for idx, generator in enumerate(generators):
print(f'generator {idx+1}: {generator}, paulix_op: {paulixops[idx]}')

##############################################################################
# Once the operator :math:`U` is applied, each of the Hamiltonian terms will act on the qubits
# :math:`q_2, q_3` either with the identity or with a Pauli-X operator. For each of these qubits,
# we can simply replace the Pauli-X operator with one of its eigenvalues :math:`+1` or :math:`-1`.
# This results in a total number of :math:`2^k` Hamiltonians, where :math:`k` is the number of
# tapered-off qubits and each Hamiltonian corresponds to one eigenvalue sector. The optimal sector
# corresponding to the ground-state energy of the molecule can be obtained by using the
# :func:`~.pennylane.qchem.optimal_sector` function.


n_electrons = 2
paulix_sector = qml.qchem.optimal_sector(H, generators, n_electrons)
print(paulix_sector)

##############################################################################
# The optimal eigenvalues are :math:`-1, -1` for qubits :math:`q_2, q_3`, respectively. We can now
# build the tapered Hamiltonian with the :func:`~.pennylane.taper` function which
# constructs the operator :math:`U`, applies it to the Hamiltonian and finally tapers off the
# qubits :math:`q_2, q_3` by replacing the Pauli-X operators acting on those qubits with the optimal
# eigenvalues.

H_tapered = qml.taper(H, generators, paulixops, paulix_sector)
print(H_tapered)

##############################################################################
# The new Hamiltonian has only 9 non-zero terms acting on only 2 qubits! We can verify that the
# original and the tapered Hamiltonian both give the correct ground state energy of the
# :math:`\textrm{HeH}^+` cation, which is :math:`-2.862595242378` Ha computed with the full
# configuration interaction (FCI) method. In PennyLane, it's possible to build a sparse matrix
# representation of Hamiltonians. This allows us to directly diagonalize them to obtain exact values
# of the ground-state energies.

H_sparse = qml.SparseHamiltonian(qml.utils.sparse_hamiltonian(H), wires=all)
H_tapered_sparse = qml.SparseHamiltonian(qml.utils.sparse_hamiltonian(H), wires=all)

print("Eigenvalues of H:\n", qml.eigvals(H_sparse, k=16))
print("\n Eigenvalues of H_tapered:\n", qml.eigvals(H_tapered_sparse, k=4))

##############################################################################
# Tapering the reference state
# ----------------------------
# The ground state Hartree-Fock energy of :math:`\textrm{HeH}^+` can be computed by directly
# applying the Hamiltonians to the Hartree-Fock state. For the tapered Hamiltonian, this requires
# transforming the Hartree-Fock state with the same symmetries obtained for the original
# Hamiltonian. This reduces the number of qubits in the Hartree-Fock state to match that of the
# tapered Hamiltonian. It can be done with the :func:`~.pennylane.qchem.taper_hf` function.

state_tapered = qml.qchem.taper_hf(
generators, paulixops, paulix_sector, n_electrons, len(H.wires))
print(state_tapered)

##############################################################################
# Recall that the original Hartree-Fock state for the :math:`\textrm{HeH}^+` cation is
# :math:`[1 1 0 0]`. We can now generate the qubit representation of these states and compute the
# Hartree-Fock energies for each Hamiltonian.

dev = qml.device('default.qubit', wires=H.wires)
@qml.qnode(dev)
def circuit():
qml.BasisState(np.array([1, 1, 0, 0]), wires=H.wires)
return qml.state()
qubit_state = circuit()
HF_energy = qubit_state.T @ qml.utils.sparse_hamiltonian(H).toarray() @ qubit_state
print(f'HF energy: {np.real(HF_energy):.8f} Ha')

dev = qml.device('default.qubit', wires=H_tapered.wires)
@qml.qnode(dev)
def circuit():
qml.BasisState(np.array([1, 1]), wires=H_tapered.wires)
return qml.state()
qubit_state = circuit()
HF_energy = qubit_state.T @ qml.utils.sparse_hamiltonian(H_tapered).toarray() @ qubit_state
print(f'HF energy (tapered): {np.real(HF_energy):.8f} Ha')

##############################################################################
# These values are identical to the reference Hartree-Fock energy :math:`-2.8543686493` Ha.
#
# VQE simulation
# --------------
# Finally, we can use the tapered Hamiltonian and the tapered reference state to perform a VQE
# simulation and compute the ground-state energy of the :math:`\textrm{HeH}^+` cation. We use the
# tapered Hartree-Fock state to build a circuit that prepares an entangled state by applying Pauli
# rotation gates [#ryabinkin2018]_ since we cannot use the typical particle-conserving gates
# with the tapered state.

dev = qml.device('default.qubit', wires=H_tapered.wires)
@qml.qnode(dev)
def circuit(params):
qml.BasisState(state_tapered, wires=H_tapered.wires)
qml.PauliRot(params[2], 'Y', wires=[0])
qml.PauliRot(params[1], 'Y', wires=[1])
qml.PauliRot(params[0], 'YX', wires=[0, 1])
return qml.expval(H_tapered)

##############################################################################
# We define an optimizer and the initial values of the circuit parameters and optimize the circuit
# parameters with respect to the ground state energy.

optimizer = qml.GradientDescentOptimizer(stepsize=0.5)
params = np.zeros(3)

for n in range(1, 20):
params, energy = optimizer.step_and_cost(circuit, params)
if n % 2:
print(f'n: {n}, E: {energy:.8f} Ha, Params: {params}')

##############################################################################
# The computed energy matches the FCI energy, :math:`-2.862595242378` Ha, while the number of qubits
# and the number of Hamiltonian terms are significantly reduced with respect to their original
# values.
#
# Conclusions
# -----------
# Molecular Hamiltonians possess symmetries that can be leveraged to reduce the number of qubits
# required in quantum computing simulations. This tutorial introduces a PennyLane functionality that
# can be used for qubit tapering based on :math:`\mathbb{Z}_2` symmetries. The procedure includes
# obtaining tapered Hamiltonians and tapered reference states that can be used in variational
# quantum algorithms such as VQE.
#
# References
# ----------
#
# .. [#bravyi2017]
#
# Sergey Bravyi, Jay M. Gambetta, Antonio Mezzacapo, Kristan Temme, "Tapering off qubits to
# simulate fermionic Hamiltonians". `arXiv:1701.08213 <https://arxiv.org/abs/1701.08213>`__
#
# .. [#setia2019]
#
# Kanav Setia, Richard Chen, Julia E. Rice, Antonio Mezzacapo, Marco Pistoia, James Whitfield,
# "Reducing qubit requirements for quantum simulation using molecular point group symmetries".
# `arXiv:1910.14644 <https://arxiv.org/abs/1910.14644>`__
#
# .. [#ryabinkin2018]
#
# Ilya G. Ryabinkin, Tzu-Ching Yen, Scott N. Genin, Artur F. Izmaylov, "Qubit coupled-cluster
# method: A systematic approach to quantum chemistry on a quantum computer".
# `arXiv:1809.03827 <https://arxiv.org/abs/1809.03827>`__
#
# About the author
# ----------------

##############################################################################
#.. bio:: Soran Jahangiri
# :photo: ../_static/Soran.png
#
# Soran Jahangiri is a quantum chemist working at Xanadu. His work is focused on developing and implementing quantum algorithms for chemistry applications.
6 changes: 6 additions & 0 deletions demos_quantum-chemistry.rst
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,12 @@ Quantum chemistry is one the leading application areas of quantum computers. Mas
:description: :doc:`demos/vqe_parallel`
:tags: chemistry

.. customgalleryitem::
:tooltip: Qubit tapering with symmetries
:figure: demonstrations/qubit_tapering/qubit_tapering.png
:description: :doc:`demos/tutorial_qubit_tapering`
:tags: chemistry


:html:`</div></div><div style='clear:both'>`

Expand Down

0 comments on commit cda04ac

Please sign in to comment.