Skip to content

Commit 523a83e

Browse files
committed
Add tests of all cached properties
1 parent 592bfed commit 523a83e

File tree

2 files changed

+74
-1
lines changed

2 files changed

+74
-1
lines changed

Diff for: cirq-core/cirq/circuits/circuit.py

-1
Original file line numberDiff line numberDiff line change
@@ -1839,7 +1839,6 @@ def _load_contents_with_earliest_strategy(self, contents: 'cirq.OP_TREE'):
18391839
self._moments.append(moments_by_index[i].with_operations(op_lists_by_index[i]))
18401840
else:
18411841
self._moments.append(Moment(op_lists_by_index[i]))
1842-
self._mutated()
18431842

18441843
def __copy__(self) -> 'cirq.Circuit':
18451844
return self.copy()

Diff for: cirq-core/cirq/circuits/circuit_test.py

+74
Original file line numberDiff line numberDiff line change
@@ -4553,6 +4553,80 @@ def test_freeze_is_cached():
45534553
assert f5 is f4
45544554

45554555

4556+
@pytest.mark.parametrize(
4557+
"circuit, mutate",
4558+
[
4559+
(
4560+
cirq.Circuit(cirq.X(cirq.q(0)), cirq.M(cirq.q(0))),
4561+
lambda c: c.__setitem__(0, cirq.Moment(cirq.Y(cirq.q(0)))),
4562+
),
4563+
(cirq.Circuit(cirq.X(cirq.q(0)), cirq.M(cirq.q(0))), lambda c: c.__delitem__(0)),
4564+
(cirq.Circuit(cirq.X(cirq.q(0)), cirq.M(cirq.q(0))), lambda c: c.__imul__(2)),
4565+
(
4566+
cirq.Circuit(cirq.X(cirq.q(0)), cirq.M(cirq.q(0))),
4567+
lambda c: c.insert(1, cirq.Y(cirq.q(0))),
4568+
),
4569+
(
4570+
cirq.Circuit(cirq.X(cirq.q(0)), cirq.M(cirq.q(0))),
4571+
lambda c: c.insert_into_range([cirq.Y(cirq.q(1)), cirq.M(cirq.q(1))], 0, 2),
4572+
),
4573+
(
4574+
cirq.Circuit(cirq.X(cirq.q(0)), cirq.M(cirq.q(0))),
4575+
lambda c: c.insert_at_frontier([cirq.Y(cirq.q(0)), cirq.Y(cirq.q(1))], 1),
4576+
),
4577+
(
4578+
cirq.Circuit(cirq.X(cirq.q(0)), cirq.M(cirq.q(0))),
4579+
lambda c: c.batch_replace([(0, cirq.X(cirq.q(0)), cirq.Y(cirq.q(0)))]),
4580+
),
4581+
(
4582+
cirq.Circuit(cirq.X(cirq.q(0)), cirq.M(cirq.q(0), cirq.q(1))),
4583+
lambda c: c.batch_insert_into([(0, cirq.X(cirq.q(1)))]),
4584+
),
4585+
(
4586+
cirq.Circuit(cirq.X(cirq.q(0)), cirq.M(cirq.q(0))),
4587+
lambda c: c.batch_insert([(1, cirq.Y(cirq.q(0)))]),
4588+
),
4589+
(
4590+
cirq.Circuit(cirq.X(cirq.q(0)), cirq.M(cirq.q(0))),
4591+
lambda c: c.clear_operations_touching([cirq.q(0)], [0]),
4592+
),
4593+
],
4594+
)
4595+
def test_mutation_clears_cached_attributes(circuit, mutate):
4596+
cached_attributes = [
4597+
"_all_qubits",
4598+
"_frozen",
4599+
"_is_measurement",
4600+
"_is_parameterized",
4601+
"_parameter_names",
4602+
]
4603+
4604+
for attr in cached_attributes:
4605+
assert getattr(circuit, attr) is None, f"{attr=} is not None"
4606+
4607+
# Check that attributes are cached after getting them.
4608+
qubits = circuit.all_qubits()
4609+
frozen = circuit.freeze()
4610+
is_measurement = cirq.is_measurement(circuit)
4611+
is_parameterized = cirq.is_parameterized(circuit)
4612+
parameter_names = cirq.parameter_names(circuit)
4613+
4614+
for attr in cached_attributes:
4615+
assert getattr(circuit, attr) is not None, f"{attr=} is None"
4616+
4617+
# Check that getting again returns same object.
4618+
assert circuit.all_qubits() is qubits
4619+
assert circuit.freeze() is frozen
4620+
assert cirq.is_measurement(circuit) is is_measurement
4621+
assert cirq.is_parameterized(circuit) is is_parameterized
4622+
assert cirq.parameter_names(circuit) is parameter_names
4623+
4624+
# Check that attributes are cleared after mutation.
4625+
mutate(circuit)
4626+
for attr in cached_attributes:
4627+
assert getattr(circuit, attr) is None, f"{attr=} is not None"
4628+
4629+
45564630
def test_factorize_one_factor():
45574631
circuit = cirq.Circuit()
45584632
q0, q1, q2 = cirq.LineQubit.range(3)

0 commit comments

Comments
 (0)