From f68ea49e549c6ff1f03d2c2d79fa92b3398d2136 Mon Sep 17 00:00:00 2001 From: Vincent Michaud-Rioux Date: Fri, 19 Apr 2024 14:05:09 -0400 Subject: [PATCH] Update py-pennylane + Lightning plugins + few deps (#43706) * Update PennyLane packages to v0.32. * Reformat. * Couple small fixes. * Fix Lightning cmake_args. * Couple dep fixes in py-pennylane + plugins. * Fix scipy condition. * Add comment on conflicting requirement. * Update py-pl versions * Update lightning versions. * Fix copyright. * Fix license. * Update pl-kokkos versions * run black * Fix L-Kokkos build and update autoray. * build step only required for older versions. update autograd * Fix LK@0.31 kokkos compat issue. Introduce url_for_version. * Fix few more version bounds. --- .../builtin/packages/py-autograd/package.py | 8 +++- .../builtin/packages/py-autoray/package.py | 9 ++++ .../py-pennylane-lightning-kokkos/package.py | 47 ++++++++++++++----- .../py-pennylane-lightning/package.py | 33 ++++++++----- .../builtin/packages/py-pennylane/package.py | 28 +++++++---- 5 files changed, 89 insertions(+), 36 deletions(-) diff --git a/var/spack/repos/builtin/packages/py-autograd/package.py b/var/spack/repos/builtin/packages/py-autograd/package.py index 5151216800..c3f76030db 100644 --- a/var/spack/repos/builtin/packages/py-autograd/package.py +++ b/var/spack/repos/builtin/packages/py-autograd/package.py @@ -21,11 +21,17 @@ class PyAutograd(PythonPackage): examples directory.""" homepage = "https://github.com/HIPS/autograd" - pypi = "autograd/autograd-1.3.tar.gz" + pypi = "autograd/autograd-1.6.2.tar.gz" license("MIT") + version("1.6.2", sha256="8731e08a0c4e389d8695a40072ada4512641c113b6cace8f4cfbe8eb7e9aedeb") + version("1.6.1", sha256="dd0068f3f78fd76cf28cee94358737c3b5e8a1d2acac0b850e14d14e1bca84ac") + version("1.6", sha256="b10ad7598bab69251a496210370f7802a21da0ae6a7710197eaae99c3a59b30a") + version("1.5", sha256="d80bd225154d1db13cb4eaccf7a18c358be72092641b68717f96fcf1d16acd0b") + version("1.4", sha256="383de0f537ef2e38b85ff9692593b0cfae8958c9b3bd451b52c255fd9171ffce") version("1.3", sha256="a15d147577e10de037de3740ca93bfa3b5a7cdfbc34cfb9105429c3580a33ec4") + version("1.2", sha256="a08bfa6d539b7a56e7c9f4d0881044afbef5e75f324a394c2494de963ea4a47d") depends_on("py-setuptools", type="build") depends_on("py-future@0.15.2:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-autoray/package.py b/var/spack/repos/builtin/packages/py-autoray/package.py index e9043a7e90..316596abe3 100644 --- a/var/spack/repos/builtin/packages/py-autoray/package.py +++ b/var/spack/repos/builtin/packages/py-autoray/package.py @@ -15,6 +15,15 @@ class PyAutoray(PythonPackage): license("Apache-2.0") + version("0.6.9", sha256="9f41759f6a286bc280c4f6aece436da1c87ce75eb00efe7dc7319860c43654fa") + version("0.6.8", sha256="8e31832597cb2075e5f9f65894fafff9d726d9287718415d3c8b008e592f0197") + version("0.6.7", sha256="8945cfdf3aa8a35f9fe1abc03d84925db61f58bbd386623206dd8e9ba1d9e377") + version("0.6.6", sha256="a31cd03f983a6e80b58f40618a652b7979fa09c762050f5dc4b7e6b6a0a3b62d") + version("0.6.5", sha256="093f151539769b03374f67bd2296cf76d359ac190ab6fd8ebe26984a2dc88a4c") + version("0.6.4", sha256="b8e38ff87e2ea1dd8bd17ddd1174f02c41dc4cfec933a3aac9f0516288548e81") + version("0.6.3", sha256="6729f49c8787778fd8bc2a3b57a625c8c21577c6e92628cad4b13aefd7531355") + version("0.6.1", sha256="857cbd4d60d47511ab9956f8765d5fd3c68a538d317cda7d829b00982c599140") + version("0.6.0", sha256="ba3f30812549209bbba9d4976528f3f84bf84c22374699fd2e6aa84bf496d295") version("0.5.3", sha256="ecbecbc1ab65dd704234b3307fa7c7a511a36f6b9339a0ffcdaa4e5a7aab826b") depends_on("python@3.6:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-pennylane-lightning-kokkos/package.py b/var/spack/repos/builtin/packages/py-pennylane-lightning-kokkos/package.py index 22a0d776bf..959482d141 100644 --- a/var/spack/repos/builtin/packages/py-pennylane-lightning-kokkos/package.py +++ b/var/spack/repos/builtin/packages/py-pennylane-lightning-kokkos/package.py @@ -2,8 +2,6 @@ # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) - - from spack.package import * @@ -13,21 +11,26 @@ class PyPennylaneLightningKokkos(CMakePackage, PythonExtension, CudaPackage, ROC homepage = "https://docs.pennylane.ai/projects/lightning-kokkos" git = "https://github.com/PennyLaneAI/pennylane-lightning-kokkos.git" - url = "https://github.com/PennyLaneAI/pennylane-lightning-kokkos/archive/refs/tags/v0.32.0.tar.gz" maintainers("AmintorDusko", "vincentmr") license("Apache-2.0") version("main", branch="main") - + version("master", branch="master") + version("0.35.1", sha256="d39a2749d08ef2ba336ed2d6f77b3bd5f6d1b25292263a41b97943ae7538b7da") + version("0.35.0", sha256="1a16fd3dbf03788e4f8dd510bbb668e7a7073ca62be4d9414e2c32e0166e8bda") + version("0.34.0", sha256="398c3a1d4450a9f3e146204c22329da9adc3f83a1685ae69187f3b25f47824c0") + version("0.33.1", sha256="878f63cd1afadd52386b1aca9c0e3fb0a097b64ce8e347b325ebc7cac722e5e0") + version("0.33.0", sha256="c4cab4a8a1a53edc0990a2a429805dca1c6a46a7ffcc6f77c985b88cd6ff6247") version("0.32.0", sha256="06f19dfb1073387ef9ee30c38ea44884844a771373256b694a0e1ceb87195bb2") version("0.31.0", sha256="fe10322fee0fa7df45cd3a81d6c229a79c7dfa7f20ff7d67c65c9a28f494dc89") version("0.30.0", sha256="7c8f0e0431f8052993cd8033a316f53590c7bf5419445d0725e214b93cbc661b") version("0.29.1", sha256="f51ba7718defc7bb5064f690f381e04b2ec58cb09f22a171ae5f410860716e30") depends_on("kokkos@:3.7.2", when="@:0.30", type=("run", "build")) - depends_on("kokkos@4:", when="@0.31:", type=("run", "build")) + depends_on("kokkos@4:4.1", when="@0.31", type=("run", "build")) + depends_on("kokkos@4:4.2", when="@0.32:", type=("run", "build")) # kokkos backends backends = { @@ -70,16 +73,20 @@ class PyPennylaneLightningKokkos(CMakePackage, PythonExtension, CudaPackage, ROC depends_on("cmake@3.20:", type="build") depends_on("ninja", type="build") depends_on("python@3.8:", type=("build", "run")) + depends_on("python@3.9:", type=("build", "run"), when="@0.32:") depends_on("py-setuptools", type="build") depends_on("py-pybind11", type="link") depends_on("py-pip", type="build") depends_on("py-wheel", type="build") - depends_on("py-pennylane@0.28:", type=("build", "run"), when="@:0.30") - depends_on("py-pennylane@0.30:", type=("build", "run"), when="@0.31:") + depends_on("py-pennylane@0.28:0.30", type=("build", "run"), when="@:0.30") + depends_on("py-pennylane@0.30:", type=("build", "run"), when="@0.31") # This requirement differs from `pennylane>=0.30` in `setup.py`, # but the introduction of `StatePrep` demands `pennylane>=0.32` - depends_on("py-pennylane@0.32:", type=("build", "run"), when="@0.32:") + depends_on("py-pennylane@0.32:", type=("build", "run"), when="@0.32") depends_on("py-pennylane-lightning~kokkos", type=("build", "run"), when="@:0.31") + for v in range(33, 36): + depends_on(f"py-pennylane@0.{v}:", type="run", when=f"@0.{v}") + depends_on(f"py-pennylane-lightning@0.{v}", type=("build", "run"), when=f"@0.{v}") # variant defined dependencies depends_on("llvm-openmp", when="+openmp %apple-clang") @@ -89,16 +96,27 @@ class PyPennylaneLightningKokkos(CMakePackage, PythonExtension, CudaPackage, ROC depends_on("py-pytest-mock", type="test") depends_on("py-flaky", type="test") + def url_for_version(self, version): + extra = "-kokkos" if version <= Version("0.32.0") else "" + return f"https://github.com/PennyLaneAI/pennylane-lightning{extra}/archive/refs/tags/v{version}.tar.gz" + class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder): build_directory = "build" + def setup_build_environment(self, env): + env.set("PL_BACKEND", "lightning_kokkos") + cm_args = " ".join([s[2:] for s in self.cmake_args()]) + env.set("CMAKE_ARGS", f"{cm_args}") + def cmake_args(self): """ Here we specify all variant options that can be dynamically specified at build time """ + args_prefix = "PLKOKKOS_" if self.spec.version < Version("0.33") else "" + args = [ - self.define_from_variant("PLKOKKOS_BUILD_TESTS", "cpptests"), + self.define_from_variant(f"{args_prefix}BUILD_TESTS", "cpptests"), self.define_from_variant("PLKOKKOS_ENABLE_NATIVE", "native"), self.define_from_variant("PLKOKKOS_ENABLE_SANITIZER", "sanitize"), ] @@ -108,13 +126,16 @@ def cmake_args(self): args.append( "-DPLKOKKOS_ENABLE_WARNINGS=OFF" ) # otherwise build might fail due to Kokkos::InitArguments deprecated + if self.spec.version >= Version("0.33"): + args.append("-DPL_BACKEND=lightning_kokkos") return args def build(self, pkg, spec, prefix): - super().build(pkg, spec, prefix) - cm_args = ";".join([s[2:] for s in self.cmake_args()]) - args = ["-i", f"--define={cm_args}"] - python("setup.py", "build_ext", *args) + if self.spec.version < Version("0.32"): + super().build(pkg, spec, prefix) + cm_args = ";".join([s[2:] for s in self.cmake_args()]) + args = ["-i", f"--define={cm_args}"] + python("setup.py", "build_ext", *args) def install(self, pkg, spec, prefix): pip_args = std_pip_args + [f"--prefix={prefix}", "."] diff --git a/var/spack/repos/builtin/packages/py-pennylane-lightning/package.py b/var/spack/repos/builtin/packages/py-pennylane-lightning/package.py index d2cf5c0d4e..e594e9fa68 100644 --- a/var/spack/repos/builtin/packages/py-pennylane-lightning/package.py +++ b/var/spack/repos/builtin/packages/py-pennylane-lightning/package.py @@ -12,13 +12,18 @@ class PyPennylaneLightning(CMakePackage, PythonExtension): homepage = "https://docs.pennylane.ai/projects/lightning" git = "https://github.com/PennyLaneAI/pennylane-lightning.git" - url = "https://github.com/PennyLaneAI/pennylane-lightning/archive/refs/tags/v0.32.0.tar.gz" + url = "https://github.com/PennyLaneAI/pennylane-lightning/archive/refs/tags/v0.35.1.tar.gz" - maintainers("mlxd", "AmintorDusko") + maintainers("mlxd", "AmintorDusko", "vincentmr") license("Apache-2.0") version("master", branch="master") + version("0.35.1", sha256="d39a2749d08ef2ba336ed2d6f77b3bd5f6d1b25292263a41b97943ae7538b7da") + version("0.35.0", sha256="1a16fd3dbf03788e4f8dd510bbb668e7a7073ca62be4d9414e2c32e0166e8bda") + version("0.34.0", sha256="398c3a1d4450a9f3e146204c22329da9adc3f83a1685ae69187f3b25f47824c0") + version("0.33.1", sha256="878f63cd1afadd52386b1aca9c0e3fb0a097b64ce8e347b325ebc7cac722e5e0") + version("0.33.0", sha256="c4cab4a8a1a53edc0990a2a429805dca1c6a46a7ffcc6f77c985b88cd6ff6247") version("0.32.0", sha256="124edae1828c7e72e7b3bfbb0e75e98a07a490d7f1eab19eebb3311bfa8a23d4") version("0.31.0", sha256="b177243625b6fdac0699d163bbc330c92ca87fb9f427643785069273d2a255f6") version("0.30.0", sha256="0f4032409d20d00991b5d14fe0b2b928baca4a13c5a1b16eab91f61f9273e58d") @@ -64,6 +69,11 @@ class PyPennylaneLightning(CMakePackage, PythonExtension): class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder): build_directory = "build" + def setup_build_environment(self, env): + env.set("PL_BACKEND", "lightning_qubit") + cm_args = " ".join([s[2:] for s in self.cmake_args()]) + env.set("CMAKE_ARGS", f"{cm_args}") + def cmake_args(self): """ Here we specify all variant options that can be dynamicaly specified at build time @@ -74,9 +84,10 @@ def cmake_args(self): self.define_from_variant("ENABLE_BLAS", "blas"), self.define_from_variant("CMAKE_VERBOSE_MAKEFILE:BOOL", "verbose"), self.define_from_variant("BUILD_TESTS", "cpptests"), - self.define_from_variant("BUILD_BENCHMARKS", "cppbenchmarks"), self.define_from_variant("ENABLE_GATE_DISPATCHER", "dispatcher"), ] + if self.spec.version < Version("0.32"): + args.append(self.define_from_variant("BUILD_BENCHMARKS", "cppbenchmarks")) if "+kokkos" in self.spec: args += [ @@ -90,16 +101,12 @@ def cmake_args(self): return args def build(self, pkg, spec, prefix): - super().build(pkg, spec, prefix) - cm_args = ";".join( - [ - s[2:] - for s in self.cmake_args() - if s[2:] not in ["BUILD_TESTS:BOOL=ON", "BUILD_BENCHMARKS:BOOL=ON"] - ] - ) - args = ["-i", f"--define={cm_args}"] - python("setup.py", "build_ext", *args) + if self.spec.version < Version("0.32"): + super().build(pkg, spec, prefix) + skipped_args = ["BUILD_TESTS:BOOL=ON", "BUILD_BENCHMARKS:BOOL=ON"] + cm_args = ";".join([s[2:] for s in self.cmake_args() if s[2:] not in skipped_args]) + args = ["-i", f"--define={cm_args}"] + python("setup.py", "build_ext", *args) def install(self, pkg, spec, prefix): pip_args = std_pip_args + ["--prefix=" + prefix, "."] diff --git a/var/spack/repos/builtin/packages/py-pennylane/package.py b/var/spack/repos/builtin/packages/py-pennylane/package.py index 0464309adb..3bf4b82c8c 100644 --- a/var/spack/repos/builtin/packages/py-pennylane/package.py +++ b/var/spack/repos/builtin/packages/py-pennylane/package.py @@ -12,13 +12,18 @@ class PyPennylane(PythonPackage): homepage = "https://docs.pennylane.ai/" git = "https://github.com/PennyLaneAI/pennylane.git" - url = "https://github.com/PennyLaneAI/pennylane/archive/refs/tags/v0.32.0.tar.gz" + url = "https://github.com/PennyLaneAI/pennylane/archive/refs/tags/v0.35.1.tar.gz" - maintainers("mlxd", "AmintorDusko", "marcodelapierre") + maintainers("mlxd", "AmintorDusko", "marcodelapierre", "vincentmr") license("Apache-2.0") version("master", branch="master") + version("0.35.1", sha256="5a234d0605012f3d0201fdcfd2bfe84205a09c8ac42801fe7123eddddec71366") + version("0.35.0", sha256="3b99185661e8a0d0f7bc2dcc9cfa51dde20e99708c3c7d858c4732f0eb774716") + version("0.34.0", sha256="f76f544212c028a8f882ce7f66639e7f7c4c9213277bde0454c7f3a7d9d46538") + version("0.33.1", sha256="89d02bfe3a37abd13dcdb2f34f00a38e9e60a13af66a97911c8558f77ff4e32e") + version("0.33.0", sha256="b41c843a432c5869fc63dc35c9e9d53bec64d296ca0e0eeb1c9b83d95a68c3f1") version("0.32.0", sha256="8a2206268d7cae0a59f9067b6075175eec93f4843519b371f02716c49a22e750") version("0.31.0", sha256="f3b68700825c120e44434ed2b2ab71d0be9d3111f3043077ec0598661ec33477") version("0.30.0", sha256="7fe4821fbc733e3e40d7011e054bd2e31edde3151fd9539025c827a5a3579d6b") @@ -28,10 +33,12 @@ class PyPennylane(PythonPackage): depends_on("python@3.9:", type=("build", "run"), when="@0.32.0:") depends_on("py-pip", type=("build", "run")) # Runtime req for pennylane.about() depends_on("py-setuptools", type="build") + depends_on("py-setuptools", type=("build", "run"), when="@0.33") - depends_on("py-numpy@:1.23", type=("build", "run")) + depends_on("py-numpy", type=("build", "run")) + depends_on("py-numpy@:1.23", type=("build", "run"), when="@:0.32.0") depends_on("py-scipy", type=("build", "run")) - depends_on("py-scipy@:1.10", type=("build", "run"), when="@:0.31.0") + depends_on("py-scipy@:1.10.0", type=("build", "run"), when="@:0.31") depends_on("py-networkx", type=("build", "run")) depends_on("py-rustworkx", type=("build", "run"), when="@0.30.0:") depends_on("py-retworkx", type=("build", "run"), when="@0.28.0:0.29.1") @@ -39,21 +46,24 @@ class PyPennylane(PythonPackage): depends_on("py-toml", type=("build", "run")) depends_on("py-appdirs", type=("build", "run")) depends_on("py-semantic-version@2.7:", type=("build", "run")) - depends_on("py-autoray@0.3.1:", type=("build", "run")) + depends_on("py-autoray@0.3.1:", type=("build", "run"), when="@:0.32.0") + depends_on("py-autoray@0.6.1:", type=("build", "run"), when="@0.33.0:") depends_on("py-cachetools", type=("build", "run")) - for v in range(30, 33): - depends_on(f"py-pennylane-lightning@0.{v}.0:", type=("build", "run"), when=f"@0.{v}.0:") depends_on( "py-pennylane-lightning@0.28.0:0.29.0", type=("build", "run"), when="@0.28.0:0.29.1" ) + for v in range(30, 36): + depends_on(f"py-pennylane-lightning@0.{v}:", type=("build", "run"), when=f"@0.{v}:") depends_on("py-requests", type=("build", "run")) depends_on("py-typing-extensions", type=("build", "run"), when="@0.32.0:") - # Test deps + # The following packages are required by the `pl-device-test binary` depends_on("py-pytest", type="test") - depends_on("py-pytest-xdist@3.2:", type="test") depends_on("py-pytest-mock", type="test") depends_on("py-flaky", type="test") + depends_on("py-pytest-benchmark", type="test", when="@0.34.0:") + # Additional test deps + depends_on("py-pytest-xdist@3.2:", type="test") @run_after("install") @on_package_attributes(run_tests=True)