Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
df8b97b
Migrate unified compiler to Catalyst
mudit2812 Nov 17, 2025
9536707
Fixing migration artifacts; linting
mudit2812 Nov 17, 2025
1453aae
Fix CI errors; Ignore unified compiler in coverage reports
mudit2812 Nov 17, 2025
efc0f88
Test out how graphviz is installed
mudit2812 Nov 17, 2025
10cd749
Lint some more
mudit2812 Nov 17, 2025
27de22d
Merge branch 'main' into migrate-unified-compiler
mudit2812 Nov 17, 2025
f7aa2b6
[skip ci] Skip CI
mudit2812 Nov 17, 2025
012f58b
[skip ci] Skip CI
mudit2812 Nov 17, 2025
f0a0c90
Merge branch 'migrate-unified-compiler' of https://github.com/PennyLa…
mudit2812 Nov 17, 2025
c98755e
Try installing graphviz with apt
mudit2812 Nov 17, 2025
bb5bd00
Fix codefactor complaints
mudit2812 Nov 17, 2025
1448472
Merge branch 'main' into migrate-unified-compiler
mudit2812 Nov 17, 2025
5e745f5
Try appeasing codefactor again
mudit2812 Nov 17, 2025
0409933
Try appeasing codefactor once again
mudit2812 Nov 17, 2025
e786a12
Pylint suppression
mudit2812 Nov 17, 2025
4ae10ff
Reduce complexity of stablehlo.reduce and stablehlo.dynamic_broadcast…
mudit2812 Nov 17, 2025
dc41a7b
Fix some failures
mudit2812 Nov 18, 2025
58b13e4
Try change to graphviz installation
mudit2812 Nov 18, 2025
4e5f904
Merge branch 'main' into migrate-unified-compiler
mudit2812 Nov 18, 2025
637d2cf
Try installing graphviz with pip
mudit2812 Nov 18, 2025
091c5e1
Merge branch 'main' into migrate-unified-compiler
mudit2812 Nov 18, 2025
64e0fd4
Try installing graphviz with both apt and pip
mudit2812 Nov 18, 2025
dc15d3a
Add utils file to remove conftest imports
mudit2812 Nov 18, 2025
e7e33d6
Merge branch 'main' into migrate-unified-compiler
mudit2812 Nov 18, 2025
f919e8d
Remove unused imports
mudit2812 Nov 18, 2025
005ba9f
Add graphviz dependencies to lightning.kokkos testing workflow
mudit2812 Nov 18, 2025
6117189
Update cookbook
mudit2812 Nov 18, 2025
6961324
Migrate all changelog entries from PennyLane
mudit2812 Nov 18, 2025
0fdbb46
Merge branch 'main' into migrate-unified-compiler
mudit2812 Nov 18, 2025
a868bc3
Add EOF new line to .codecov.yml
mudit2812 Nov 18, 2025
8f00b2f
change changelog entry slightly
mudit2812 Nov 18, 2025
e7db061
Migrate xDSL universe PR to Catalyst
mudit2812 Nov 19, 2025
9863ed6
Fix link in changelog
mudit2812 Nov 19, 2025
22a6e6e
Merge branch 'main' into migrate-unified-compiler
mudit2812 Nov 20, 2025
b4a321d
Merge branch 'main' into migrate-unified-compiler
mudit2812 Nov 26, 2025
4cbe02a
Remove reference to 'remove-chained-self-inverses'
mudit2812 Nov 26, 2025
a3d252e
Merge branch 'migrate-unified-compiler' into xdsl-universe
mudit2812 Nov 27, 2025
f65965d
Merge branch 'main' into xdsl-universe
mudit2812 Dec 9, 2025
058b3f6
Resolve merge artifacts
mudit2812 Dec 9, 2025
ec17ecf
Fit jit
mudit2812 Dec 9, 2025
f1fd5ae
Raise error if attempting to use python_interface without xdsl installed
mudit2812 Dec 9, 2025
2a3de09
Add pylint suppression
mudit2812 Dec 9, 2025
b3b8121
Merge branch 'main' into xdsl-universe
mudit2812 Dec 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions doc/releases/changelog-dev.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
`catalyst.python_interface` namespace.
[(#2199)](https://github.com/PennyLaneAI/catalyst/pull/2199)

* An xDSL `Universe` containing all custom xDSL dialects and passes has been registered as an entry point,
allowing usage of PennyLane's dialects and passes with xDSL's command-line tools.
[(#2208)](https://github.com/PennyLaneAI/catalyst/pull/2208)

* A new `catalyst.python_interface.inspection.mlir_specs` function has been added to facilitate
PennyLane's new pass-by-pass specs feature. This function returns information gathered by parsing
the xDSL generated by a given QJIT object, such as gate counts, measurements, or qubit allocations.
Expand Down
9 changes: 9 additions & 0 deletions frontend/catalyst/python_interface/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,15 @@
# limitations under the License.
"""Unified Compiler API for integration of Catalyst with xDSL."""

# pylint: disable=wrong-import-position
from importlib.util import find_spec

if not (find_spec("xdsl") and find_spec("xdsl_jax")): # pragma: no cover
raise RuntimeError(
"Using the Unified compiler framework requires xDSL and xDSL-JAX to be installed. "
"They can be installed by executing 'python -m pip install xdsl xdsl-jax'."
)

Comment on lines +16 to +24
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Everything failing. Need to remove this.

from .compiler import Compiler
from .inspection import QMLCollector, mlir_specs
from .parser import QuantumParser
Expand Down
57 changes: 57 additions & 0 deletions frontend/catalyst/python_interface/xdsl_universe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Copyright 2025 Xanadu Quantum Technologies Inc.

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

# http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""xDSL universe for containing all dialects and passes."""

xdsl_available = True

try:
from xdsl.passes import ModulePass
from xdsl.universe import Universe
except (ImportError, ModuleNotFoundError):
xdsl_available = False # pragma: no cover

# We must check that xDSL is installed because we're adding an entry point to
# PennyLane that references this file, and we must ensure that PennyLane can
# be installed in environments where xDSL is not installed.
XDSL_UNIVERSE = None

if xdsl_available:
# pylint: disable=import-outside-toplevel
from . import dialects, transforms

shared_dialects = ("stablehlo", "transform")

# Create a map from dialect names to dialect classes. Dialects that are already
# provided by xDSL cannot be loaded into the multiverse, so we don't add them to
# our universe.
names_to_dialects = {
d.name: d
for name in dialects.__all__
if (d := getattr(dialects, name)).name not in shared_dialects
}

# Create a map from pass names to their respective ModulePass. The transforms module
# contains PassDispatcher instances as well as ModulePasses. We only want to collect
# the ModulePasses. We cannot use issubclass with instances, which is why we first
# check if isinstance(transform, type).
names_to_passes = {
t.name: t
for name in transforms.__all__
if isinstance((t := getattr(transforms, name)), type) and issubclass(t, ModulePass)
}

# The Universe is used to expose custom dialects and transforms to xDSL. It is
# specified as an entry point in PennyLane's pyproject.toml file, which makes
# it available to look up by xDSL for tools such as xdsl-opt, xdsl-gui, etc.
XDSL_UNIVERSE = Universe(all_dialects=names_to_dialects, all_passes=names_to_passes)
60 changes: 60 additions & 0 deletions frontend/test/pytest/python_interface/test_xdsl_universe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Copyright 2025 Xanadu Quantum Technologies Inc.

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

# http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Unit tests for the xDSL universe."""

import pytest

pytestmark = pytest.mark.xdsl
xdsl = pytest.importorskip("xdsl")

# pylint: disable=wrong-import-position
from xdsl.passes import ModulePass
from xdsl.universe import Universe as xUniverse

from catalyst.python_interface import dialects, transforms
from catalyst.python_interface.xdsl_universe import XDSL_UNIVERSE, shared_dialects

all_dialects = tuple(getattr(dialects, name) for name in dialects.__all__)
all_transforms = tuple(
transform
for name in transforms.__all__
if isinstance((transform := getattr(transforms, name)), type)
and issubclass(transform, ModulePass)
)


def test_correct_universe():
"""Test that all the available dialects and transforms are available in the universe."""
for d in all_dialects:
if d.name not in shared_dialects:
assert d.name in XDSL_UNIVERSE.all_dialects
assert XDSL_UNIVERSE.all_dialects[d.name] == d

for t in all_transforms:
assert t.name in XDSL_UNIVERSE.all_passes
assert XDSL_UNIVERSE.all_passes[t.name] == t


def test_correct_multiverse():
"""Test that all the available dialects and transforms are available in the multiverse."""
multiverse = xUniverse.get_multiverse()

for d in all_dialects:
assert d.name in multiverse.all_dialects
if d.name not in shared_dialects:
assert multiverse.all_dialects[d.name] == d

for t in all_transforms:
assert t.name in multiverse.all_passes
assert multiverse.all_passes[t.name] == t
3 changes: 3 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,9 @@ def parse_dep_versions():
"cuda_quantum.ops = catalyst.api_extensions",
"cuda_quantum.qjit = catalyst.third_party.cuda:cudaqjit",
],
"xdsl.universe": [
"catalyst-xdsl-universe = catalyst.python_interface.xdsl_universe:XDSL_UNIVERSE"
],
}

classifiers = [
Expand Down
Loading