From 65141e7aa9627f837ab34dc3edf771071732e9f9 Mon Sep 17 00:00:00 2001 From: Miloslav Metelka <miloslav.metelka@oracle.com> Date: Mon, 5 Feb 2018 23:52:11 +0100 Subject: [PATCH] Implemented backsolve internal builtin. --- .../r/ffi/impl/llvm/TruffleLLVM_Lapack.java | 19 ++++++ .../ffi/impl/managed/Managed_LapackRFFI.java | 5 ++ .../r/ffi/impl/nfi/TruffleNFI_Lapack.java | 19 ++++++ .../fficall/src/truffle_common/lapack_rffi.c | 12 +++- .../r/nodes/builtin/base/BasePackage.java | 1 + .../r/nodes/builtin/base/LaFunctions.java | 61 +++++++++++++++++++ .../truffle/r/nodes/builtin/InternalNode.java | 2 +- .../com/oracle/truffle/r/runtime/RError.java | 3 +- .../truffle/r/runtime/ffi/LapackRFFI.java | 11 ++++ .../truffle/r/runtime/ffi/NativeFunction.java | 1 + .../truffle/r/test/ExpectedTestOutput.test | 6 +- .../test/builtins/TestBuiltin_backsolve.java | 14 ++--- 12 files changed, 138 insertions(+), 16 deletions(-) diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/llvm/TruffleLLVM_Lapack.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/llvm/TruffleLLVM_Lapack.java index e86d8513af..8b0dd78755 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/llvm/TruffleLLVM_Lapack.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/llvm/TruffleLLVM_Lapack.java @@ -290,6 +290,20 @@ public class TruffleLLVM_Lapack implements LapackRFFI { } + private static final class TruffleLLVM_DtrsmNode extends TruffleLLVM_DownCallNode implements DtrsmNode { + + @Override + protected NativeFunction getFunction() { + return NativeFunction.dtrsm; + } + + @Override + public void execute(String side, String uplo, String transa, String diag, int m, int n, double alpha, double[] a, int lda, double[] b, int ldb) { + call(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb); + } + + } + @Override public IlaverNode createIlaverNode() { return new TruffleLLVM_IlaverNode(); @@ -369,4 +383,9 @@ public class TruffleLLVM_Lapack implements LapackRFFI { public ZtrtrsNode createZtrtrsNode() { return new TruffleLLVM_ZtrtrsNode(); } + + @Override + public DtrsmNode createDtrsmNode() { + return new TruffleLLVM_DtrsmNode(); + } } diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/managed/Managed_LapackRFFI.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/managed/Managed_LapackRFFI.java index 3d61d02b14..bc1cb7872e 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/managed/Managed_LapackRFFI.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/managed/Managed_LapackRFFI.java @@ -106,4 +106,9 @@ public class Managed_LapackRFFI implements LapackRFFI { public ZtrtrsNode createZtrtrsNode() { throw unsupported("lapack"); } + + @Override + public DtrsmNode createDtrsmNode() { + throw unsupported("lapack"); + } } diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Lapack.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Lapack.java index c98b63af6e..6138264648 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Lapack.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Lapack.java @@ -222,6 +222,20 @@ public class TruffleNFI_Lapack implements LapackRFFI { } } + private static class TruffleNFI_DtrsmNode extends TruffleNFI_DownCallNode implements DtrsmNode { + + @Override + protected NativeFunction getFunction() { + return NativeFunction.dtrsm; + } + + @Override + public void execute(String side, String uplo, String transa, String diag, int m, int n, double alpha, double[] a, int lda, double[] b, int ldb) { + call(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb); + } + + } + @Override public IlaverNode createIlaverNode() { return new TruffleNFI_IlaverNode(); @@ -301,4 +315,9 @@ public class TruffleNFI_Lapack implements LapackRFFI { public ZtrtrsNode createZtrtrsNode() { return new TruffleNFI_ZtrtrsNode(); } + + @Override + public DtrsmNode createDtrsmNode() { + return new TruffleNFI_DtrsmNode(); + } } diff --git a/com.oracle.truffle.r.native/fficall/src/truffle_common/lapack_rffi.c b/com.oracle.truffle.r.native/fficall/src/truffle_common/lapack_rffi.c index 99255818bc..f4dfc99275 100644 --- a/com.oracle.truffle.r.native/fficall/src/truffle_common/lapack_rffi.c +++ b/com.oracle.truffle.r.native/fficall/src/truffle_common/lapack_rffi.c @@ -159,7 +159,6 @@ int call_lapack_zunmqr(const char *side, const char *trans, int m, int n, int k, return info; } - extern void ztrtrs_(const char *uplo, const char *trans, const char *diag, const int *n, const int *nrhs, Rcomplex *a, const int *lda, @@ -172,3 +171,14 @@ int call_lapack_ztrtrs(const char *uplo, const char *trans, const char *diag, return info; } +extern void dtrsm_(const char *side, const char *uplo, + const char *transa, const char *diag, + const int *m, const int *n, const double *alpha, + const double *a, const int *lda, + double *b, const int *ldb); + +void call_lapack_dtrsm(const char *side, const char *uplo, const char *transa, const char *diag, + int m, int n, double alpha, double *a, int lda, double *b, int ldb) { + dtrsm_(side, uplo, transa, diag, &m, &n, &alpha, a, &lda, b, &ldb); +} + diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java index a2bd261a01..17a34fa9a8 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java @@ -602,6 +602,7 @@ public class BasePackage extends RBuiltinPackage { add(LaFunctions.LaSolve.class, LaFunctionsFactory.LaSolveNodeGen::create); add(LaFunctions.Svd.class, LaFunctionsFactory.SvdNodeGen::create); add(LaFunctions.LaLibrary.class, LaFunctionsFactory.LaLibraryNodeGen::create); + add(LaFunctions.Backsolve.class, LaFunctionsFactory.BacksolveNodeGen::create); add(Lapply.class, LapplyNodeGen::create); add(Length.class, LengthNodeGen::create); add(Lengths.class, LengthsNodeGen::create); diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LaFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LaFunctions.java index 49f5c90d3a..88be8006f5 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LaFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LaFunctions.java @@ -17,6 +17,8 @@ import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.doubleValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.emptyDoubleVector; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.gt; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.instanceOf; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.integerValue; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.logicalValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.matrix; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.missingValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.not; @@ -24,6 +26,7 @@ import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.notEmpty; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.nullValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.numericValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.or; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.singleElement; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.squareMatrix; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.stringValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.toBoolean; @@ -879,4 +882,62 @@ public class LaFunctions { return RDataFactory.createStringVector(LibPaths.getBuiltinLibPath("Rlapack")); } } + + @RBuiltin(name = "backsolve", kind = INTERNAL, parameterNames = {"r", "b", "k", "upper.tri", "transpose"}, behavior = PURE) + public abstract static class Backsolve extends RBuiltinNode.Arg5 { + + static { + Casts casts = new Casts(Backsolve.class); + casts.arg(0).asDoubleVector(false, true, false).mustBe(matrix()); + casts.arg(1).asDoubleVector(false, true, false).mustBe(matrix()); + casts.arg(2).mustBe(integerValue()).asIntegerVector().mustBe(singleElement()).findFirst().mustNotBeNA(Message.INVALID_ARG, "k"); + casts.arg(3).mustBe(logicalValue()).asLogicalVector().mustBe(singleElement()).findFirst().mustNotBeNA(Message.INVALID_ARG, "upper.tri").map(toBoolean()); + casts.arg(4).mustBe(logicalValue()).asLogicalVector().mustBe(singleElement()).findFirst().mustNotBeNA(Message.INVALID_ARG, "transpose").map(toBoolean()); + } + + @Child private LapackRFFI.DtrsmNode dtrsmNode = LapackRFFI.DtrsmNode.create(); + + @Specialization + Object doBacksolve(RAbstractDoubleVector r, RAbstractDoubleVector b, int k, boolean upperTri, boolean transpose, + @Cached("create()") GetDimAttributeNode getRDimAttribute, + @Cached("create()") GetDimAttributeNode getBDimAttribute, + @Cached("create()") GetReadonlyData.Double getReadonlyData, + @Cached("create()") VectorFactory resultVectorFactory) { + int[] rDims = getRDimAttribute.getDimensions(r); + int[] bDims = getBDimAttribute.getDimensions(b); + int nrr = rDims[0]; + int ncr = rDims[1]; + int nrb = bDims[0]; + int ncb = bDims[1]; + // k is the number of rows to be used: there must be at least that + // many rows and cols in the rhs and at least that many rows on + // the rhs. + if (k <= 0 || k > nrr || k > ncr || k > nrb) { + throw error(Message.INVALID_ARG, "k"); + } + + double[] rData = getReadonlyData.execute(r.materialize()); + // Check for zeros on diagonal of r: only k row/cols are used. + int incr = nrr + 1; + for (int i = 0; i < k; i++) { + if (rData[i * incr] == 0d) { + throw error(Message.SINGULAR_BACKSOLVE, i + 1); + } + } + + double[] resultData = new double[k * ncb]; + if (k > 0 && ncb > 0) { + // Copy (part) cols of b to result. + double[] bData = getReadonlyData.execute(b.materialize()); + for (int j = 0; j < ncb; j++) { + System.arraycopy(bData, j * nrb, resultData, j * k, k); + } + dtrsmNode.execute("L", upperTri ? "U" : "L", transpose ? "T" : "N", "N", + k, ncb, 1d, rData, nrr, resultData, k); + } + return resultVectorFactory.createDoubleVector(resultData, b.isComplete(), new int[]{k, ncb}); + } + + } + } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/InternalNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/InternalNode.java index 4a11ceb7f0..3129ac1ec9 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/InternalNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/InternalNode.java @@ -340,7 +340,7 @@ public abstract class InternalNode extends OperatorNode { * listing of missing builtins. */ private static final List<String> NOT_IMPLEMENTED = Arrays.asList( - ".addTryHandlers", "interruptsSuspended", "restart", "backsolve", "max.col", "comment", "`comment<-`", "list2env", "tcrossprod", + ".addTryHandlers", "interruptsSuspended", "restart", "max.col", "comment", "`comment<-`", "list2env", "tcrossprod", "beta", "dchisq", "pchisq", "qchisq", "dexp", "pexp", "qexp", "dgeom", "pgeom", "qgeom", "dpois", "ppois", "qpois", "dt", "pt", "qt", "dsignrank", "psignrank", "qsignrank", "besselJ", "besselY", "psigamma", "dbeta", "pbeta", "qbeta", "dbinom", "pbinom", "qbinom", "dcauchy", "pcauchy", "qcauchy", "df", "pf", "qf", "dgamma", "pgamma", "qgamma", "dlnorm", "plnorm", "qlnorm", "dlogis", "plogis", "qlogis", "dnbinom", "pnbinom", "qnbinom", "dnorm", "pnorm", "qnorm", "dunif", "punif", "qunif", "dweibull", "pweibull", diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RError.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RError.java index 26cb1c5f0f..529b416957 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RError.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RError.java @@ -941,7 +941,8 @@ public final class RError extends RuntimeException implements TruffleException { MUSTNOT_CONTAIN_NAS("argument '%s' must not contain NAs"), VERSION_N_NOT_SUPPORTED("version %d not supported"), ATOMIC_VECTOR_ARGUMENTS_ONLY("atomic vector arguments only"), - MUST_BE_COMPLEX_MATRIX("'%s' must be a complex matrix"); + MUST_BE_COMPLEX_MATRIX("'%s' must be a complex matrix"), + SINGULAR_BACKSOLVE("singular matrix in 'backsolve'. First zero in diagonal [%d]"); public final String message; final boolean hasArgs; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/LapackRFFI.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/LapackRFFI.java index a13556a6f8..eaff8035fc 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/LapackRFFI.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/LapackRFFI.java @@ -207,6 +207,15 @@ public interface LapackRFFI { } } + interface DtrsmNode extends NodeInterface { + + void execute(String side, String uplo, String transa, String diag, int m, int n, double alpha, double[] a, int lda, double[] b, int ldb); + + static DtrsmNode create() { + return RFFIFactory.getLapackRFFI().createDtrsmNode(); + } + } + IlaverNode createIlaverNode(); DgeevNode createDgeevNode(); @@ -239,4 +248,6 @@ public interface LapackRFFI { ZtrtrsNode createZtrtrsNode(); + DtrsmNode createDtrsmNode(); + } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/NativeFunction.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/NativeFunction.java index 7ea60974f1..0534eaa651 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/NativeFunction.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/NativeFunction.java @@ -73,6 +73,7 @@ public enum NativeFunction { "call_lapack_"), zunmqr("(string, string, sint32, sint32, sint32, [double], sint32, [double], [double], sint32, [double], sint32) : sint32", "call_lapack_"), ztrtrs("(string, string, string, sint32, sint32, [double], sint32, [double], sint32) : sint32", "call_lapack_"), + dtrsm("(string, string, string, string, sint32, sint32, double, [double], sint32, [double], sint32) : void", "call_lapack_"), // misc exactSumFunc("([double], sint32, sint32, sint32): double", "call_misc_"), dqrls("([double], sint32, sint32, [double], sint32, double, [double], [double], [double], [sint32], [sint32], [double], [double]): void", "call_misc_"), diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test index a5ef46f5b7..707347e842 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test @@ -10104,7 +10104,7 @@ attr(,"foo") #argv <- structure(list(structure(list(), class = structure('L', package = '.GlobalEnv')), value = NULL), .Names = c('', 'value'));do.call('attributes<-', argv) list() -##com.oracle.truffle.r.test.builtins.TestBuiltin_backsolve.testbacksolve1#Ignored.Unimplemented# +##com.oracle.truffle.r.test.builtins.TestBuiltin_backsolve.testbacksolve1# #argv <- list(structure(c(-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421675318334475, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421675318334475, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.445407110781343, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592753100948471, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428419619610855, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.252201198430086, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428419619610855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592753100948472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592753100948472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, -0.252201198430086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, -0.252201198430086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, -0.0421675318334475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -0.0421675318334475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.935285871700694), .Dim = c(22L, 22L), .Dimnames = list(c('StripS01', 'StripS02', 'StripS03', 'StripS04', 'StripS05', 'StripS06', 'StripS07', 'StripS08', 'StripS09', 'StripS10', 'StripS11', 'StripS12', 'StripS13', 'StripS14', 'StripS15', 'StripS16', 'StripS17', 'StripS18', 'StripS19', 'StripS20', 'StripS21', ''), c('3', '4', '5', '6', '9', '10', '11', '12', '13', '14', '15', '16', '19', '20', '21', '25', '26', '27', '31', '32', '33', '39'))), structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00019677474442243), .Dim = c(22L, 1L)), 22L, FALSE, FALSE); .Internal(backsolve(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]])) [,1] [1,] 0.0000000000 @@ -10130,7 +10130,7 @@ list() [21,] 0.0000000000 [22,] -0.0002103899 -##com.oracle.truffle.r.test.builtins.TestBuiltin_backsolve.testbacksolve2#Ignored.Unimplemented# +##com.oracle.truffle.r.test.builtins.TestBuiltin_backsolve.testbacksolve2# #argv <- list(structure(c(-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421590411210753, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421590411210753, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.445373554228914, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592635069735823, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428392065749892, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.252172670570357, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428392065749892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592635069735823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592635069735823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, -0.252172670570357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, -0.252172670570357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, -0.0421590411210753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -0.0421590411210753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, -0.0486599542810648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, -0.0486599542810647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, -0.0486599542810648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, -0.0486599542810648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.935253697073914), .Dim = c(22L, 22L), .Dimnames = list(c('StripS01', 'StripS02', 'StripS03', 'StripS04', 'StripS05', 'StripS06', 'StripS07', 'StripS08', 'StripS09', 'StripS10', 'StripS11', 'StripS12', 'StripS13', 'StripS14', 'StripS15', 'StripS16', 'StripS17', 'StripS18', 'StripS19', 'StripS20', 'StripS21', ''), c('3', '4', '5', '6', '9', '10', '11', '12', '13', '14', '15', '16', '19', '20', '21', '25', '26', '27', '31', '32', '33', '39'))), structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.20033559004316e-05), .Dim = c(22L, 1L)), 22L, FALSE, FALSE); .Internal(backsolve(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]])) [,1] [1,] 0.000000e+00 @@ -10156,7 +10156,7 @@ list() [21,] 0.000000e+00 [22,] -1.283433e-05 -##com.oracle.truffle.r.test.builtins.TestBuiltin_backsolve.testbacksolve3#Ignored.Unimplemented# +##com.oracle.truffle.r.test.builtins.TestBuiltin_backsolve.testbacksolve3# #argv <- list(structure(c(-0.91092349872819, -1.26769315823132, 0, -1.11965595698793), .Dim = c(2L, 2L)), structure(c(-0.000210872744086474, 0.000210873298561107), .Dim = c(2L, 1L)), 2L, FALSE, FALSE); .Internal(backsolve(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]])) [,1] [1,] 0.0002314934 diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_backsolve.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_backsolve.java index 7a04dcd584..63e16f0497 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_backsolve.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_backsolve.java @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2014, Purdue University - * Copyright (c) 2014, 2017, Oracle and/or its affiliates + * Copyright (c) 2014, 2018, Oracle and/or its affiliates * * All rights reserved. */ @@ -19,22 +19,16 @@ public class TestBuiltin_backsolve extends TestBase { @Test public void testbacksolve1() { - // FIXME RInternalError: not implemented: .Internal backsolve - assertEval(Ignored.Unimplemented, - "argv <- list(structure(c(-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421675318334475, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421675318334475, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.445407110781343, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592753100948471, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428419619610855, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.252201198430086, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428419619610855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592753100948472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592753100948472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, -0.252201198430086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, -0.252201198430086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, -0.0421675318334475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -0.0421675318334475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.935285871700694), .Dim = c(22L, 22L), .Dimnames = list(c('StripS01', 'StripS02', 'StripS03', 'StripS04', 'StripS05', 'StripS06', 'StripS07', 'StripS08', 'StripS09', 'StripS10', 'StripS11', 'StripS12', 'StripS13', 'StripS14', 'StripS15', 'StripS16', 'StripS17', 'StripS18', 'StripS19', 'StripS20', 'StripS21', ''), c('3', '4', '5', '6', '9', '10', '11', '12', '13', '14', '15', '16', '19', '20', '21', '25', '26', '27', '31', '32', '33', '39'))), structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00019677474442243), .Dim = c(22L, 1L)), 22L, FALSE, FALSE); .Internal(backsolve(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))"); + assertEval("argv <- list(structure(c(-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421675318334475, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421675318334475, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.445407110781343, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592753100948471, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428419619610855, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.252201198430086, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428419619610855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510819156714975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592753100948472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592753100948472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, -0.252201198430086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, -0.252201198430086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, -0.0421675318334475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -0.0421675318334475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, -0.0486697428190666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.935285871700694), .Dim = c(22L, 22L), .Dimnames = list(c('StripS01', 'StripS02', 'StripS03', 'StripS04', 'StripS05', 'StripS06', 'StripS07', 'StripS08', 'StripS09', 'StripS10', 'StripS11', 'StripS12', 'StripS13', 'StripS14', 'StripS15', 'StripS16', 'StripS17', 'StripS18', 'StripS19', 'StripS20', 'StripS21', ''), c('3', '4', '5', '6', '9', '10', '11', '12', '13', '14', '15', '16', '19', '20', '21', '25', '26', '27', '31', '32', '33', '39'))), structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00019677474442243), .Dim = c(22L, 1L)), 22L, FALSE, FALSE); .Internal(backsolve(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))"); } @Test public void testbacksolve2() { - // FIXME RInternalError: not implemented: .Internal backsolve - assertEval(Ignored.Unimplemented, - "argv <- list(structure(c(-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421590411210753, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421590411210753, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.445373554228914, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592635069735823, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428392065749892, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.252172670570357, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428392065749892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592635069735823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592635069735823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, -0.252172670570357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, -0.252172670570357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, -0.0421590411210753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -0.0421590411210753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, -0.0486599542810648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, -0.0486599542810647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, -0.0486599542810648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, -0.0486599542810648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.935253697073914), .Dim = c(22L, 22L), .Dimnames = list(c('StripS01', 'StripS02', 'StripS03', 'StripS04', 'StripS05', 'StripS06', 'StripS07', 'StripS08', 'StripS09', 'StripS10', 'StripS11', 'StripS12', 'StripS13', 'StripS14', 'StripS15', 'StripS16', 'StripS17', 'StripS18', 'StripS19', 'StripS20', 'StripS21', ''), c('3', '4', '5', '6', '9', '10', '11', '12', '13', '14', '15', '16', '19', '20', '21', '25', '26', '27', '31', '32', '33', '39'))), structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.20033559004316e-05), .Dim = c(22L, 1L)), 22L, FALSE, FALSE); .Internal(backsolve(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))"); + assertEval("argv <- list(structure(c(-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421590411210753, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0421590411210753, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.445373554228914, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592635069735823, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428392065749892, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.252172670570357, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.428392065749892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.510781706167877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592635069735823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, 0, -0.0592635069735823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, 0, -0.252172670570357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.4142135623731, 0, 0, 0, 0, 0, 0, -0.252172670570357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, -0.0421590411210753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -0.0421590411210753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, 0, -0.0486599542810648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, 0, -0.0486599542810647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, 0, -0.0486599542810648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.73205080756888, -0.0486599542810648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.935253697073914), .Dim = c(22L, 22L), .Dimnames = list(c('StripS01', 'StripS02', 'StripS03', 'StripS04', 'StripS05', 'StripS06', 'StripS07', 'StripS08', 'StripS09', 'StripS10', 'StripS11', 'StripS12', 'StripS13', 'StripS14', 'StripS15', 'StripS16', 'StripS17', 'StripS18', 'StripS19', 'StripS20', 'StripS21', ''), c('3', '4', '5', '6', '9', '10', '11', '12', '13', '14', '15', '16', '19', '20', '21', '25', '26', '27', '31', '32', '33', '39'))), structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.20033559004316e-05), .Dim = c(22L, 1L)), 22L, FALSE, FALSE); .Internal(backsolve(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))"); } @Test public void testbacksolve3() { - // FIXME RInternalError: not implemented: .Internal backsolve - assertEval(Ignored.Unimplemented, - "argv <- list(structure(c(-0.91092349872819, -1.26769315823132, 0, -1.11965595698793), .Dim = c(2L, 2L)), structure(c(-0.000210872744086474, 0.000210873298561107), .Dim = c(2L, 1L)), 2L, FALSE, FALSE); .Internal(backsolve(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))"); + assertEval("argv <- list(structure(c(-0.91092349872819, -1.26769315823132, 0, -1.11965595698793), .Dim = c(2L, 2L)), structure(c(-0.000210872744086474, 0.000210873298561107), .Dim = c(2L, 1L)), 2L, FALSE, FALSE); .Internal(backsolve(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]]))"); } } -- GitLab