Skip to content

Commit 2e4f1a0

Browse files
committed
sync operator behavior with .inv. (return NaNs on error)
1 parent 73f9742 commit 2e4f1a0

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

src/stdlib_linalg_pinv.fypp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,23 @@ submodule(stdlib_linalg) stdlib_linalg_pseudoinverse
110110
${rt}$, intent(in), target :: a(:,:)
111111
!> Result matrix
112112
${rt}$ :: pinva(size(a,2,kind=ilp),size(a,1,kind=ilp))
113+
114+
type(linalg_state_type) :: err
113115

114116
! Use pointer to circumvent svd intent(inout) restriction
115117
${rt}$, pointer :: ap(:,:)
116118
ap => a
117119

118-
call stdlib_linalg_pseudoinvert_${ri}$(ap,pinva)
120+
call stdlib_linalg_pseudoinvert_${ri}$(ap,pinva,err=err)
121+
122+
if (err%error()) then
123+
#:if rt.startswith('real')
124+
pinva = ieee_value(1.0_${rk}$,ieee_quiet_nan)
125+
#:else
126+
pinva = cmplx(ieee_value(1.0_${rk}$,ieee_quiet_nan), &
127+
ieee_value(1.0_${rk}$,ieee_quiet_nan), kind=${rk}$)
128+
#:endif
129+
endif
119130

120131
end function stdlib_linalg_pinv_${ri}$_operator
121132

0 commit comments

Comments
 (0)