Open
Description
One of the stdlib functions is not returning the correct value for the NSitesAnalysis. MWE:
from bloqade import squin
from bloqade.squin.analysis.nsites import NSitesAnalysis
@squin.kernel
def main():
qreg = squin.qubit.new(4)
squin.qubit.apply(squin.op.h(), qreg[0])
squin.qubit.apply(squin.op.cx(), qreg[0], qreg[1])
squin.qubit.apply(squin.op.cx(), qreg[0], qreg[2])
squin.qubit.apply(squin.op.cx(), qreg[0], qreg[3])
analysis_frame, ret= NSitesAnalysis(main.dialects).run_analysis(main, no_raise=False)
main.print(analysis=analysis_frame.entries)
prints out:
func.func main() -> !py.NoneType {
^0(%main_self):
│ %main_self --> NoSites()
│ %0 = py.constant.constant 4 : !py.int # ---> NoSites()
│ %qreg = squin.qubit.new(n_qubits=%0) : !py.IList[!py.Qubit, Literal(4,int)] # ---> NoSites()
│ %1 = squin.op.h() : !py.Op # ---> NumberSites(sites=1)
│ %2 = py.constant.constant 0 : !py.int # ---> NoSites()
│ %3 = py.indexing.getitem(%qreg, %2) : !py.Qubit # ---> NoSites()
│ %4 = py.ilist.new(values=(%3)){elem_type=!Any} : !py.IList[!py.Qubit, Literal(1,int)] # ---> NoSites()
│ squin.qubit.apply(operator=%1, qubits=%4)
<<<<<<< missing analysis
│ %5 = func.invoke cx() : !py.Op maybe_pure=True # ---> NoSites()
<<<<<<<
│ %6 = py.constant.constant 0 : !py.int # ---> NoSites()
│ %7 = py.indexing.getitem(%qreg, %6) : !py.Qubit # ---> NoSites()
│ %8 = py.constant.constant 1 : !py.int # ---> NoSites()
│ %9 = py.indexing.getitem(%qreg, %8) : !py.Qubit # ---> NoSites()
│ %10 = py.ilist.new(values=(%7, %9)){elem_type=!Any} : !py.IList[!py.Qubit, Literal(2,int)] # ---> NoSites()
│ squin.qubit.apply(operator=%5, qubits=%10)
│ %11 = func.invoke cx() : !py.Op maybe_pure=True # ---> NoSites()
│ %12 = py.constant.constant 0 : !py.int # ---> NoSites()
│ %13 = py.indexing.getitem(%qreg, %12) : !py.Qubit # ---> NoSites()
│ %14 = py.constant.constant 2 : !py.int # ---> NoSites()
│ %15 = py.indexing.getitem(%qreg, %14) : !py.Qubit # ---> NoSites()
│ %16 = py.ilist.new(values=(%13, %15)){elem_type=!Any} : !py.IList[!py.Qubit, Literal(2,int)] # ---> NoSites()
│ squin.qubit.apply(operator=%11, qubits=%16)
│ %17 = func.invoke cx() : !py.Op maybe_pure=True # ---> NoSites()
│ %18 = py.constant.constant 0 : !py.int # ---> NoSites()
│ %19 = py.indexing.getitem(%qreg, %18) : !py.Qubit # ---> NoSites()
│ %20 = py.constant.constant 3 : !py.int # ---> NoSites()
│ %21 = py.indexing.getitem(%qreg, %20) : !py.Qubit # ---> NoSites()
│ %22 = py.ilist.new(values=(%19, %21)){elem_type=!Any} : !py.IList[!py.Qubit, Literal(2,int)] # ---> NoSites()
│ squin.qubit.apply(operator=%17, qubits=%22)
│ %23 = func.const.none() : !py.NoneType # ---> NoSites()
│ func.return %23
} // func.func main
Metadata
Metadata
Assignees
Labels
No labels