diff --git a/cirq-core/cirq/transformers/drop_negligible_operations.py b/cirq-core/cirq/transformers/drop_negligible_operations.py index 51c11366e83..1e6091004c3 100644 --- a/cirq-core/cirq/transformers/drop_negligible_operations.py +++ b/cirq-core/cirq/transformers/drop_negligible_operations.py @@ -48,7 +48,11 @@ def drop_negligible_operations( def map_func(op: 'cirq.Operation', _: int) -> 'cirq.OP_TREE': return ( - op if protocols.is_measurement(op) or protocols.trace_distance_bound(op) > atol else [] + op + if protocols.num_qubits(op) > 10 + or protocols.is_measurement(op) + or protocols.trace_distance_bound(op) > atol + else [] ) return transformer_primitives.map_operations( diff --git a/cirq-core/cirq/transformers/drop_negligible_operations_test.py b/cirq-core/cirq/transformers/drop_negligible_operations_test.py index cf2371f6380..bc4441398b0 100644 --- a/cirq-core/cirq/transformers/drop_negligible_operations_test.py +++ b/cirq-core/cirq/transformers/drop_negligible_operations_test.py @@ -94,3 +94,16 @@ def test_recursively_runs_inside_circuit_ops_deep(): cirq.testing.assert_same_circuits( cirq.drop_negligible_operations(c_orig, context=context, atol=0.001), c_expected ) + + +def test_ignores_large_ops(): + qnum = 20 + qubits = cirq.LineQubit.range(qnum) + subcircuit = cirq.FrozenCircuit(cirq.X.on_each(*qubits)) + circuit = cirq.Circuit( + cirq.CircuitOperation(subcircuit).repeat(10), cirq.measure(*qubits, key='out') + ) + cirq.testing.assert_same_circuits( + circuit, + cirq.drop_negligible_operations(circuit, context=cirq.TransformerContext(deep=True)), + )