Skip to content

Bug in NSitesAnalysis with the stdlib functions. #324

Open
@weinbe58

Description

@weinbe58

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
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions