1 package org.simantics.spreadsheet.graph;
3 import java.io.Serializable;
5 import org.simantics.databoard.binding.mutable.Variant;
6 import org.simantics.spreadsheet.graph.formula.FormulaError2;
8 public class SpreadsheetMatrix implements Serializable {
10 private static final long serialVersionUID = 5729700370527844640L;
14 public Object[] values;
16 public SpreadsheetMatrix(int w, int h) {
19 this.values = new Object[w*h];
22 public Object get(int row, int column) {
23 return values[w*row+column];
26 public void set(int row, int column, Object value) {
27 values[w*row+column] = value;
30 public int getWidth() {
34 public int getHeight() {
40 for(int i=0;i<values.length;i++) {
41 Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);
42 if(n != null) result += n.doubleValue();
47 public Object sumWithFormulaError(){
49 for(int i = 0; i < values.length; i++){
50 Object obj = values[i];
52 FormulaError2 error = FormulaError2.forObject(obj);
53 if(error!=null) return error.getString();
55 Number n = SpreadsheetGraphUtils.asValidNumber(obj);
56 if(n != null) result += n.doubleValue();
62 public double average() {
65 for(int i=0;i<values.length;i++) {
66 Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);
68 result += n.doubleValue();
72 if(count == 0) return result;
73 return result / count;
76 public double countOfActualDoubleValues(){
78 for(int i = 0; i < values.length; i++){
79 Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);
85 public Object productWithFormulaError(){
87 boolean atLeastOne = false;
88 for(int i = 0; i < values.length; i++){
89 Object obj = values[i];
91 FormulaError2 error = FormulaError2.forObject(obj);
92 if(error!=null) return error.getString();
94 Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);
96 double dval = n.doubleValue();
97 if(dval<=0) return FormulaError2.NUM.getString();
103 if(atLeastOne) return result;
107 public SpreadsheetMatrix pow(Object exponent_) {
108 if(exponent_ instanceof SpreadsheetMatrix) {
109 SpreadsheetMatrix exponent = (SpreadsheetMatrix)exponent_;
110 SpreadsheetMatrix result = new SpreadsheetMatrix(exponent.w, h);
111 for(int i=0;i<h;i++) {
112 for(int j=0;j<exponent.w;j++) {
113 result.set(i,j, Math.pow(SpreadsheetGraphUtils.asNumber(get(i, 0)),
114 SpreadsheetGraphUtils.asNumber(exponent.get(0, j))));
119 double n = SpreadsheetGraphUtils.asNumber(exponent_);
120 SpreadsheetMatrix result = new SpreadsheetMatrix(w, h);
121 for(int i=0;i<result.values.length;i++) {
122 result.values[i] = Math.pow(SpreadsheetGraphUtils.asNumber(values[i]), n);