Skip to content

Commit 5f2cead

Browse files
authored
New Squin statements. (#200)
* adding Broadcast statement * add docs * adding other statements * removing broadcast as operator * adding broadcast as apply statement * adding verify for CliffordString
1 parent 16d6f84 commit 5f2cead

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/bloqade/squin/op/stmts.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,14 @@ class ConstantUnitary(ConstantOp):
103103
)
104104

105105

106+
class U3(PrimitiveOp):
107+
traits = frozenset({ir.Pure(), lowering.FromPythonCall(), Unitary(), FixedSites(1)})
108+
theta: ir.SSAValue = info.argument(types.Float)
109+
phi: ir.SSAValue = info.argument(types.Float)
110+
lam: ir.SSAValue = info.argument(types.Float)
111+
result: ir.ResultValue = info.result(OpType)
112+
113+
106114
@statement(dialect=dialect)
107115
class PhaseOp(PrimitiveOp):
108116
"""
@@ -138,6 +146,18 @@ class PauliOp(ConstantUnitary):
138146
pass
139147

140148

149+
@statement(dialect=dialect)
150+
class CliffordString(ConstantUnitary):
151+
traits = frozenset({ir.Pure(), lowering.FromPythonCall(), Unitary(), HasSites()})
152+
string: str = info.attribute()
153+
154+
def verify(self) -> None:
155+
if not set("XYZHS").issuperset(self.string):
156+
raise ValueError(
157+
f"Invalid Clifford string: {self.string}. Must be a combination of 'X', 'Y', 'Z', 'H', and 'S'."
158+
)
159+
160+
141161
@statement(dialect=dialect)
142162
class X(PauliOp):
143163
pass

src/bloqade/squin/qubit.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ class Apply(ir.Statement):
3434
qubits: ir.SSAValue = info.argument(ilist.IListType[QubitType])
3535

3636

37+
@statement(dialect=dialect)
38+
class Broadcast(ir.Statement):
39+
traits = frozenset({lowering.FromPythonCall()})
40+
operator: ir.SSAValue = info.argument(OpType)
41+
qubits: ir.SSAValue = info.argument(ilist.IListType[QubitType])
42+
43+
3744
@statement(dialect=dialect)
3845
class Measure(ir.Statement):
3946
traits = frozenset({lowering.FromPythonCall()})

0 commit comments

Comments
 (0)