@@ -3230,6 +3230,77 @@ module stdlib_linalg_lapack
32303230#:endfor
32313231 end interface geqrt3
32323232
3233+ interface geqp3
3234+ !! GEQP3 computes a QR factorization with column pivoting of a complex
3235+ !! M-by-N matrix A:
3236+ !!
3237+ !! A * P = Q * R,
3238+ !!
3239+ !! where:
3240+ !! Q is an M-by-min(M, N) orthogonal matrix
3241+ !! R is an min(M, N)-by-N upper triangular matrix;
3242+ #:for ik, it, ii in LINALG_INT_KINDS_TYPES
3243+ #ifdef STDLIB_EXTERNAL_LAPACK${ii}$
3244+ pure subroutine sgeqp3(m, n, a, lda, jpvt, tau, work, lwork, info)
3245+ import sp, dp, qp, ${ik}$, lk
3246+ implicit none
3247+ integer(${ik}$), intent(in) :: m, n, lda, lwork
3248+ integer(${ik}$), intent(out) :: info
3249+ integer(${ik}$), intent(inout) :: jpvt(*)
3250+ real(sp), intent(inout) :: a(lda, *)
3251+ real(sp), intent(out) :: tau(*), work(*)
3252+ end subroutine sgeqp3
3253+
3254+ pure subroutine dgeqp3(m, n, a, lda, jpvt, tau, work, lwork, info)
3255+ import sp, dp, qp, ${ik}$, lk
3256+ implicit none
3257+ integer(${ik}$), intent(in) :: m, n, lda, lwork
3258+ integer(${ik}$), intent(out) :: info
3259+ integer(${ik}$), intent(inout) :: jpvt(*)
3260+ real(dp), intent(inout) :: a(lda, *)
3261+ real(dp), intent(out) :: tau(*), work(*)
3262+ end subroutine dgeqp3
3263+
3264+ pure subroutine cgeqp3(m, n, a, lda, jpvt, tau, work, lwork, rwork, info)
3265+ import sp, dp, qp, ${ik}$, lk
3266+ implicit none
3267+ integer(${ik}$), intent(in) :: m, n, lda, lwork
3268+ integer(${ik}$), intent(out) :: info
3269+ integer(${ik}$), intent(inout) :: jpvt(*)
3270+ complex(sp), intent(inout) :: a(lda, *)
3271+ complex(sp), intent(out) :: tau(*), work(*)
3272+ real(sp), intent(out) :: rwork(*)
3273+ end subroutine cgeqp3
3274+
3275+ pure subroutine zgeqp3(m, n, a, lda, jpvt, tau, work, lwork, rwork, info)
3276+ import sp, dp, qp, ${ik}$, lk
3277+ implicit none
3278+ integer(${ik}$), intent(in) :: m, n, lda, lwork
3279+ integer(${ik}$), intent(out) :: info
3280+ integer(${ik}$), intent(inout) :: jpvt(*)
3281+ complex(dp), intent(inout) :: a(lda, *)
3282+ complex(dp), intent(out) :: tau(*), work(*)
3283+ real(dp), intent(out) :: rwork(*)
3284+ end subroutine zgeqp3
3285+ #else
3286+ module procedure stdlib${ii}$_sgeqp3
3287+ module procedure stdlib${ii}$_dgeqp3
3288+ module procedure stdlib${ii}$_cgeqp3
3289+ module procedure stdlib${ii}$_zgeqp3
3290+ #endif
3291+ #:for rk, rt, ri in REAL_KINDS_TYPES
3292+ #:if not rk in ["sp", "dp"]
3293+ module procedure stdlib${ii}$_${ri}$geqrf
3294+ #:endif
3295+ #:endfor
3296+ #:for rk, rt, ri in CMPLX_KINDS_TYPES
3297+ #:if not rk in ["sp", "dp"]
3298+ module procedure stdlib${ii}$_${ri}$geqrf
3299+ #:endif
3300+ #:endfor
3301+ #:endfor
3302+ end interface geqp3
3303+
32333304 interface gerfs
32343305 !! GERFS improves the computed solution to a system of linear
32353306 !! equations and provides error bounds and backward error estimates for
0 commit comments