1414
1515"""An optimization pass that removes operations with tiny effects."""
1616
17- from typing import Optional
17+ from typing import TYPE_CHECKING
1818
1919from cirq import ops , extension
2020from cirq .circuits import optimization_pass , circuit as _circuit
2121
22+ if TYPE_CHECKING :
23+ # pylint: disable=unused-import
24+ from typing import List , Tuple
2225
23- class DropNegligible (optimization_pass .PointOptimizer ):
26+
27+ class DropNegligible (optimization_pass .OptimizationPass ):
2428 """An optimization pass that removes operations with tiny effects."""
2529
2630 def __init__ (self ,
@@ -29,18 +33,12 @@ def __init__(self,
2933 self .tolerance = tolerance
3034 self .extensions = extensions or extension .Extensions ()
3135
32- def optimization_at (
33- self ,
34- circuit : _circuit .Circuit ,
35- index : int ,
36- op : ops .Operation
37- ) -> Optional [optimization_pass .PointOptimizationSummary ]:
38-
39- bounded = self .extensions .try_cast (ops .BoundedEffect , op )
40- if bounded is None or bounded .trace_distance_bound () > self .tolerance :
41- return None
42-
43- return optimization_pass .PointOptimizationSummary (
44- clear_span = 1 ,
45- new_operations = (),
46- clear_qubits = op .qubits )
36+ def optimize_circuit (self , circuit : _circuit .Circuit ) -> None :
37+ deletions = [] # type: List[Tuple[int, ops.Operation]]
38+ for moment_index , moment in enumerate (circuit ):
39+ for op in moment .operations :
40+ bounded = self .extensions .try_cast (ops .BoundedEffect , op )
41+ if (bounded is not None and
42+ bounded .trace_distance_bound () <= self .tolerance ):
43+ deletions .append ((moment_index , op ))
44+ circuit .batch_remove (deletions )
0 commit comments