Skip to content

Commit

Permalink
Fix Evolution.generator (#3796)
Browse files Browse the repository at this point in the history
* 🐛 fix (Evolution): Fix generator.

* 🐛 fix (Evolution): Cast values to real.

* 🐛 fix (Evolution): Cast values to real.

* 🐛 fix (Exp): Use qml.math.

* 🐛 fix (Exp): Use qml.math.

* ⏪ revert (Exp)

* 🐛 fix (Exp): Set has_matrix to False when using autograd. Remove Exp and Evolution from DefaultQubit.

* Update pennylane/ops/op_math/exp.py

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

* Update pennylane/ops/op_math/exp.py

* changelog

* Undeprecate `ApproxTimeEvolution` (#3797)

* readd ApproxTimeEvolution

* More

* Full deprecation

* Fix (#3801)

* Register `SpecialUnitary` operation with `DefaultMixed` and `NullQubit` (#3651)

* Add SpecialUnitary, its utilities and tests

* changelog

* whitespace

* docstrings

* empty

* device test

* black

* linting and test coverage

* registered in default qubit and added tests

* registered in default mixed and added tests

* black

* changelog

* register with null qubit, add test, lint null qubit test as bonus

* black

* update docstring

* revert some changes/continued merge

* remove old namespace dependencies

* black

* lint

* docstring typo

* lint

* remove inverse testing

* change reference

* revert addition

* ⏪ revert (Exp): Add Exp back to QubitDevice.observables.

* ⏪ revert (master): Revert unwanted changes from master branch.

* ⏪ revert (Evolution): Re-add removed code from Evolution.

* ✏️ chore (changelog): Change changelog entry.

* add ParametrizedEvolution to mixed device (#3794)

* add ParametrizedEvolution to mixed device

* black test

* make test more broad

* black tests

* Update tests/pulse/test_parametrized_evolution.py

Co-authored-by: David Wierichs <david.wierichs@xanadu.ai>

* sparse implementation

* Revert "Merge branch 'evolvemixed' of https://github.com/PennyLaneAI/pennylane into evolvemixed"

This reverts commit e653b50, reversing
changes made to bb2d3d6.

* Revert "sparse implementation"

This reverts commit bb2d3d6.

* review comment

* trigger ci

---------

Co-authored-by: David Wierichs <david.wierichs@xanadu.ai>

* little touchups while reviewing changes in 0.29 (#3809)

* Update pulse module documentation examples (#3805)

* init

* spacing

* windows parsing in rect()

* revert jnp.array parameters, doc typo

* test docstring, remove interface warning

* doc fix?

* lint

---------

Co-authored-by: lillian542 <38584660+lillian542@users.noreply.github.com>

* Raise error when using `qml.probs` in the computational basis with non-commuting observables (#3811)

* 🐛 fix (MeasurementProcess): Change if a measurement is using the computational basis.

* 🎨 style (MeasurementProcess): Remove useless properties.

* 🧪 tests (qscript): Fix tests.

* 🧪 tests (measurements): Fix tests.

* 🧪 tests (return_types): Fix tests.

* 🧪 tests (tape): Fix tests.

* 🧪 tests (circuit_graph): Fix tests.

* 🧪 tests (return_types): Fix tests.

* 🧪 tests (return_types): Fix tests.

* ✏️ chore (changelog): Add changelog entry.

* 🔧 refactor (MeasurementProcess): Change method name.

* 🔧 refactor (MeasurementProcess): Change method name.

* 🔧 refactor (MeasurementProcess): Change method name.

* Update pennylane/tape/qscript.py

Co-authored-by: Romain Moyard <rmoyard@gmail.com>

---------

Co-authored-by: Romain Moyard <rmoyard@gmail.com>

* docs: consistent naming of tape instance in docstr (#3795)

as title states. nothing fancy here

* Documentation fixes (#3808)

* fix some type hints

* minor docstring fixes

* minor docstring changes

* fix rendering issue

* Update pennylane/pulse/parametrized_hamiltonian.py

---------

Co-authored-by: Matthew Silverman <matthews@xanadu.ai>

* Fix docs of new features (#3818)

* ✏️ chore (changelog): Fix changelog entry.

* 📝 docs (BasisRotation): Fix docstrings.

* 📝 docs (xyx_decompositions): Fix docstring.

* 📝 docs (metric_tensor): Fix docstring.

* Minor fixes for v0.29 release (#3815)

* Added fixes for auto documentation

* Added minor doc changes for hadamard gradient

* Added fix for queuing diagonalizing gates

* Small fix to IsingZZ doc

* Fixed doc for max_entropy

---------

Co-authored-by: Albert Mitjans <a.mitjanscoma@gmail.com>

* Copy one-electron integrals inside `_chemist_transform` (#3816)

* fix inplace one-int issue in `_chemist_transform`

* add test to assert no inplace manipulation happens

* happy black

* Fix equal for measurements with observables, measurement process repr, Hermitian casting fix (#3820)

* equal with measurement processes

* not change math.asarray for autograd

* not change math.asarray for autograd

* Update doc/releases/changelog-0.29.0.md

* add coverage for measurements of observables that are equal but have different wire orders

* break up docstrings, test hermitian case

* Update exp.py

fixing docs typo in RC branch

* Docstring fixes for unchanged functions (#3824)

* Added docstring fixes for old functions

* Updated more docs

* Changing functions

* Fixed more docstrings

* Added changes to more function docs

* Fix to build sphinx

* Addressing PR comments

* fix docker link; remove old inv comment (#3823)

* Device api doc typo fixes (#3819)

* tiny doc edits

* Update pennylane/devices/experimental/device_api.py

Co-authored-by: Matthew Silverman <matthews@xanadu.ai>

* seealso

* Update pennylane/devices/experimental/device_api.py

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

---------

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

* un-deprecate make_tape (#3807)

* Update changelog (#3719)

* Update changelog-dev.md

* Remove

* Move pulse

* Update title

* pulse edits

* minor

* Absorb new additions

* Reorder improvements

* Add new section

* Add commas to contributors section

* Remove order requirement

* Rearrange

* Simplify pulse section

* Improve

* Improve

* Improve

* Improve

* Add additional section

* Update doc/releases/changelog-dev.md

* brackets around PR numbers

Co-authored-by: Tom Bromley <49409390+trbromley@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Isaac De Vlugt <34751083+isaacdevlugt@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Isaac De Vlugt <34751083+isaacdevlugt@users.noreply.github.com>

* Add suggestions

Co-authored-by: Isaac De Vlugt <34751083+isaacdevlugt@users.noreply.github.com>

* Update doc/releases/changelog-dev.md

* qml.

* removed TODO markers

* deps and breaking changes

* deps and breaking changes

* Move addtion

* Apply suggestions from code review

* Update

* Update

* Update

* Update

* Update

* Update

* Apply suggestions from code review

* Update

* Update

* Update

* Update

* Add for Evolve

* Add

* Apply suggestions from code review

Co-authored-by: Korbinian Kottmann <43949391+Qottmann@users.noreply.github.com>

* Fix code

* minor

* minor

* minor

* minor

* minor

* minor

* minor

* minor

* minor

* minor

* Tom

* Add entry

* Update name

* Update

* Rearrange for auto

* Typo

* Remove ApproxTimeEvolution deprecation

* Typo

* minor

* minor

* Fix warning

* Maybe fix warning

* Add a few entries

* Add breaking change

* Maybe fix error

* Maybe fix warning

* minor

* minor

* add details to changelog for marginal_prob bug (#3821)

* Add subsection

* Update

* Update

* Add

---------

Co-authored-by: Isaac De Vlugt <isaacdevlugt@gmail.com>
Co-authored-by: Isaac De Vlugt <34751083+isaacdevlugt@users.noreply.github.com>
Co-authored-by: Korbinian Kottmann <43949391+Qottmann@users.noreply.github.com>
Co-authored-by: Matthew Silverman <matthews@xanadu.ai>

* Fix sign expand (#3814)

* Tape queue to script

* Fix doc

* QNode example

* Apply suggestions from code review

* Apply suggestions from code review

Co-authored-by: Matthew Silverman <matthews@xanadu.ai>

* use new pauli module

---------

Co-authored-by: Matthew Silverman <matthews@xanadu.ai>
Co-authored-by: Albert Mitjans <a.mitjanscoma@gmail.com>

* Fix (#3828)

* Remove warning. (#3829)

* Update deprecations page (#3830)

* Update grouping

* Update seed recipes

* Update QubitDevice.statistics

* Raise error if JAX or jaxlib are 0.4.4 (#3813)

* Raise error for 0.4.4 jaxlib and jax

* add tests

* black for tests

* add jax mark for test

* Remove jaxlib check

Co-authored-by: Filippo Vicentini <filippovicentini@gmail.com>

* More detailed error msg

Co-authored-by: Filippo Vicentini <filippovicentini@gmail.com>

* Update tests

* Tests and black

* Typo

* Change

---------

Co-authored-by: Filippo Vicentini <filippovicentini@gmail.com>
Co-authored-by: Romain Moyard <rmoyard@gmail.com>

* 0.29 changelog updates (#3835)

* Update codeblock type

* Update example

* Wording

* Add CTA

* Update wire number

* Remove wire

* Update wording

* Add

* Fix imports

* Add deprecation

* Remove tilde

* Merge data and other improvements

* Typo

* Typo

* Typo

* Emojis

* Remove whitespace

* remove duplicate entries

* Apply suggestions from code review

Co-authored-by: Matthew Silverman <matthews@xanadu.ai>

---------

Co-authored-by: Matthew Silverman <matthews@xanadu.ai>

* Docfix/circuits note gpu (#3836)

* Fix note on lightning.gpu plugin in intro/circuits.

* Update doc/releases/changelog-0.29.0.md.

---------

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

* Promote warning about vanilla version of NumPy to RST warning. (#3838)

* Promote warning about vanilla version of NumPy from bold format to RST warning. Make Autograd case uniform.

* Update changlog.

* fix strings that wrap around without a space (#3837)

* fix strings that wrap around without a space

* missed one

* always use trailing whitespace instead of leading

---------

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

* Use default.qubit.jax instead of default.qubit (#3839)

* Use default.qubit.jax instead of default.qubit

* Apply suggestions from code review

Taking the liberty to commit these changes here due to time sensitivity

* Revert "Apply suggestions from code review
"

This reverts commit d457ffb.

---------

Co-authored-by: Korbinian Kottmann <43949391+Qottmann@users.noreply.github.com>
Co-authored-by: Korbinian Kottmann <Korbinian.Kottmann@gmail.com>

* Update header images (#3827)

Co-authored-by: Tom Bromley <49409390+trbromley@users.noreply.github.com>

* Doc update

* Update master

* Update pennylane/_version.py

* Apply suggestions from code review

* Readd repr

* Replace np by math

---------

Co-authored-by: Christina Lee <christina@xanadu.ai>
Co-authored-by: albi3ro <chrissie.c.l@gmail.com>
Co-authored-by: Romain Moyard <rmoyard@gmail.com>
Co-authored-by: David Wierichs <david.wierichs@xanadu.ai>
Co-authored-by: Korbinian Kottmann <43949391+Qottmann@users.noreply.github.com>
Co-authored-by: Matthew Silverman <matthews@xanadu.ai>
Co-authored-by: lillian542 <38584660+lillian542@users.noreply.github.com>
Co-authored-by: Mudit Pandey <mudit.pandey@xanadu.ai>
Co-authored-by: Utkarsh <utkarshazad98@gmail.com>
Co-authored-by: Nathan Killoran <co9olguy@users.noreply.github.com>
Co-authored-by: Tom Bromley <49409390+trbromley@users.noreply.github.com>
Co-authored-by: Isaac De Vlugt <isaacdevlugt@gmail.com>
Co-authored-by: Isaac De Vlugt <34751083+isaacdevlugt@users.noreply.github.com>
Co-authored-by: Filippo Vicentini <filippovicentini@gmail.com>
Co-authored-by: Vincent Michaud-Rioux <vincentm@nanoacademic.com>
Co-authored-by: Korbinian Kottmann <Korbinian.Kottmann@gmail.com>
  • Loading branch information
17 people authored Mar 23, 2023
1 parent ed4b440 commit e6f92ef
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 7 deletions.
5 changes: 4 additions & 1 deletion doc/releases/changelog-dev.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,9 @@

<h3>Bug fixes</h3>

* Fixed a bug where calling `Evolution.generator` with `coeff` being a complex ArrayBox raised an error.
[(#3796)](https://github.com/PennyLaneAI/pennylane/pull/3796)

* `MeasurementProcess.hash` now uses the hash property of the observable. The property now depends on all
properties that affect the behaviour of the object, such as `VnEntropyMP.log_base` or the distribution of wires between
the two subsystems in `MutualInfoMP`.
Expand All @@ -158,7 +161,7 @@
to work with non-numeric wire labels. `sum_expand` should now return correct results and not treat some products as the same
operation.
[(#3898)](https://github.com/PennyLaneAI/pennylane/pull/3898)

* Fixed bug where the coefficients where not ordered correctly when summing a `ParametrizedHamiltonian`
with other operators.
[(#3749)](https://github.com/PennyLaneAI/pennylane/pull/3749)
Expand Down
13 changes: 9 additions & 4 deletions pennylane/ops/op_math/evolution.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
import warnings
from warnings import warn

import numpy as np

import pennylane as qml
from pennylane import math
from pennylane.operation import GeneratorUndefinedError
Expand Down Expand Up @@ -88,6 +86,13 @@ def __init__(self, generator, param=1, num_steps=None, do_queue=True, id=None):
super().__init__(generator, coeff=1j * param, num_steps=num_steps, do_queue=do_queue, id=id)
self._data = [param]

def __repr__(self):
return (
f"Evolution({self.coeff} {self.base})"
if self.base.arithmetic_depth > 0
else f"Evolution({self.coeff} {self.base.name})"
)

@property
def param(self):
"""A real coefficient with ``1j`` factored out."""
Expand All @@ -114,7 +119,7 @@ def simplify(self):
# pylint: disable=arguments-renamed, invalid-overridden-method
@property
def has_generator(self):
return not np.real(self.coeff)
return not qml.math.real(self.coeff)

def generator(self):
r"""Generator of an operator that is in single-parameter-form.
Expand All @@ -134,7 +139,7 @@ def generator(self):
"""
if not self.base.is_hermitian:
warn(f"The base {self.base} may not be hermitian.")
if np.real(self.coeff):
if qml.math.real(self.coeff):
raise GeneratorUndefinedError(
f"The operator coefficient {self.coeff} is not imaginary; the expected format is exp(ixG)."
f"The generator is not defined."
Expand Down
8 changes: 6 additions & 2 deletions pennylane/ops/op_math/exp.py
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,9 @@ def _recursive_decomposition(self, base: Operator, coeff: complex):
new_g = qml.map_wires(g, dict(zip(g.wires, base.wires)))

if qml.equal(base, new_g) and math.real(coeff) == 0:
coeff *= -1j / c # cancel the coefficients added by the generator
coeff = math.real(
-1j / c * coeff
) # cancel the coefficients added by the generator
return [op_class(coeff, g.wires)]

if qml.pauli.is_pauli_word(base) and math.real(coeff) == 0:
Expand All @@ -330,7 +332,9 @@ def _pauli_rot_decomposition(base: Operator, coeff: complex):
Returns:
List[Operator]: list containing the PauliRot operator
"""
coeff = 2j * coeff # need to cancel the coefficients added by PauliRot and Ising gates
coeff = math.real(
2j * coeff
) # need to cancel the coefficients added by PauliRot and Ising gates
pauli_word = qml.pauli.pauli_word_to_string(base)
if pauli_word == "I" * base.num_wires:
return []
Expand Down
19 changes: 19 additions & 0 deletions tests/ops/op_math/test_evolution.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,25 @@ def test_data(self):
assert op.coeff == 1j * op.data[0]
assert op.param == op.data[0]

def test_repr_paulix(self):
"""Test the __repr__ method when the base is a simple observable."""
op = Evolution(qml.PauliX(0), 3)
assert repr(op) == "Evolution(3j PauliX)"

def test_repr_tensor(self):
"""Test the __repr__ method when the base is a tensor."""
t = qml.PauliX(0) @ qml.PauliX(1)
isingxx = Evolution(t, 0.25)

assert repr(isingxx) == "Evolution(0.25j PauliX(wires=[0]) @ PauliX(wires=[1]))"

def test_repr_deep_operator(self):
"""Test the __repr__ method when the base is any operator with arithmetic depth > 0."""
base = qml.S(0) @ qml.PauliX(0)
op = Evolution(base, 3)

assert repr(op) == "Evolution(3j S(wires=[0]) @ PauliX(wires=[0]))"

@pytest.mark.parametrize(
"op,decimals,expected",
[
Expand Down

0 comments on commit e6f92ef

Please sign in to comment.