8000 ENH: svd sets results to nan on LAPACK error (_gesdd) · numpy/numpy@ec5020c · GitHub
[go: up one dir, main page]

Skip to content

Commit ec5020c

Browse files
ovillellaspv
ovillellas
authored andcommitted
ENH: svd sets results to nan on LAPACK error (_gesdd)
1 parent 7aa26c3 commit ec5020c

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

numpy/core/src/umath/umath_linalg.c.src

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2936,16 +2936,26 @@ static inline void
29362936
}
29372937

29382938
for (iter = 0; iter < outer_dim; ++iter) {
2939+
int not_ok;
29392940
/* copy the matrix in */
29402941
linearize_@TYPE@_matrix(params.A, args[0], &a_in);
2941-
call_@lapack_func@(&params);
2942-
2943-
if ('N' == params.JOBZ) {
2944-
delinearize_@REALTYPE@_matrix(args[1], params.S, &s_out);
2942+
not_ok = call_@lapack_func@(&params);
2943+
if (!not_ok) {
2944+
if ('N' == params.JOBZ) {
2945+
delinearize_@REALTYPE@_matrix(args[1], params.S, &s_out);
2946+
} else {
2947+
delinearize_@TYPE@_matrix(args[1], params.U, &u_out);
2948+
delinearize_@REALTYPE@_matrix(args[2], params.S, &s_out);
2949+
delinearize_@TYPE@_matrix(args[3], params.VT, &v_out);
2950+
}
29452951
} else {
2946-
delinearize_@TYPE@_matrix(args[1], params.U, &u_out);
2947-
delinearize_@REALTYPE@_matrix(args[2], params.S, &s_out);
2948-
delinearize_@TYPE@_matrix(args[3], params.VT, &v_out);
2952+
if ('N' == params.JOBZ) {
2953+
nan_@REALTYPE@_matrix(args[1], &s_out);
2954+
} else {
2955+
nan_@TYPE@_matrix(args[1], &u_out);
2956+
nan_@REALTYPE@_matrix(args[2], &s_out);
2957+
nan_@TYPE@_matrix(args[3], &v_out);
2958+
}
29492959
}
29502960
update_pointers((npy_uint8**)args, outer_steps, op_count);
29512961
}

0 commit comments

Comments
 (0)
0