|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectjphase.MatrixUtils
public class MatrixUtils
Constructor Summary | |
---|---|
MatrixUtils()
|
Method Summary | |
---|---|
static double |
average(double[] datos)
Computes data average |
static double |
average2(double[] data)
Computes the second moment of the data |
static no.uib.cipr.matrix.DenseMatrix |
concatCols(no.uib.cipr.matrix.DenseMatrix A,
no.uib.cipr.matrix.DenseMatrix B)
Concatenates the columns of the matrices, keeping the same number of rows in dense format |
static no.uib.cipr.matrix.Matrix |
concatCols(no.uib.cipr.matrix.Matrix A,
no.uib.cipr.matrix.Matrix B,
no.uib.cipr.matrix.Matrix res)
Concatenates the columns of the matrices, keeping the same number of rows in the predefined format |
static no.uib.cipr.matrix.Matrix |
concatQuad(no.uib.cipr.matrix.Matrix leftUp,
no.uib.cipr.matrix.Matrix rightUp,
no.uib.cipr.matrix.Matrix leftDown,
no.uib.cipr.matrix.Matrix rightDown,
no.uib.cipr.matrix.Matrix res)
Concatenates the colums of the left and right upper matrices and the result is concatenated by rows with the concatenation of left and right lower matrices |
static no.uib.cipr.matrix.DenseMatrix |
concatRows(no.uib.cipr.matrix.DenseMatrix A,
no.uib.cipr.matrix.DenseMatrix B)
Concatenates the rows of the matrices, keeping the same number of colums in dense format |
static no.uib.cipr.matrix.Matrix |
concatRows(no.uib.cipr.matrix.Matrix A,
no.uib.cipr.matrix.Matrix B,
no.uib.cipr.matrix.Matrix res)
Concatenates the rows of the matrices, keeping the same number of colums in the predefined format |
static no.uib.cipr.matrix.DenseVector |
concatVectors(no.uib.cipr.matrix.DenseVector A,
no.uib.cipr.matrix.DenseVector B)
Concatenates the vectors in dense format |
static no.uib.cipr.matrix.Vector |
concatVectors(no.uib.cipr.matrix.Vector A,
no.uib.cipr.matrix.Vector B,
no.uib.cipr.matrix.Vector res)
Concatenates the vectors in the predefined format |
static double |
CV(double[] data)
Return the Coefficient of Variation of the data trace |
static double |
distance(double[] v1,
double[] v2)
Calculates the distance between two arrays, defined as the maximum euclidean distance between every entry in those arrays |
static no.uib.cipr.matrix.Matrix |
exp(no.uib.cipr.matrix.Matrix A,
double x)
Returns exp(A x), for the value x. |
static no.uib.cipr.matrix.Matrix |
exp(no.uib.cipr.matrix.Matrix A,
double x,
no.uib.cipr.matrix.Matrix leftMat,
no.uib.cipr.matrix.Matrix rightMat)
Returns leftMat * exp(A x) * rightMat, for the value x. |
static no.uib.cipr.matrix.Matrix |
exp(no.uib.cipr.matrix.Matrix A,
double x,
no.uib.cipr.matrix.Matrix leftMat,
no.uib.cipr.matrix.Matrix rightMat,
boolean useUniformization)
Returns leftMat * exp(A x) * rightMat, for the value x. |
static double |
exp(no.uib.cipr.matrix.Matrix A,
double x,
no.uib.cipr.matrix.Vector leftVec,
no.uib.cipr.matrix.Vector rightVec)
Returns leftVec * exp(A x) * rightVec, for the value x. |
static no.uib.cipr.matrix.Matrix[] |
exp(no.uib.cipr.matrix.Matrix A,
int n,
double delta,
no.uib.cipr.matrix.Matrix leftMat,
no.uib.cipr.matrix.Matrix rightMat,
boolean useUniformization)
Computes leftMat * exp(A x) * rightMat, for all values x = 0 + i*delta, i=0,...,n. |
static double[] |
exp(no.uib.cipr.matrix.Matrix A,
int n,
double delta,
no.uib.cipr.matrix.Vector leftVec,
no.uib.cipr.matrix.Vector rightVec,
boolean useUniformization)
Returns leftVec * exp(A x) * rightVec, for all values x = 0 + i*delta, i=0,...,n. |
static no.uib.cipr.matrix.Matrix[] |
expRunge(no.uib.cipr.matrix.Matrix A,
int n,
double delta,
no.uib.cipr.matrix.Matrix leftMat,
no.uib.cipr.matrix.Matrix rightMat)
Computes leftMat * exp(A x) * rightMat, for all values x = 0 + i*delta, i=0,...,n. |
static no.uib.cipr.matrix.Matrix |
expTimesOnes(no.uib.cipr.matrix.Matrix A,
double x)
Returns exp(A x) * Ones, for the value x. |
static no.uib.cipr.matrix.Matrix |
expTimesOnes(no.uib.cipr.matrix.Matrix A,
double x,
no.uib.cipr.matrix.Matrix leftMat)
Returns leftMat * exp(A x) * Ones, for the value x. |
static double |
expTimesOnes(no.uib.cipr.matrix.Matrix A,
double x,
no.uib.cipr.matrix.Vector leftVec)
Returns leftVec * exp(A x) * OnesVector, for the value x. |
static no.uib.cipr.matrix.Matrix[] |
expTimesOnes(no.uib.cipr.matrix.Matrix A,
int n,
double delta,
no.uib.cipr.matrix.Matrix leftMat)
Returns leftMat * exp(A x) * OnesCol, for all values x = 0 + i*delta, i=0,...,n. |
static double[] |
expTimesOnes(no.uib.cipr.matrix.Matrix A,
int n,
double delta,
no.uib.cipr.matrix.Vector leftVec)
Returns leftVec * exp(A x) * OnesVector, for all values x = 0 + i*delta, i=0,...,n. |
static no.uib.cipr.matrix.Matrix[] |
expUnif(no.uib.cipr.matrix.Matrix A,
double[] times,
no.uib.cipr.matrix.Matrix leftMat,
no.uib.cipr.matrix.Matrix rightMat)
Computes leftMat * exp(A x) * rightMat, for all values x in times. |
static no.uib.cipr.matrix.Matrix[] |
expUnif(no.uib.cipr.matrix.Matrix A,
double[] times,
no.uib.cipr.matrix.Matrix leftMat,
no.uib.cipr.matrix.Matrix rightMat,
int truncate)
Computes leftMat * exp(A x) * rightMat, for all values x in times. |
static double[] |
expUnif(no.uib.cipr.matrix.Matrix A,
double[] times,
no.uib.cipr.matrix.Vector leftVec,
no.uib.cipr.matrix.Vector rightVec,
int truncate)
Computes leftVec * exp(A x) * rightVec, for all values x in times. |
static no.uib.cipr.matrix.Matrix[] |
expUnif(no.uib.cipr.matrix.Matrix A,
double x,
no.uib.cipr.matrix.Matrix leftMat,
no.uib.cipr.matrix.Matrix rightMat)
Computes leftMat * exp(A x) * rightMat, for the value x. |
static no.uib.cipr.matrix.Matrix[] |
expUnif(no.uib.cipr.matrix.Matrix A,
int n,
double delta,
no.uib.cipr.matrix.Matrix leftMat,
no.uib.cipr.matrix.Matrix rightMat)
Computes leftMat * exp(A x) * rightMat, for all values x = 0 + i*delta, i=0,...,n. |
static no.uib.cipr.matrix.Matrix[] |
expUnif(no.uib.cipr.matrix.Matrix A,
int n,
double delta,
no.uib.cipr.matrix.Matrix leftMat,
no.uib.cipr.matrix.Matrix rightMat,
int truncate)
Computes leftMat * exp(A x) * rightMat, for all values x = 0 + i*delta, i=0,...,n. |
static double[] |
expUnif(no.uib.cipr.matrix.Matrix A,
int n,
double delta,
no.uib.cipr.matrix.Vector leftVec,
no.uib.cipr.matrix.Vector rightVec)
Computes leftVec * exp(A x) * rightVec, for all values x = 0 + i*delta, i=0,...,n. |
static double[] |
expUnif(no.uib.cipr.matrix.Matrix A,
int n,
double delta,
no.uib.cipr.matrix.Vector leftVec,
no.uib.cipr.matrix.Vector rightVec,
int truncate)
Computes leftVec * exp(A x) * rightVec, for all values x = 0 + i*delta, i=0,...,n. |
static no.uib.cipr.matrix.Matrix |
kronecker(no.uib.cipr.matrix.Matrix A,
no.uib.cipr.matrix.Matrix B)
Returns the kronecker product of two matrices in dense format |
static no.uib.cipr.matrix.Matrix |
kronecker(no.uib.cipr.matrix.Matrix A,
no.uib.cipr.matrix.Matrix B,
no.uib.cipr.matrix.Matrix res)
Returns the kronecker product of two matrices in the predefined storage format |
static no.uib.cipr.matrix.Matrix |
kronecker(no.uib.cipr.matrix.Matrix A,
no.uib.cipr.matrix.Vector B,
no.uib.cipr.matrix.Matrix res)
Returns the kronecker product of one matrix with one vector (Matrix x Vector) in dense format |
static no.uib.cipr.matrix.Matrix |
kronecker(no.uib.cipr.matrix.Vector A,
no.uib.cipr.matrix.Matrix B,
no.uib.cipr.matrix.Matrix res)
Returns the kronecker product of one vector with one matrix (Vector x Matrix) in dense format |
static no.uib.cipr.matrix.Matrix |
kroneckerSum(no.uib.cipr.matrix.Matrix A,
no.uib.cipr.matrix.Matrix B)
Returns the kronecker sum of two matrices in dense format |
static no.uib.cipr.matrix.Matrix |
kroneckerSum(no.uib.cipr.matrix.Matrix A,
no.uib.cipr.matrix.Matrix B,
no.uib.cipr.matrix.Matrix res)
Returns the kronecker sum of two matrices and stores it in the predefined format |
static no.uib.cipr.matrix.DenseVector |
kroneckerVectors(no.uib.cipr.matrix.DenseVector A,
no.uib.cipr.matrix.DenseVector B)
Returns the kronecker product of two vectors in dense format |
static no.uib.cipr.matrix.Vector |
kroneckerVectors(no.uib.cipr.matrix.Vector A,
no.uib.cipr.matrix.Vector B,
no.uib.cipr.matrix.Vector res)
Returns the kronecker product of two vectors in ths predefined format |
static no.uib.cipr.matrix.Matrix |
matPower(no.uib.cipr.matrix.Matrix A,
int k)
Computes k power of the matrix A |
static double |
matPower(no.uib.cipr.matrix.Matrix A,
int k,
no.uib.cipr.matrix.Vector leftVec,
no.uib.cipr.matrix.Vector rightVec)
Computes the kth power of the matrix A premultiplied by leftVec and postmultiplied by rightVec |
static no.uib.cipr.matrix.Matrix |
multVector(no.uib.cipr.matrix.Vector A,
no.uib.cipr.matrix.Vector B,
no.uib.cipr.matrix.Matrix res)
Computes the producto of two vectors A x B^T |
static no.uib.cipr.matrix.DenseMatrix |
OnesCol(int m)
Returns a one-column matrix in dense format with one in every entry |
static no.uib.cipr.matrix.DenseMatrix |
OnesRow(int m)
Returns a one-row matrix in dense format with one in every entry |
static no.uib.cipr.matrix.DenseVector |
OnesVector(int m)
Returns a DenseVector with one in every entry |
static no.uib.cipr.matrix.Vector |
OnesVector(no.uib.cipr.matrix.Vector vec)
Returns a Vector with one in every entry in the predefined storage format |
static double |
pow(double x,
int n)
Calculates x^n |
static double |
scalar(no.uib.cipr.matrix.Matrix A)
Returns the value of the position (0,0) in the matrix, if its number of columns is equal to one (1) |
static double |
sumMatPower(no.uib.cipr.matrix.Matrix A,
int k,
no.uib.cipr.matrix.Vector leftVec,
no.uib.cipr.matrix.Vector rightVec)
Computes the sum of the first k terms of the succesion T^(j-1), from j = 1 |
static double |
variance(double[] data)
Return the variance of the data |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public MatrixUtils()
Method Detail |
---|
public static no.uib.cipr.matrix.Matrix kroneckerSum(no.uib.cipr.matrix.Matrix A, no.uib.cipr.matrix.Matrix B)
A
- MatrixB
- Matrix
public static no.uib.cipr.matrix.Matrix kroneckerSum(no.uib.cipr.matrix.Matrix A, no.uib.cipr.matrix.Matrix B, no.uib.cipr.matrix.Matrix res)
A
- MatrixB
- Matrixres
- Result Matrix such that res.numRows = A.numRows *
B.numRows and res.numCols = A.numCols * B.numCols
public static no.uib.cipr.matrix.Matrix kronecker(no.uib.cipr.matrix.Matrix A, no.uib.cipr.matrix.Matrix B)
A
- MatrixB
- Matrix
public static no.uib.cipr.matrix.Matrix kronecker(no.uib.cipr.matrix.Matrix A, no.uib.cipr.matrix.Matrix B, no.uib.cipr.matrix.Matrix res)
A
- MatrixB
- Matrixres
- Matrix such that res.numCols = A.numCols * B.numCols
and res.numRows = A.numRows * B.numRows
public static no.uib.cipr.matrix.Matrix kronecker(no.uib.cipr.matrix.Matrix A, no.uib.cipr.matrix.Vector B, no.uib.cipr.matrix.Matrix res)
A
- MatrixB
- Vectorres
- Matrix such that res.numRows = A.numRows and
res.numCols = A.numCols * B.size
public static no.uib.cipr.matrix.Matrix kronecker(no.uib.cipr.matrix.Vector A, no.uib.cipr.matrix.Matrix B, no.uib.cipr.matrix.Matrix res)
A
- VectorB
- Matrixres
- Matrix such that res.numRows = A.size * B.numRows
and res.numCols = B.numCols
public static no.uib.cipr.matrix.DenseVector kroneckerVectors(no.uib.cipr.matrix.DenseVector A, no.uib.cipr.matrix.DenseVector B)
A
- VectorB
- Vector
public static no.uib.cipr.matrix.Vector kroneckerVectors(no.uib.cipr.matrix.Vector A, no.uib.cipr.matrix.Vector B, no.uib.cipr.matrix.Vector res)
A
- VectorB
- Vectorres
- Vector such that res.size = A.size * B.size
public static no.uib.cipr.matrix.DenseMatrix OnesRow(int m)
m
- size of the matrix (1, m)
public static no.uib.cipr.matrix.DenseMatrix OnesCol(int m)
m
- size of the matrix (m, 1)
public static no.uib.cipr.matrix.DenseVector OnesVector(int m)
m
- size of the DenseVector
public static no.uib.cipr.matrix.Vector OnesVector(no.uib.cipr.matrix.Vector vec)
vec
- Vector to be modified
public static double pow(double x, int n)
x
- basen
- exponent
public static double distance(double[] v1, double[] v2)
v1
- arrayv2
- array
public static no.uib.cipr.matrix.Matrix expTimesOnes(no.uib.cipr.matrix.Matrix A, double x)
A
- Matrixx
- evaluation point
public static no.uib.cipr.matrix.Matrix expTimesOnes(no.uib.cipr.matrix.Matrix A, double x, no.uib.cipr.matrix.Matrix leftMat)
A
- Matrixx
- evaluation pointleftMat
- Matrix
public static double expTimesOnes(no.uib.cipr.matrix.Matrix A, double x, no.uib.cipr.matrix.Vector leftVec)
A
- Matrixx
- evaluation pointleftVec
- Vector
public static no.uib.cipr.matrix.Matrix[] expTimesOnes(no.uib.cipr.matrix.Matrix A, int n, double delta, no.uib.cipr.matrix.Matrix leftMat)
A
- Matrixn
- number of evaluation pointsdelta
- separation between evaluation pointsleftMat
- Matrix
public static double[] expTimesOnes(no.uib.cipr.matrix.Matrix A, int n, double delta, no.uib.cipr.matrix.Vector leftVec)
A
- Matrixn
- number of evaluation pointsdelta
- separation between evaluation pointsleftVec
- Vector
public static double scalar(no.uib.cipr.matrix.Matrix A)
A
- matrix
public static no.uib.cipr.matrix.Matrix exp(no.uib.cipr.matrix.Matrix A, double x, no.uib.cipr.matrix.Matrix leftMat, no.uib.cipr.matrix.Matrix rightMat)
A
- Matrixx
- evaluation pointleftMat
- MatrixrightMat
- Matrix
public static double exp(no.uib.cipr.matrix.Matrix A, double x, no.uib.cipr.matrix.Vector leftVec, no.uib.cipr.matrix.Vector rightVec)
A
- Matrixx
- evaluation pointleftVec
- VectorrightVec
- Vector
public static no.uib.cipr.matrix.Matrix exp(no.uib.cipr.matrix.Matrix A, double x)
A
- Matrixx
- evaluation point
public static no.uib.cipr.matrix.Matrix exp(no.uib.cipr.matrix.Matrix A, double x, no.uib.cipr.matrix.Matrix leftMat, no.uib.cipr.matrix.Matrix rightMat, boolean useUniformization)
A
- Matrixx
- evaluation pointleftMat
- MatrixrightMat
- MatrixuseUniformization
- true if the method to use is
Uniformization, false if it is RungeKutta
public static no.uib.cipr.matrix.Matrix[] exp(no.uib.cipr.matrix.Matrix A, int n, double delta, no.uib.cipr.matrix.Matrix leftMat, no.uib.cipr.matrix.Matrix rightMat, boolean useUniformization)
A
- Matrixn
- number of evaluation pointsdelta
- separation between evaluation pointsleftMat
- MatrixrightMat
- MatrixuseUniformization
- true if the method to use is
Uniformization, false if it is RungeKutta
public static double[] exp(no.uib.cipr.matrix.Matrix A, int n, double delta, no.uib.cipr.matrix.Vector leftVec, no.uib.cipr.matrix.Vector rightVec, boolean useUniformization)
A
- Matrixn
- number of evaluation pointsdelta
- separation between evaluation pointsleftVec
- VectorrightVec
- VectoruseUniformization
- true if the method to use is
Uniformization, false if it is RungeKutta
public static no.uib.cipr.matrix.Matrix[] expRunge(no.uib.cipr.matrix.Matrix A, int n, double delta, no.uib.cipr.matrix.Matrix leftMat, no.uib.cipr.matrix.Matrix rightMat)
A
- Matrixn
- number of evaluation pointsdelta
- separation between evaluation pointsleftMat
- MatrixrightMat
- Matrix
public static no.uib.cipr.matrix.Matrix[] expUnif(no.uib.cipr.matrix.Matrix A, double x, no.uib.cipr.matrix.Matrix leftMat, no.uib.cipr.matrix.Matrix rightMat)
A
- Matrixx
- evaluation pointleftMat
- MatrixrightMat
- Matrix
public static no.uib.cipr.matrix.Matrix[] expUnif(no.uib.cipr.matrix.Matrix A, int n, double delta, no.uib.cipr.matrix.Matrix leftMat, no.uib.cipr.matrix.Matrix rightMat)
A
- Matrixn
- number of evaluation pointsdelta
- separation between evaluation pointsleftMat
- MatrixrightMat
- Matrix
public static double[] expUnif(no.uib.cipr.matrix.Matrix A, int n, double delta, no.uib.cipr.matrix.Vector leftVec, no.uib.cipr.matrix.Vector rightVec)
A
- Matrixn
- number of evaluation pointsdelta
- separation between evaluation pointsleftVec
- VectorrightVec
- Vector
public static no.uib.cipr.matrix.Matrix[] expUnif(no.uib.cipr.matrix.Matrix A, double[] times, no.uib.cipr.matrix.Matrix leftMat, no.uib.cipr.matrix.Matrix rightMat)
A
- Matrixtimes
- evaluation pointsleftMat
- MatrixrightMat
- Matrix
public static no.uib.cipr.matrix.Matrix[] expUnif(no.uib.cipr.matrix.Matrix A, int n, double delta, no.uib.cipr.matrix.Matrix leftMat, no.uib.cipr.matrix.Matrix rightMat, int truncate)
A
- Matrixn
- num of evaluation pointsdelta
- evaluation points separationleftMat
- MatrixrightMat
- Matrixtruncate
- upper bound for iterations
public static double[] expUnif(no.uib.cipr.matrix.Matrix A, int n, double delta, no.uib.cipr.matrix.Vector leftVec, no.uib.cipr.matrix.Vector rightVec, int truncate)
A
- Matrixn
- num of evaluation pointsdelta
- evaluation points separationleftVec
- VectorrightVec
- Vectortruncate
- upper bound for iterations
public static no.uib.cipr.matrix.Matrix[] expUnif(no.uib.cipr.matrix.Matrix A, double[] times, no.uib.cipr.matrix.Matrix leftMat, no.uib.cipr.matrix.Matrix rightMat, int truncate)
A
- Matrixtimes
- evaluation pointsleftMat
- MatrixrightMat
- Matrixtruncate
- upper bound for iterations
public static double[] expUnif(no.uib.cipr.matrix.Matrix A, double[] times, no.uib.cipr.matrix.Vector leftVec, no.uib.cipr.matrix.Vector rightVec, int truncate)
A
- Matrixtimes
- evaluation pointsleftVec
- VectorrightVec
- Vectortruncate
- upper bound for iterations
public static double average(double[] datos)
datos
-
public static double average2(double[] data)
data
- data trace
public static double variance(double[] data)
data
- data trace
public static double CV(double[] data)
data
- data trace
public static no.uib.cipr.matrix.DenseMatrix concatCols(no.uib.cipr.matrix.DenseMatrix A, no.uib.cipr.matrix.DenseMatrix B)
A
- DenseMatrixB
- DenseMatrix
public static no.uib.cipr.matrix.Matrix concatCols(no.uib.cipr.matrix.Matrix A, no.uib.cipr.matrix.Matrix B, no.uib.cipr.matrix.Matrix res)
A
- MatrixB
- Matrixres
- Resulting matrix
public static no.uib.cipr.matrix.DenseMatrix concatRows(no.uib.cipr.matrix.DenseMatrix A, no.uib.cipr.matrix.DenseMatrix B)
A
- DenseMatrixB
- DenseMatrix
public static no.uib.cipr.matrix.Matrix concatRows(no.uib.cipr.matrix.Matrix A, no.uib.cipr.matrix.Matrix B, no.uib.cipr.matrix.Matrix res)
A
- MatrixB
- Matrixres
- Resulting matrix
public static no.uib.cipr.matrix.Matrix concatQuad(no.uib.cipr.matrix.Matrix leftUp, no.uib.cipr.matrix.Matrix rightUp, no.uib.cipr.matrix.Matrix leftDown, no.uib.cipr.matrix.Matrix rightDown, no.uib.cipr.matrix.Matrix res)
leftUp
- Left upper MatrixrightUp
- Right upper MatrixleftDown
- Left lower MatrixrightDown
- Right lower matrixres
- Resulting Matrix
public static no.uib.cipr.matrix.DenseVector concatVectors(no.uib.cipr.matrix.DenseVector A, no.uib.cipr.matrix.DenseVector B)
A
- DenseVectorB
- DenseVector
public static no.uib.cipr.matrix.Vector concatVectors(no.uib.cipr.matrix.Vector A, no.uib.cipr.matrix.Vector B, no.uib.cipr.matrix.Vector res)
A
- VectorB
- vectorres
- Resulting vector
public static no.uib.cipr.matrix.Matrix multVector(no.uib.cipr.matrix.Vector A, no.uib.cipr.matrix.Vector B, no.uib.cipr.matrix.Matrix res)
A
- VectorB
- Vectorres
- Vector to store the resulting matrix
public static no.uib.cipr.matrix.Matrix matPower(no.uib.cipr.matrix.Matrix A, int k)
A
- matrix basek
- exponent
public static double matPower(no.uib.cipr.matrix.Matrix A, int k, no.uib.cipr.matrix.Vector leftVec, no.uib.cipr.matrix.Vector rightVec)
A
- Matrix basek
- exponentleftVec
- VectorrightVec
- Vector
public static double sumMatPower(no.uib.cipr.matrix.Matrix A, int k, no.uib.cipr.matrix.Vector leftVec, no.uib.cipr.matrix.Vector rightVec)
A
- Matrix basek
- maximum exponentleftVec
- rightVec
-
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |