test_trace sporadically fails under numpy
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 68/100
Línea de trabajo
Comienza con array_api_tests/test_linalg.py::test_trace y reproduce el fallo usando el ejemplo de Hypothesis indicado. Comprueba cómo llegan los valores y dtypes generados a xp.linalg.trace y, después, ajusta las entradas de prueba o la estrategia de dtype para que la prueba evite casos de overflow no válidos y siga siendo estable entre versiones de NumPy; se considera terminado cuando test_trace pasa de forma fiable.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Caught in https://github.com/data-apis/array-api-compat/actions/runs/31951617577/job/95175816104?pr=464 : the values are very different:
FAILED array_api_tests/test_linalg.py::test_trace - AssertionError: The input arrays have different values (array(2048, dtype=uint32) != np.uint32(0)) (x_idxes = [(slice(None, None, None), slice(None, None, None))], res_idx = ())
adding @reproduce_failure('6.165.9', b'AEEIAEEEQQQoQfAAABAQAAAAAAAAAUEC'), as suggested by hypothesis shows this:
(Pdb) p x
array([[4.294968e+09, 4.294968e+09, 4.294968e+09, 4.294968e+09],
[4.294968e+09, 4.294968e+09, 4.294968e+09, 4.294968e+09],
[4.294968e+09, 4.294968e+09, 4.294968e+09, 4.294968e+09],
[4.294968e+09, 4.294968e+09, 4.294968e+09, 4.294968e+09]],
dtype=float32)
(Pdb) kw
{'dtype': <class 'numpy.uint32'>}
(Pdb) p xp.linalg.trace(x)
array(1.7179871e+10, dtype=float32) # correct value
(Pdb) p xp.linalg.trace(x, **kw)
array(2048, dtype=uint32) # incorrect
(Pdb) p xp.sum(np.diag(x), **kw) # trace matches sum
np.uint32(2048)
So what happens is that the summation is forced to occur in int32 and it overflows. The behavior comes straight from numpy.
The test effectively casts a float32 array to int32, which is not a very reasonable thing to do, and the (wrong) results depend on the order of operations in fairly unpredictable manner:
(Pdb) p xp.linalg.trace(xp.astype(x, xp.int32))
array(-8589934592)
(Pdb) p xp.linalg.trace(xp.astype(x, xp.int32), dtype=xp.int32)
array(0, dtype=int32)
What to do about it at the test suite level? Not entirely sure. We can either limit the range of values of x or only draw flowing-point dtype for floating-point x, for example.
- Lenguaje dominante
- Python
- Estrellas
- 74
- Forks
- 54
- Merge medio
- 4 h 35 min
- PR fusionados (30 d)
- 4
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
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 data-apis/array-api-tests
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 87/100
data-apis/array-api-tests#465 · 1 comentario ·
-
Test reflected operators?Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
data-apis/array-api-tests#460 · 1 comentario ·
-
tracking
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
data-apis/array-api-tests#381 · 9 comentarios ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 38/100
data-apis/array-api-tests#379 · 10 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
data-apis/array-api-tests#368 · 3 comentarios ·
Todos los issues de data-apis/array-api-tests
Issues similares
-
#bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
apache/superset#44923 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
lawndoc/stack-back#123 ·
-
Add: EntuneAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
AbdelStark/awesome-typesafe-jev#187 ·
Los mantenedores suelen responder en 1 día
-
bug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
repowise-dev/repowise#2966 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Los mantenedores suelen responder en 2 días