Skip to content

Commit

Permalink
Merge 0.25 (#2958)
Browse files Browse the repository at this point in the history
* Update the Hermiticity check of `qml.Hermitian` to use `qml.math` (#2895)

* fix

* changelog

* lint

* important typo fix (#2901)

* test lightning (#2903)

* Update the readme and PennyLane Logo (#2912)

* Update PennyLane Logo

* remove wordmark from readme

* update citation

* et al

* Update the logo

* replace with svg

* Add warning to `qml.cond` docs about unsupported cases (#2883)

* docs

* docs

* `qml.simplify` can reduce number of rotation parameters (#2905)

* move rotation simplify into op method

* add additional example

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

* seed and flaky (#2917)

* Fixes a bug where kUpCCGSD wasn't working with the parameter-shift rule (#2913)

* First commit

* Added PR link

* More accurate description in changelog

* Test PS rule against backprop

* Fixed error with test

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

* Add module documentation for `ops` (#2730)

* Update phase decomp test (#2697)

* Update interfaces.rst (#2698)

* Allow templates to be decomposed (#2704)

* Allow templates to be decomposed

* Add TODO to clean

* Update changelog

* Fix pylint error

Co-authored-by: Edward Jiang <edward.jiang@resident.xanadu.ai>

* Deprecate `qml.ExpvalCost` (#2571)

* Add UserWarning to ExpvalCost and catch said warning in all tests containing ExpvalCost

* added warning in doc string

* added to the changelog in 0.23.1

* Update pennylane/vqe/vqe.py

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

* Update pennylane/vqe/vqe.py

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

* Update pennylane/vqe/vqe.py

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

* Update pennylane/vqe/vqe.py

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

* Update tests/optimize/test_qng.py

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

* Update tests/qchem/of_tests/test_convert.py

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

* Update tests/test_qaoa.py

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

* Update tests/test_vqe.py

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

* Update tests/transforms/test_adjoint_metric_tensor.py

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

* Update tests/optimize/test_optimize_shot_adapative.py

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

* overlooked to catch the new warning in test_dipole_of

* switched to the right changelog

Co-authored-by: Qottmann <qottmann@LT0290.ad.icfo.net>
Co-authored-by: Josh Izaac <josh146@gmail.com>
Co-authored-by: Romain Moyard <rmoyard@gmail.com>

* Update JAX jit forward mode forward evaluation (#2700)

* update logic

* update logic

* test case

* test assertion

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

* Improve ising gates documentation (#2711)

* Update doc

* Update

* Update pennylane/ops/qubit/parametric_ops.py

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

* Apply suggestions from code review

* CHange

* Typo

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

* Support classical fisher gradients when using Autograd (#2688)

* Support classical fisher gradients when using Autograd

* Update doc/releases/changelog-dev.md

* added test for jax and autograd

* black

* added xfail tests

* added comment in doc string about torch and tf not diffable

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

* Support classical Fisher gradients when using TF and torch (#2710)

* Support classical fisher gradients when using Autograd

* Update doc/releases/changelog-dev.md

* added test for jax and autograd

* black

* added xfail tests

* added comment in doc string about torch and tf not diffable

* Fix differentiability for tensorflow and torch

* Remove warning

* Fix TF not iterable error

* Trigger CI

* added example in doc-string about diffability

* close-block becomes code-block lol

* Update pennylane/qinfo/transforms.py

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

* Change pytest mark

Co-authored-by: Josh Izaac <josh146@gmail.com>
Co-authored-by: Qottmann <korbinian.kottmann@gmail.com>
Co-authored-by: Romain Moyard <rmoyard@gmail.com>

* Remove `hardware` argument in `qml.qinfo.quantum_fisher` (#2695)

* removed hardware argument, adapted doc string

* updated tests

* black

* Update pennylane/qinfo/transforms.py

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

* Update pennylane/qinfo/transforms.py

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

* add default.qubit condition and change doc string

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

* Add `qinfo` measurements in supported configurations docs (#2712)

* Add documentation for new qinfo measurements

* Add docs for finite diff

* Fix JAX tests

* Change param shift to red

* Move entropy param shift tests

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

* Use access_state (#2719)

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

* Update docs v0.24 (#2724)

* private func has no indices arg

* update the circuit name in the example

* reduced_dm doc update

* correct Hamiltonian creation for classical Fisher

* Delete exactly one space from reduced_dm docstring to correct rendering

* Update outputting quantum_fisher example

* Move summary to start (#2727)

* add ops module section

* only include functions and op_math

* added weights initialization example (#2735)

* Wires not updated for a hamiltonian with in-place addition (#2738)

* fixed hamiltonian wire bug

* changelog

* try other way

* Cleanup docs (#2736)

* Documentation changes for `batch_partial` (#2737)

* Update docs

* Add double backticks

* Add other backtick :xd:

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

* Fix sphinx class/method links (#2729)

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

* trying something else

* Fix rendering of matrix rep of ECR (#2741)

* fix rendering of matrix rep of ECR

* lint

* trigger ci

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

* Fix doc quantum information and ising (#2732)

* Ising doc

* Move entropy test

* Math doc

* Measurement doc

* qinfo doc

* Update pennylane/qinfo/transforms.py

Co-authored-by: Edward Jiang <34989448+eddddddy@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Edward Jiang <34989448+eddddddy@users.noreply.github.com>

* Update pennylane/math/quantum.py

* Update

* Fix kwargs for fidelity (#2740)

* update

* Typo

* Update pennylane/qinfo/transforms.py

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

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

* Reduced dm

* Apply suggestions from code review

Co-authored-by: Edward Jiang <34989448+eddddddy@users.noreply.github.com>

* remove reduce dm

Co-authored-by: Edward Jiang <34989448+eddddddy@users.noreply.github.com>
Co-authored-by: Christina Lee <christina@xanadu.ai>

* hope

* Add quantum info measurements to introduction doc page (#2734)

* add quantum info measurements to introduction page

* minor doc fixes

* more minor fixes

* revert kwargs change

* Apply suggestions from code review

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

* maybe this time

* probably not going to work but worth a try

* Apply suggestions from code review

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

* update with master

* updates

* merge something

* update docstring

* line length problem

* fix controlled signature

* fix s_prod

* add control class notes

* update docs for Sprod and Sum

* typo

* small fix

* fixing docs

* added pragma no-cover to signature property

* Apply suggestions from code review

* clean up

* fix sprod demo

* add info to quick start operations guide

* typo

* added example

* re-link top level imports to prevent duplication of docstring pages generated by sphinx

* typo

* change constructor imports to toplevel

* Apply suggestions from code review

* add equal to ops.functions docstring

* Update doc/introduction/operations.rst

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

* Update pennylane/ops/op_math/controlled_class.py

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

* Update pennylane/ops/op_math/sum.py

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

* lint

Co-authored-by: antalszava <antalszava@gmail.com>
Co-authored-by: Edward Jiang <34989448+eddddddy@users.noreply.github.com>
Co-authored-by: Edward Jiang <edward.jiang@resident.xanadu.ai>
Co-authored-by: Korbinian Kottmann <43949391+Qottmann@users.noreply.github.com>
Co-authored-by: Qottmann <qottmann@LT0290.ad.icfo.net>
Co-authored-by: Josh Izaac <josh146@gmail.com>
Co-authored-by: Romain Moyard <rmoyard@gmail.com>
Co-authored-by: Qottmann <korbinian.kottmann@gmail.com>
Co-authored-by: Jay Soni <jbsoni@uwaterloo.ca>
Co-authored-by: David Ittah <dime10@users.noreply.github.com>

* Fix check batching bug (#2900)

* check batching only if batching supported

* Update doc/releases/changelog-0.25.0.md

* just change op arithmetic properties

* just raise errors

* Update pennylane/operation.py

* modify has_matrix and matrix

* remove test

* Update tests/ops/op_math/test_controlled_op.py

* Update tests/ops/op_math/test_sprod.py

Co-authored-by: David Wierichs <davidwierichs@gmail.com>

* prod tests, controlled name

* more interface tests

Co-authored-by: David Wierichs <davidwierichs@gmail.com>

* Update development guide to explain `dev.stopping.condition` (#2925)

* update developer docs to reflect default qubit change

* typo

* Update doc/development/adding_operators.rst

* add code examples

* Fix test randomness for `ShotAdaptiveOptimizer` (#2929)

* return types

* Update test

* Typo

* State finite shots warn (#2918)

* first draft to gauge test failures

* skip config tests when finite shots and state based return

* skip tape shape test cases

* device test

* updated device test

* new return types tests

* remove errors, catch the warnings

* changelog

* run tests

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

* Add a test for logic that accidentally got in untested (#2930)

* add test

* Trigger CI

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

* Fix symbolic `Controlled` operator documentation (#2934)

* Minor documentation fixes (#2933)

* native instead of propriertary

* misc documentation fixes

* Update doc/introduction/measurements.rst

* remove do_queue from adjoint docstring

* docs: 📝 Fix docstring. (#2941)

* Fix-docs (#2942)

* docs: 📝 Fix docstring.

* docs: 📝 Fix docstring.

* Set is_sampled to True when using Counts return type (#2928)

* fix (Tape): 🐛 Set is_sampled to True when using Counts return type.

* fix (Device): 🐛 Fix Counts check.

* test: 🧪 Adapt tests.

* chore (changelog): ✏️ Add feature to changelog.

* test: 🧪 Delete duplicated import.

* test: 🧪 Add test.

* Update doc/releases/changelog-0.25.0.md

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

Co-authored-by: Jay Soni <jbsoni@uwaterloo.ca>
Co-authored-by: Romain Moyard <rmoyard@gmail.com>
Co-authored-by: antalszava <antalszava@gmail.com>

* Modify resource docs (#2944)

* `qml.equal` considers in-place inversion. (#2947)

* equal considers inversion

* Update doc/releases/changelog-0.25.0.md

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

* Fix docker & update pypi uploader (#2936)

* return types

* Typoo

* Typo

* Update uploader

* needs update

* Return tests.

* typoo

* update examples for prod (#2948)

* Update `qml.math.allclose` to work for trainable Torch tensors (motivated by `qml.equal`) (#2937)

* docs updates; fix qml.equal Torch Runtime Error issue for requires_grad=True

* revert tests/math/test_functions.py

* test allclose with trainable Torch Tensor

* revert removing a test; update tests based on review

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

* Update `qml.Flipsign` docs example (#2949)

* formatting the flipsign example

* example return type

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

* Release notes `v0.25.0` (#2902)

* return types

* Typo

* Update doc/releases/changelog-0.25.0.md

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

* Suggestion form Antal

* Update doc/releases/changelog-0.25.0.md

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

* Suggestions

* chore (changelog): ✏️ Fix PR link.

* Moved new return type into another new feature section

* Minor

* Minor

* Updated Op-Arithmetic changelog

* Op arithmetic and re-did previous commits that were undone

* Moved item to improvements

* Controlled class feature shuffled, code example added

* Minor

* Double check names and PRs

* minor

* stopping condition breaking change

* Minor typos and shuffled one entry into Op arithmetic

* Removed hyperlinks to docs for formatting

* Apply suggestions from Josh's code review

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

* add details for hf deprecation

* Suggestions from Josh's review

* minor

* Simpler PS broadcast example

* Minor

* Fix broken link

* Check examples new features

* Flipsign

* Image update for param shift broadcast speedup

* Controlled update

* Minor change to code example for FirstQuantization

* Minor

* Controlled entry

* Josh's suggestion

* Apply suggestions from Josh's code review

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

Co-authored-by: antalszava <antalszava@gmail.com>
Co-authored-by: Isaac De Vlugt <34751083+isaacdevlugt@users.noreply.github.com>
Co-authored-by: AlbertMitjans <a.mitjanscoma@gmail.com>
Co-authored-by: Isaac De Vlugt <isaacdevlugt@gmail.com>
Co-authored-by: Jay Soni <jbsoni@uwaterloo.ca>
Co-authored-by: albi3ro <chrissie.c.l@gmail.com>
Co-authored-by: Josh Izaac <josh146@gmail.com>
Co-authored-by: soranjh <soranjh@yahoo.com>

* Doc for `enable_return` and `disable_return` (#2950)

* return types

* Add doc

* typo

* Update pennylane/return_types.py

* Typo

* Update

* Typo

* Update pennylane/return_types.py

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

* Update pennylane/return_types.py

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

* Update pennylane/return_types.py

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

* New try

* Trigger CI

* replace pycon

* Apply suggestions from code review

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

* remove python

* return

* Apply suggestions from code review

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

* Warning for broadcasting and templates. (#2956)

* Add warning

* Update

* Matrix incompatible for `Hamiltonian` objects in Arithmetic Operators (#2957)

* added fix and tests

* fix sum test

* added is instance checks in class

* lint

* changelog

* Bump pl-lightning `0.25.0` (#2953)

* return types

* Add bump

* Trigger CI

* Trigger CI

* Trigger CI

Co-authored-by: antalszava <antalszava@gmail.com>
Co-authored-by: David Wierichs <davidwierichs@gmail.com>
Co-authored-by: Josh Izaac <josh146@gmail.com>
Co-authored-by: Christina Lee <christina@xanadu.ai>
Co-authored-by: Isaac De Vlugt <34751083+isaacdevlugt@users.noreply.github.com>
Co-authored-by: Edward Jiang <34989448+eddddddy@users.noreply.github.com>
Co-authored-by: Edward Jiang <edward.jiang@resident.xanadu.ai>
Co-authored-by: Korbinian Kottmann <43949391+Qottmann@users.noreply.github.com>
Co-authored-by: Qottmann <qottmann@LT0290.ad.icfo.net>
Co-authored-by: Qottmann <korbinian.kottmann@gmail.com>
Co-authored-by: Jay Soni <jbsoni@uwaterloo.ca>
Co-authored-by: David Ittah <dime10@users.noreply.github.com>
Co-authored-by: Albert Mitjans <a.mitjanscoma@gmail.com>
Co-authored-by: soranjh <40344468+soranjh@users.noreply.github.com>
Co-authored-by: Isaac De Vlugt <isaacdevlugt@gmail.com>
Co-authored-by: albi3ro <chrissie.c.l@gmail.com>
Co-authored-by: soranjh <soranjh@yahoo.com>
  • Loading branch information
18 people authored Aug 15, 2022
1 parent b904c96 commit 8bc6bff
Show file tree
Hide file tree
Showing 13 changed files with 83 additions and 5 deletions.
5 changes: 5 additions & 0 deletions doc/releases/changelog-0.25.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,8 @@
>>> circuit(np.array([0.1, 0.3, 0.2]))
tensor([0.99500417, 0.95533649, 0.98006658], requires_grad=True)
```

Currently, not all templates have been updated to support broadcasting.

* Parameter-shift gradients now allow for parameter broadcasting internally,
which can result in a significant speedup when computing gradients of
Expand Down Expand Up @@ -763,6 +765,9 @@
with another non-commuting observable.
[(#2928)](https://github.com/PennyLaneAI/pennylane/pull/2928)

* Operator Arithmetic now allows `Hamiltonian` objects to be used and produces correct matrices.
[(#2957)](https://github.com/PennyLaneAI/pennylane/pull/2957)

<h3>Contributors</h3>

This release contains contributions from (in alphabetical order):
Expand Down
7 changes: 6 additions & 1 deletion pennylane/ops/op_math/adjoint_class.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,12 @@ def has_matrix(self):
def matrix(self, wire_order=None):
if self.base.batch_size is not None:
raise qml.operation.MatrixUndefinedError
base_matrix = self.base.matrix(wire_order=wire_order)

if isinstance(self.base, qml.Hamiltonian):
base_matrix = qml.matrix(self.base, wire_order=wire_order)
else:
base_matrix = self.base.matrix(wire_order=wire_order)

return transpose(conj(base_matrix))

def decomposition(self):
Expand Down
5 changes: 4 additions & 1 deletion pennylane/ops/op_math/pow_class.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,10 @@ def label(self, decimals=None, base_label=None, cache=None):
return self.base.label(decimals, base_label, cache=cache) + z_string

def matrix(self, wire_order=None):
base_matrix = self.base.matrix()
if isinstance(self.base, qml.Hamiltonian):
base_matrix = qml.matrix(self.base)
else:
base_matrix = self.base.matrix()

if isinstance(self.z, int):
mat = qmlmath.linalg.matrix_power(base_matrix, self.z)
Expand Down
7 changes: 6 additions & 1 deletion pennylane/ops/op_math/prod.py
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,12 @@ def matrix(self, wire_order=None):
if wire_order is None:
wire_order = self.wires

mats = (expand_matrix(op.matrix(), op.wires, wire_order=wire_order) for op in self.factors)
mats = (
expand_matrix(op.matrix(), op.wires, wire_order=wire_order)
if not isinstance(op, qml.Hamiltonian)
else expand_matrix(qml.matrix(op), op.wires, wire_order=wire_order)
for op in self.factors
)
return reduce(math.dot, mats)

# pylint: disable=protected-access
Expand Down
2 changes: 2 additions & 0 deletions pennylane/ops/op_math/sprod.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,8 @@ def matrix(self, wire_order=None):
Returns:
tensor_like: matrix representation
"""
if isinstance(self.base, qml.Hamiltonian):
return self.scalar * qml.matrix(self.base, wire_order=wire_order)
return self.scalar * self.base.matrix(wire_order=wire_order)

@property
Expand Down
5 changes: 4 additions & 1 deletion pennylane/ops/op_math/sum.py
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,10 @@ def matrix(self, wire_order=None):
def matrix_gen(summands, wire_order=None):
"""Helper function to construct a generator of matrices"""
for op in summands:
yield op.matrix(wire_order=wire_order)
if isinstance(op, qml.Hamiltonian):
yield qml.matrix(op, wire_order=wire_order)
else:
yield op.matrix(wire_order=wire_order)

if wire_order is None:
wire_order = self.wires
Expand Down
4 changes: 4 additions & 0 deletions pennylane/transforms/broadcast_expand.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ def broadcast_expand(tape):
r"""Expand a broadcasted tape into multiple tapes
and a function that stacks and squeezes the results.
.. warning::
Currently, not all templates have been updated to support broadcasting.
Args:
tape (.QuantumTape): Broadcasted tape to be expanded
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"semantic-version>=2.7",
"autoray>=0.3.1",
"cachetools",
"pennylane-lightning>=0.24",
"pennylane-lightning>=0.25",
]

info = {
Expand Down
9 changes: 9 additions & 0 deletions tests/ops/op_math/test_adjoint_op.py
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,15 @@ def test_no_matrix_defined(self):
with pytest.raises(qml.operation.MatrixUndefinedError):
Adjoint(base).matrix()

def test_adj_hamiltonian(self):
"""Test that a we can take the adjoint of a hamiltonian."""
U = qml.Hamiltonian([1.0], [qml.PauliX(wires=0) @ qml.PauliZ(wires=1)])
adj_op = Adjoint(base=U) # hamiltonian = hermitian = self-adjoint
mat = adj_op.matrix()

true_mat = qml.matrix(U)
assert np.allclose(mat, true_mat)


def test_sparse_matrix():
"""Test that the spare_matrix method returns the adjoint of the base sparse matrix."""
Expand Down
9 changes: 9 additions & 0 deletions tests/ops/op_math/test_pow_op.py
Original file line number Diff line number Diff line change
Expand Up @@ -538,6 +538,15 @@ def test_matrix_wire_order(self):

assert qml.math.allclose(op_mat, compare_mat)

def test_pow_hamiltonian(self):
"""Test that a hamiltonian object can be exponentiated."""
U = qml.Hamiltonian([1.0], [qml.PauliX(wires=0)])
pow_op = Pow(base=U, z=2)
mat = pow_op.matrix()

true_mat = [[1, 0], [0, 1]]
assert np.allclose(mat, true_mat)


class TestSparseMatrix:
"""Tests involving the sparse matrix method."""
Expand Down
14 changes: 14 additions & 0 deletions tests/ops/op_math/test_prod.py
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,20 @@ def test_prod_qubit_unitary(self):
true_mat = qnp.kron(U, qnp.eye(2)) @ qnp.eye(4)
assert np.allclose(mat, true_mat)

def test_prod_hamiltonian(self):
"""Test that a hamiltonian object can be composed."""
U = qml.Hamiltonian([0.5], [qml.PauliX(wires=1)])
prod_op = Prod(qml.PauliZ(wires=0), U)
mat = prod_op.matrix()

true_mat = [
[0.0, 0.5, 0.0, 0.0],
[0.5, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, -0.5],
[0.0, 0.0, -0.5, 0.0],
]
assert np.allclose(mat, true_mat)

# Add interface tests for each interface !

@pytest.mark.jax
Expand Down
9 changes: 9 additions & 0 deletions tests/ops/op_math/test_sprod.py
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,15 @@ def test_sparse_matrix_sparse_hamiltonian(self):

assert np.allclose(sparse_matrix.todense(), expected_sparse_matrix.todense())

def test_sprod_hamiltonian(self):
"""Test that a hamiltonian object can be scaled."""
U = qml.Hamiltonian([0.5], [qml.PauliX(wires=0)])
sprod_op = SProd(-4, U)
mat = sprod_op.matrix()

true_mat = [[0, -2], [-2, 0]]
assert np.allclose(mat, true_mat)

# Add interface tests for each interface !

@pytest.mark.jax
Expand Down
10 changes: 10 additions & 0 deletions tests/ops/op_math/test_sum.py
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,16 @@ def test_sum_qubit_unitary(self):
true_mat = qnp.kron(U, qnp.eye(2)) + qnp.eye(4)
assert np.allclose(mat, true_mat)

def test_sum_hamiltonian(self):
"""Test that a hamiltonian object can be summed."""
U = 0.5 * (qml.PauliX(wires=0) @ qml.PauliZ(wires=1))
sum_op = Sum(U, qml.PauliX(wires=0))
mat = sum_op.matrix()

true_mat = [[0, 0, 1.5, 0], [0, 0, 0, 0.5], [1.5, 0, 0, 0], [0, 0.5, 0, 0]]

assert np.allclose(mat, true_mat)

# Add interface tests for each interface !

@pytest.mark.jax
Expand Down

0 comments on commit 8bc6bff

Please sign in to comment.