Mismatched conformer degrees of freedom pass silently through TST, then surface as a bare "Singular matrix" in the MSC solve
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 65/100
Línea de trabajo
Comienza con Reaction.calculate_tst_rate_coefficient en rmgpy/reaction.py:1441 y la llamada a np.linalg.solve en rmgpy/pdep/msc.pyx. Sigue la advertencia existente de b NaN y determina si deben notificarse las clases de modo que no coinciden o el contexto de una matriz singular. Se considera terminado cuando la discrepancia asimétrica o el fallo de resolución informa de detalles de diagnóstico accionables en lugar de fallar silenciosamente o únicamente con "Singular matrix".
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Ran into both of these while splicing QM transition states into an otherwise RMG-estimated pressure-dependent network, and they compound in a way that made the diagnosis much harder than it needed to be.
If the transition state conformer carries translation and rotation but the wells are vibration-only (or the other way round), Reaction.calculate_tst_rate_coefficient (rmgpy/reaction.py:1441) just multiplies the partition functions together — nothing anywhere in it looks at what modes either side actually has. In my case Q‡/Q_reactant was off by ~1e14 and k_TST(3200 K) came out at 1.8e26 s^-1 for a unimolecular step.
That rescales k(E), and the modified strong collision solve then dies at np.linalg.solve(a_mat, b) in rmgpy/pdep/msc.pyx with nothing but numpy.linalg.LinAlgError: Singular matrix — no grain, no J, no temperature, no pressure. I ended up bisecting by hand down to grain 346 / J=0 / 3200 K / 0.1 bar.
The bit that struck me is that the intent is already there a few lines up: b gets checked with np.isnan and logs a warning naming the grain and the isomer. a_mat has no equivalent check, and it's the argument that actually fails.
A warning in calculate_tst_rate_coefficient when the reactant and TS conformers carry different mode classes, or just the grain/J/T/P coordinates on the singular-matrix failure, would have turned a two-hour hunt into an immediate error message. Either one alone would have done it.
One thing worth flagging for anyone fixing this: the loud failure only happens when the mismatch is asymmetric. I checked afterwards, and if you put translation and rotation on the wells and the TS alike, the partition functions cancel again — the solve succeeds and the rate coefficient comes back unchanged, on a network that's still wrong. So the singular matrix isn't a general tripwire for this, which is an argument for the warning rather than relying on the crash.
Happy to open a PR for both.
- Lenguaje dominante
- Python
- Estrellas
- 539
- Forks
- 264
- Merge medio
- 7 d 19 h
- PR fusionados (30 d)
- 2
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una 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 ReactionMechanismGenerator/RMG-Py
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
ReactionMechanismGenerator/RMG-Py#3014 ·
-
Eckart.calculate_tunneling_function: cancellation in 1 - ratio and missing cos branch for small barriersPosiblemente ocupada @sectio-aurea-q la tomó hace 4 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 42/100
ReactionMechanismGenerator/RMG-Py#3019 ·
-
Arkane ORCA parser misclassifies oblique diatomic OH as a nonlinear rotor due to exact-zero inertia testPosiblemente ocupada @Mohit-Ak la tomó hace 3 días. Abierto
Dificultad 3/5 Medio día Aptitud para principiantes 52/100
ReactionMechanismGenerator/RMG-Py#3016 ·
-
Inconsistent standard state reference pressure (eg. for entropy calculations). 1 bar or 1 atm?Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
ReactionMechanismGenerator/RMG-Py#3015 ·
-
Security incident: compromised account force-pushed malware to RMG repositories (2026-09-06)Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
ReactionMechanismGenerator/RMG-Py#3008 · 2 comentarios ·
Todos los issues de ReactionMechanismGenerator/RMG-Py
Issues similares
-
The changelog workflow excludes otelbot but not dependabot, so every Dependabot pull request fails the changelog checkPosiblemente ocupada @ocelotl la tomó hoy. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
open-telemetry/opentelemetry-python#5825 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
cuga-project/cuga-agent#1020 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 70/100
microsoft/playwright#43640 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
stac-utils/stac-fastapi-elasticsearch-opensearch#965 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día