@@ -59,29 +59,23 @@ def __init__(self, dialects):
5959 self ._address_frame : ForwardFrame [Address ] | None = None
6060 self ._validation_errors : list [ValidationError ] = []
6161
62- def initialize (self ):
63- super ().initialize ()
64- self ._validation_errors = []
65- return self
62+ def method_self (self , method : ir .Method ) -> QubitValidation :
63+ return self .lattice .bottom ()
6664
6765 def run_method (
6866 self , method : ir .Method , args : tuple [QubitValidation , ...]
6967 ) -> tuple [ForwardFrame [QubitValidation ], QubitValidation ]:
7068 if self ._address_frame is None :
71- if getattr (self , "_address_analysis" , None ) is None :
72- addr_analysis = AddressAnalysis (self .dialects )
73- addr_analysis .initialize ()
74- self ._address_analysis = addr_analysis
75-
76- self ._address_frame , _ = self ._address_analysis .run_analysis (method )
69+ addr_analysis = AddressAnalysis (self .dialects )
70+ addr_analysis .initialize ()
71+ self ._address_frame , _ = addr_analysis .run_analysis (method )
7772
7873 return self .run_callable (method .code , args )
7974
8075 def eval_stmt_fallback (
8176 self , frame : ForwardFrame [QubitValidation ], stmt : ir .Statement
8277 ) -> tuple [QubitValidation , ...]:
8378 """Check for qubit usage violations."""
84-
8579 if not isinstance (stmt , func .Invoke ):
8680 return tuple (Bottom () for _ in stmt .results )
8781
@@ -173,7 +167,6 @@ class NoCloningValidation(ValidationPass):
173167 """Validates the no-cloning theorem by tracking qubit addresses."""
174168
175169 def __init__ (self ):
176- self .method : ir .Method | None = None
177170 self ._analysis : _NoCloningAnalysis | None = None
178171 self ._cached_address_frame = None
179172
@@ -198,22 +191,18 @@ def run(self, method: ir.Method) -> tuple[Any, list[ValidationError]]:
198191 if self ._analysis is None :
199192 self ._analysis = _NoCloningAnalysis (method .dialects )
200193
201- self .method = method
202194 self ._analysis .initialize ()
203195 if self ._cached_address_frame is not None :
204196 self ._analysis ._address_frame = self ._cached_address_frame
205- frame , _ = self ._analysis .run_analysis (method , args = None )
197+ frame , _ = self ._analysis .run_analysis (method )
206198
207199 return frame , self ._analysis ._validation_errors
208200
209201 def print_validation_errors (self ):
210202 """Print all collected errors with formatted snippets."""
211203 if self ._analysis is None :
212204 return
213- errors = self ._analysis ._validation_errors
214- if not errors :
215- return
216- for err in errors :
205+ for err in self ._analysis ._validation_errors :
217206 if isinstance (err , QubitValidationError ):
218207 print (
219208 f"\n \033 [31mError\033 [0m: Cloning qubit [{ err .qubit_id } ] at { err .gate_name } gate"
0 commit comments