Skip to content

Commit f4bd8b9

Browse files
committed
fix metadata/params
1 parent b9c77bd commit f4bd8b9

2 files changed

Lines changed: 875 additions & 11 deletions

File tree

python/quantum-pecos/src/pecos/circuits/quantum_circuit.py

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -262,14 +262,6 @@ def _add_gate_to_tick(
262262
symbol = symbol.symbol if hasattr(symbol, "symbol") else str(symbol)
263263
symbol_upper = symbol.upper()
264264

265-
# Convert locations to list, filtering out None values (placeholders for logical gates)
266-
loc_list = [loc for loc in locations if loc is not None]
267-
if not loc_list:
268-
# No qubit operands -- store symbol as tick-level metadata
269-
# (e.g., global barriers or marker gates)
270-
tick_handle.meta("_symbol", symbol)
271-
return
272-
273265
# Serialize params for storage (handle tuples -> lists)
274266
def make_serializable(obj: object) -> object:
275267
if isinstance(obj, tuple):
@@ -282,6 +274,16 @@ def make_serializable(obj: object) -> object:
282274

283275
params_json = json.dumps({k: make_serializable(v) for k, v in params.items()}) if params else ""
284276

277+
# Convert locations to list, filtering out None values (placeholders for logical gates)
278+
loc_list = [loc for loc in locations if loc is not None]
279+
if not loc_list:
280+
# No qubit operands -- store symbol and params as tick-level metadata
281+
# (e.g., global barriers or marker gates)
282+
tick_handle.meta("_symbol", symbol)
283+
if params_json:
284+
tick_handle.meta("_params", params_json)
285+
return
286+
285287
# Helper to store original symbol and params in metadata (idempotent - skips if qubit already used)
286288
def add_with_symbol(
287289
method: Callable[..., object],
@@ -757,7 +759,15 @@ def _iter_tick(
757759
if not grouped:
758760
tick_symbol = tick_obj.get_attr("_symbol")
759761
if tick_symbol is not None:
760-
yield tick_symbol, set(), {}
762+
tick_params: JSONDict = {}
763+
tick_params_json = tick_obj.get_attr("_params")
764+
if tick_params_json is not None:
765+
try:
766+
tick_params = json.loads(tick_params_json)
767+
tick_params = self._fix_json_meta(tick_params)
768+
except json.JSONDecodeError:
769+
pass
770+
yield tick_symbol, set(), tick_params
761771
return
762772

763773
# Yield grouped results
@@ -898,7 +908,7 @@ def __setitem__(self, tick: int, item: tuple[GateDict, JSONDict]) -> None:
898908
# Get qubits to discard first
899909
tick_obj = self._inner.get_tick(actual_tick)
900910
if tick_obj is not None:
901-
qubits_to_discard = list(tick_obj.active_qubits())
911+
qubits_to_discard = [int(q) for q in tick_obj.active_qubits()]
902912
if qubits_to_discard:
903913
self._inner.discard(qubits_to_discard, actual_tick)
904914

@@ -926,7 +936,7 @@ def __delitem__(self, tick: int) -> None:
926936
actual_tick = tick if tick >= 0 else len(self) + tick
927937
tick_obj = self._inner.get_tick(actual_tick)
928938
if tick_obj is not None:
929-
qubits_to_discard = list(tick_obj.active_qubits())
939+
qubits_to_discard = [int(q) for q in tick_obj.active_qubits()]
930940
if qubits_to_discard:
931941
self._inner.discard(qubits_to_discard, actual_tick)
932942

0 commit comments

Comments
 (0)