`tfq_ps_decompose` truncates decomposed moments when `PhasedISwapPowGate` shares a `Moment` with `PhasedXPowGate` or `FSimGate`
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 74/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- python, tensorflow
- Área
- backend, machine-learning, testing-qa
Línea de trabajo
Read tensorflow_quantum/core/ops/tfq_ps_decompose_op.cc, especially TfqPsDecomposeOp::Compute around lines 71–147, and inspect the decomposition tests for tfq_ps_decompose. Reproduce the issue with the supplied circuit and compare the original and decomposed unitaries. Done means the output retains all six moments and the decomposed circuit matches the original unitary for the reproducer.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
In TfqPsDecomposeOp::Compute (tensorflow_quantum/core/ops/tfq_ps_decompose_op.cc, lines 71–147), each Moment initializes int num_extra_moments = 0; and decomposes parameterized gates across cur_moment plus up to max_buffer_moments = 5 extra moments in temp_moment_list:
PISP(cirq.PhasedISwapPowGate, line 82) populatestemp_moment_list[0..4]and setsnum_extra_moments = 5;.ISP(cirq.ISwapPowGate, line 102) populatestemp_moment_list[0]and guards the update withif (num_extra_moments == 0) num_extra_moments = 1;.PXP(cirq.PhasedXPowGate, line 115) populatestemp_moment_list[0..1]and unconditionally assignsnum_extra_moments = 2;.FSIM(cirq.FSimGate, line 130) populatestemp_moment_list[0..1]and unconditionally assignsnum_extra_moments = 2;.
If a single Moment contains a parameterized PhasedISwapPowGate followed by a parameterized PhasedXPowGate or FSimGate on disjoint qubits, the later PXP or FSIM branch overwrites num_extra_moments from 5 down to 2. When extra moments are appended at lines 142–147, temp_moment_list[2] (YYP), temp_moment_list[3] (ZP), and temp_moment_list[4] (ZP) from the PhasedISwapPowGate decomposition are silently dropped, changing the circuit unitary and producing incorrect ParameterShift gradients.
Minimal Reproduction
import cirq
import numpy as np
import sympy
import tensorflow_quantum as tfq
from tensorflow_quantum.core.ops import tfq_ps_util_ops
q0, q1, q2 = cirq.GridQubit.rect(1, 3)
alpha = sympy.Symbol("alpha")
beta = sympy.Symbol("beta")
circuit = cirq.Circuit(
cirq.Moment(
cirq.PhasedISwapPowGate(phase_exponent=beta, exponent=alpha).on(q0, q1),
cirq.PhasedXPowGate(phase_exponent=beta, exponent=alpha).on(q2),
)
)
decomposed_tensor = tfq_ps_util_ops.tfq_ps_decompose(
tfq.convert_to_tensor([circuit])
)
decomposed_circuit = tfq.from_tensor(decomposed_tensor)[0]
print("Moment count (expected 6, got):", len(decomposed_circuit.moments))
print(decomposed_circuit)
resolver = {"alpha": 0.35, "beta": 0.72}
u_orig = cirq.unitary(cirq.resolve_parameters(circuit, resolver))
u_decomp = cirq.unitary(cirq.resolve_parameters(decomposed_circuit, resolver))
print("Max unitary difference:", np.max(np.abs(u_orig - u_decomp)))
Observed output:
Moment count (expected 6, got): 3
(0, 0): ───Z^beta──────────────────XX────────────────
│
(0, 1): ───────────────Z^(-beta)───XX^(-0.5*alpha)───
(0, 2): ───Z^(-beta)───X^alpha─────Z^beta────────────
Max unitary difference: 1.400898757622091
Possible Fix
Include <algorithm> and update num_extra_moments using std::max across all decomposed gate branches (num_extra_moments = std::max(num_extra_moments, 5); for PISP, 1 for ISP, and 2 for PXP and FSIM) so earlier decompositions in the same Moment are never truncated.
Related: #1140
- Lenguaje dominante
- Python
- Estrellas
- 2.2k
- Forks
- 674
- Merge medio
- 1 d 14 h
- PR fusionados (30 d)
- 5
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de tensorflow/quantum
-
area/c++ area/core kind/bug-report
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
tensorflow/quantum#1140 ·
Los mantenedores suelen responder en 1 día
-
Avoid hard-coding "quantum" in `scripts/` scriptsPosiblemente ocupada @openbotgit la tomó hace 23 días. Abiertoarea/devops help wanted no QC knowledge needed priority/before-0.7.7
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
tensorflow/quantum#1082 · 2 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
Bug (likely typo) in `core/serialize/serializer_test.py`Posiblemente ocupada @mhucka la tomó hace 15 días. Abiertoarea/serialization area/tests
tensorflow/quantum#1129 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Support Keras 3Quizá libre de nuevo @rosspeili la tomó hace 118 días y no hay ningún pull request abierto. Abiertoarea/keras help wanted skill-level/intermediate
tensorflow/quantum#1090 · 5 comentarios · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Support dynamic quantum circuitsAbiertoarea/circuits priority/after-0.7.7 skill-level/expert
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
tensorflow/quantum#1087 ·
Los mantenedores suelen responder en 1 día
Todos los issues de tensorflow/quantum
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
UKGovernmentBEIS/inspect_ai#6512 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 68/100
Kav-K/GPTDiscord#501 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
UKGovernmentBEIS/inspect_evals#2863 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[Bug]: graphify query loads every language extractor just for _file_stem (about 34 ms per call)Posiblemente ocupada @rohit-jsfreaky la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Graphify-Labs/graphify#5160 · 1 comentario ·
Los mantenedores suelen responder en 2 días