Renaming majority of omx* functions to imx* functions. See http://openmx.psyc.virgini...
[openmx:openmx.git] / R / IdenMatrix.R
1 #
2 #   Copyright 2007-2010 The OpenMx Project
3 #
4 #   Licensed under the Apache License, Version 2.0 (the "License");
5 #   you may not use this file except in compliance with the License.
6 #   You may obtain a copy of the License at
7
8 #        http://www.apache.org/licenses/LICENSE-2.0
9
10 #   Unless required by applicable law or agreed to in writing, software
11 #   distributed under the License is distributed on an "AS IS" BASIS,
12 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 #   See the License for the specific language governing permissions and
14 #   limitations under the License.
15
16
17 setClass(Class = "IdenMatrix",
18         representation = representation(),
19         contains = "MxMatrix")
20
21 setMethod("imxSquareMatrix", "IdenMatrix",
22         function(.Object) { return(TRUE) }
23 )       
24
25 setMethod("imxCreateMatrix", "IdenMatrix",
26         function(.Object, labels, values, free, lbound, ubound, nrow, ncol, byrow, name, ...) {
27                 if (!single.na(values)) {
28                         warning("Ignoring values matrix for identity matrix construction", call. = FALSE)
29                 }
30                 if (!single.na(labels)) {
31                         warning("Ignoring labels matrix for identity matrix construction", call. = FALSE)
32                 }
33                 if (!(length(free) == 1 && free == FALSE)) {
34                         warning("Ignoring free matrix for identity matrix construction", call. = FALSE)
35                 }
36                 if (!single.na(lbound)) {
37                         warning("Ignoring lbound matrix for identity matrix construction", call. = FALSE)
38                 }
39                 if (!single.na(ubound)) {
40                         warning("Ignoring ubound matrix for identity matrix construction", call. = FALSE)
41                 }
42                 if (nrow != ncol) {
43                         stop("Non-square matrix attempted for identity matrix constructor", call. = FALSE)
44                 }
45                 labels <- matrix(as.character(NA), nrow, ncol)
46                 values <- matrix(diag(nrow = nrow), nrow, ncol)
47                 free <- matrix(FALSE, nrow, ncol)
48                 lbound <- matrix(as.numeric(NA), nrow, ncol)
49                 ubound <- matrix(as.numeric(NA), nrow, ncol)
50                 return(callNextMethod(.Object, labels, values, free, lbound, ubound, nrow, ncol, byrow, name, ...))
51         }
52 )
53
54 setMethod("imxVerifyMatrix", "IdenMatrix",
55         function(.Object) {
56                 callNextMethod(.Object)
57                 if(!all(.Object@free == FALSE)) {
58                         stop(paste("Free matrix of identity matrix", 
59                                 omxQuotes(.Object@name), "has a free parameter"), call.=FALSE)
60                 }
61                 if(!suppressWarnings(all(.Object@values == diag(nrow(.Object@values))))) {
62                         stop(paste("Values matrix of identity matrix",
63                                 omxQuotes(.Object@name), "is not the identity matrix"), call.=FALSE)
64                 }
65         }
66 )