Added 'lbound' and 'ubound' matrices to MxMatrix class.
[openmx:openmx.git] / R / IdenMatrix.R
1 #
2 #   Copyright 2007-2009 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 = "MxNonSymmetricMatrix")
20         
21 setMethod("initialize", "IdenMatrix",
22         function(.Object, name, values, free, labels, lbound, ubound, nrow, ncol, byrow) {
23                 if (!single.na(values)) {
24                         warning("Ignoring values matrix for IdenMatrix construction", call. = FALSE)
25                 }
26                 if (!single.na(labels)) {
27                         warning("Ignoring labels matrix for IdenMatrix construction", call. = FALSE)
28                 }
29                 if (!(length(free) == 1 && free == FALSE)) {
30                         warning("Ignoring free matrix for IdenMatrix construction", call. = FALSE)
31                 }
32                 if (!single.na(lbound)) {
33                         warning("Ignoring lbound matrix for IdenMatrix construction", call. = FALSE)
34                 }
35                 if (!single.na(ubound)) {
36                         warning("Ignoring ubound matrix for IdenMatrix construction", call. = FALSE)
37                 }
38                 if (nrow != ncol) {
39                         stop("Non-square matrix attempted for IdenMatrix constructor", call. = FALSE)
40                 }
41                 labels <- matrix(as.character(NA), nrow, ncol)
42                 values <- matrix(diag(nrow = nrow), nrow, ncol)
43                 free <- matrix(FALSE, nrow, ncol)
44                 lbound <- matrix(as.numeric(NA), nrow, ncol)
45                 ubound <- matrix(as.numeric(NA), nrow, ncol)
46                 return(callNextMethod(.Object, labels, values, free, lbound, ubound, name))
47         }
48 )
49
50 setMethod("omxVerifyMatrix", "IdenMatrix",
51         function(.Object) {
52                 callNextMethod(.Object)
53                 verifySquare(.Object)
54                 if(!all(.Object@free == FALSE)) {
55                         stop(paste("Free matrix of iden matrix", 
56                                 omxQuotes(.Object@name), "has a free parameter"), call.=FALSE)
57                 }
58                 if(!suppressWarnings(all(.Object@values == diag(nrow(.Object@values))))) {
59                         stop(paste("Values matrix of iden matrix",
60                                 omxQuotes(.Object@name), "is not the identity matrix"), call.=FALSE)
61                 }
62         }
63 )