SCM

SCM Repository

[matrix] Diff of /pkg/Matrix/src/dtCMatrix.c
ViewVC logotype

Diff of /pkg/Matrix/src/dtCMatrix.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 479, Wed Feb 2 14:52:26 2005 UTC revision 677, Mon Mar 28 14:03:32 2005 UTC
# Line 3  Line 3 
3    
4  SEXP tsc_validate(SEXP x)  SEXP tsc_validate(SEXP x)
5  {  {
6        SEXP val;
7    
8        if (isString(val = check_scalar_string(GET_SLOT(x, Matrix_uploSym),
9                                               "LU", "uplo"))) return val;
10        if (isString(val = check_scalar_string(GET_SLOT(x, Matrix_diagSym),
11                                               "NU", "diag"))) return val;
12      return ScalarLogical(1);      return ScalarLogical(1);
13  }  }
14    
# Line 14  Line 20 
20      int nnz = length(islot),      int nnz = length(islot),
21          *adims, *xdims = INTEGER(GET_SLOT(x, Matrix_DimSym));          *adims, *xdims = INTEGER(GET_SLOT(x, Matrix_DimSym));
22    
23        adims = INTEGER(ALLOC_SLOT(ans, Matrix_DimSym, INTSXP, 2));
     SET_SLOT(ans, Matrix_DimSym, allocVector(INTSXP, 2));  
     adims = INTEGER(GET_SLOT(ans, Matrix_DimSym));  
24      adims[0] = xdims[1]; adims[1] = xdims[0];      adims[0] = xdims[1]; adims[1] = xdims[0];
25      if (toupper(CHAR(asChar(GET_SLOT(x, Matrix_uploSym)))[0]) == 'U')      if (CHAR(asChar(GET_SLOT(x, Matrix_uploSym)))[0] == 'U')
26          SET_SLOT(ans, Matrix_uploSym, ScalarString(mkChar("L")));          SET_SLOT(ans, Matrix_uploSym, mkString("L"));
27      SET_SLOT(ans, Matrix_pSym, allocVector(INTSXP, xdims[0] + 1));      csc_compTr(xdims[0], xdims[1], nnz,
28      SET_SLOT(ans, Matrix_iSym, allocVector(INTSXP, nnz));                 INTEGER(GET_SLOT(x, Matrix_pSym)), INTEGER(islot),
     SET_SLOT(ans, Matrix_xSym, allocVector(REALSXP, nnz));  
     csc_components_transpose(xdims[0], xdims[1], nnz,  
                              INTEGER(GET_SLOT(x, Matrix_pSym)),  
                              INTEGER(islot),  
29                               REAL(GET_SLOT(x, Matrix_xSym)),                               REAL(GET_SLOT(x, Matrix_xSym)),
30                               INTEGER(GET_SLOT(ans, Matrix_pSym)),                 INTEGER(ALLOC_SLOT(ans, Matrix_pSym, INTSXP, xdims[0] + 1)),
31                               INTEGER(GET_SLOT(ans, Matrix_iSym)),                 INTEGER(ALLOC_SLOT(ans, Matrix_iSym, INTSXP, nnz)),
32                               REAL(GET_SLOT(ans, Matrix_xSym)));                 REAL(ALLOC_SLOT(ans, Matrix_xSym, REALSXP, nnz)));
33      UNPROTECT(1);      UNPROTECT(1);
34      return ans;      return ans;
35  }  }
# Line 37  Line 37 
37  SEXP tsc_to_dgTMatrix(SEXP x)  SEXP tsc_to_dgTMatrix(SEXP x)
38  {  {
39      SEXP ans;      SEXP ans;
40      if (toupper(CHAR(STRING_ELT(GET_SLOT(x, Matrix_diagSym), 0))[0]) != 'U')      if (CHAR(STRING_ELT(GET_SLOT(x, Matrix_diagSym), 0))[0] != 'U')
41          ans = csc_to_dgTMatrix(x);          ans = compressed_to_dgTMatrix(x, ScalarLogical(1));
42      else {                      /* unit triangular matrix */      else {                      /* unit triangular matrix */
43          SEXP islot = GET_SLOT(x, Matrix_iSym),          SEXP islot = GET_SLOT(x, Matrix_iSym),
44              pslot = GET_SLOT(x, Matrix_pSym);              pslot = GET_SLOT(x, Matrix_pSym);
# Line 120  Line 120 
120          j, n = length(par), nnz;          j, n = length(par), nnz;
121      double *ax;      double *ax;
122    
123      if (!isInteger(par)) error("par argument must be an integer vector");      if (!isInteger(par)) error(_("par argument must be an integer vector"));
124      SET_SLOT(ans, Matrix_pSym, allocVector(INTSXP, n + 1));      SET_SLOT(ans, Matrix_pSym, allocVector(INTSXP, n + 1));
125      ap = INTEGER(GET_SLOT(ans, Matrix_pSym));      ap = INTEGER(GET_SLOT(ans, Matrix_pSym));
126      nnz = parent_inv_ap(n, countDiag, pr, ap);      nnz = parent_inv_ap(n, countDiag, pr, ap);
# Line 132  Line 132 
132      SET_SLOT(ans, Matrix_DimSym, allocVector(INTSXP, 2));      SET_SLOT(ans, Matrix_DimSym, allocVector(INTSXP, 2));
133      dims = INTEGER(GET_SLOT(ans, Matrix_DimSym));      dims = INTEGER(GET_SLOT(ans, Matrix_DimSym));
134      dims[0] = dims[1] = n;      dims[0] = dims[1] = n;
135      SET_SLOT(ans, Matrix_uploSym, ScalarString(mkChar("L")));      SET_SLOT(ans, Matrix_uploSym, mkString("L"));
136      SET_SLOT(ans, Matrix_diagSym,      SET_SLOT(ans, Matrix_diagSym, (countDiag ? mkString("N") : mkString("U")));
              (countDiag ? ScalarString(mkChar("N")) :  
                  ScalarString(mkChar("U"))));  
137      parent_inv_ai(n, countDiag, pr, ai);      parent_inv_ai(n, countDiag, pr, ai);
138      UNPROTECT(1);      UNPROTECT(1);
139      return ans;      return ans;

Legend:
Removed from v.479  
changed lines
  Added in v.677

root@r-forge.r-project.org
ViewVC Help
Powered by ViewVC 1.0.0  
Thanks to:
Vienna University of Economics and Business Powered By FusionForge