|
| 1 | +####################################################### |
| 2 | +# Copyright (c) 2014, ArrayFire |
| 3 | +# All rights reserved. |
| 4 | +# |
| 5 | +# This file is distributed under 3-clause BSD license. |
| 6 | +# The complete license agreement can be obtained at: |
| 7 | +# http://arrayfire.com/licenses/BSD-3-Clause |
| 8 | +######################################################## |
| 9 | + |
| 10 | +from .library import * |
| 11 | +from .array import * |
| 12 | + |
| 13 | +def lu(A): |
| 14 | + L = array() |
| 15 | + U = array() |
| 16 | + P = array() |
| 17 | + safe_call(clib.af_lu(pointer(L.arr), pointer(U.arr), pointer(P.arr), A.arr)) |
| 18 | + return L,U,P |
| 19 | + |
| 20 | +def lu_inplace(A, pivot="lapack"): |
| 21 | + P = array() |
| 22 | + is_pivot_lapack = False if (pivot == "full") else True |
| 23 | + safe_call(clib.af_lu_inplace(pointer(P.arr), A.arr, is_pivot_lapack)) |
| 24 | + return P |
| 25 | + |
| 26 | +def qr(A): |
| 27 | + Q = array() |
| 28 | + R = array() |
| 29 | + T = array() |
| 30 | + safe_call(clib.af_lu(pointer(Q.arr), pointer(R.arr), pointer(T.arr), A.arr)) |
| 31 | + return Q,R,T |
| 32 | + |
| 33 | +def qr_inplace(A): |
| 34 | + T = array() |
| 35 | + safe_call(clib.af_qr_inplace(pointer(T.arr), A.arr)) |
| 36 | + return T |
| 37 | + |
| 38 | +def cholesky(A, is_upper=True): |
| 39 | + R = array() |
| 40 | + info = c_int(0) |
| 41 | + safe_call(clib.af_cholesky(pointer(R.arr), pointer(info), A.arr, is_upper)) |
| 42 | + return R, info.value |
| 43 | + |
| 44 | +def cholesky_inplace(A, is_upper=True): |
| 45 | + info = c_int(0) |
| 46 | + safe_call(clib.af_cholesky_inplace(pointer(info), A.arr, is_upper)) |
| 47 | + return info.value |
| 48 | + |
| 49 | +def solve(A, B, options=AF_MAT_NONE): |
| 50 | + X = array() |
| 51 | + safe_call(clib.af_solve(pointer(X.arr), A.arr, B.arr, options)) |
| 52 | + return X |
| 53 | + |
| 54 | +def solve_lu(A, P, B, options=AF_MAT_NONE): |
| 55 | + X = array() |
| 56 | + safe_call(clib.af_solve_lu(pointer(X.arr), A.arr, P.arr, B.arr, options)) |
| 57 | + return X |
| 58 | + |
| 59 | +def inverse(A, options=AF_MAT_NONE): |
| 60 | + I = array() |
| 61 | + safe_call(clib.af_inverse(pointer(I.arr), A.arr, options)) |
| 62 | + return I |
| 63 | + |
| 64 | +def rank(A, tol=1E-5): |
| 65 | + r = c_uint(0) |
| 66 | + safe_call(clib.af_rank(pointer(r), A.arr, c_double(tol))) |
| 67 | + return r.value |
| 68 | + |
| 69 | +def det(A): |
| 70 | + re = c_double(0) |
| 71 | + im = c_double(0) |
| 72 | + safe_call(clib.af_det(pointer(re), pointer(im), A.arr)) |
| 73 | + re = re.value |
| 74 | + im = im.value |
| 75 | + return re if (im == 0) else re + im * 1j |
| 76 | + |
| 77 | +def norm(A, norm_type=AF_NORM_EUCLID, p=1.0, q=1.0): |
| 78 | + res = c_double(0) |
| 79 | + safe_call(clib.af_norm(pointer(res), A.arr, norm_type, c_double(p), c_double(q))) |
| 80 | + return res.value |
0 commit comments