1 /***********************************************************************
2  * Copyright (c) 2013-2024 Commonwealth Computer Research, Inc.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Apache License, Version 2.0
5  * which accompanies this distribution and is available at
6  * http://www.opensource.org/licenses/apache2.0.php.
7  ***********************************************************************/
8 
9 package org.locationtech.geomesa.utils.stats
10 
11 import org.ejml.data.DMatrixRMaj
12 import org.ejml.dense.row.CommonOps_DDRM
13 import org.ejml.simple.SimpleMatrix
14 
15 object SimpleMatrixUtils {
16 
17   private implicit def toDMatrixRMaj(sm: SimpleMatrix): DMatrixRMaj = sm.getMatrix[DMatrixRMaj]
18 
19   implicit class SimpleMatrixOps(a: SimpleMatrix) {
20 
21     def +(b: Double): SimpleMatrix = a.plus(b)
22     def +(b: SimpleMatrix): SimpleMatrix = a.plus(b)
23 
24     def +=(b: Double): Unit = CommonOps_DDRM.add[DMatrixRMaj](a, b, a)
25     def +=(b: SimpleMatrix): Unit = CommonOps_DDRM.add[DMatrixRMaj](a, b, a)
26 
27     def -(b: Double): SimpleMatrix = a.minus(b)
28     def -(b: SimpleMatrix): SimpleMatrix = a.minus(b)
29 
30     def -=(b: Double): Unit = CommonOps_DDRM.subtract[DMatrixRMaj](a, b, a)
31     def -=(b: SimpleMatrix): Unit = CommonOps_DDRM.subtract[DMatrixRMaj](a, b, a)
32 
33     def *(b: Double): SimpleMatrix = a.scale(b)
34     def *(b: SimpleMatrix): SimpleMatrix = a.elementMult(b)
35 
36     def *=(b: Double): Unit = CommonOps_DDRM.scale(b, a, a)
37     def *=(b: SimpleMatrix): Unit = CommonOps_DDRM.elementMult[DMatrixRMaj](a, b, a)
38 
39     def /(b: Double): SimpleMatrix = a.divide(b)
40     def /(b: SimpleMatrix): SimpleMatrix = a.elementDiv(b)
41 
42     def /=(b: Double): Unit = CommonOps_DDRM.divide[DMatrixRMaj](a, b, a)
43     def /=(b: SimpleMatrix): Unit = CommonOps_DDRM.elementDiv[DMatrixRMaj](a, b, a)
44 
45     def **(b: Double): SimpleMatrix = a.elementPower(b)
46     def **(b: SimpleMatrix): SimpleMatrix = a.elementPower(b)
47 
48     def **=(b: Double): Unit = CommonOps_DDRM.elementPower[DMatrixRMaj](a, b, a)
49     def **=(b: SimpleMatrix): Unit = CommonOps_DDRM.elementPower[DMatrixRMaj](a, b, a)
50 
51     def diag(v: Double): SimpleMatrix = {
52       val m = new SimpleMatrix(a)
53       (0 until Math.min(m.getNumRows, m.getNumCols)).foreach(i => m.set(i, i, v))
54       m
55     }
56 
57     def |*|(b: SimpleMatrix): SimpleMatrix = a.mult(b)
58 
59     def T: SimpleMatrix = a.transpose
60 
61     def isIdenticalWithinTolerances(b: SimpleMatrix, rel_tol: Double = 1e-9, abs_tol: Double = 1e-15): Boolean = {
62       import java.lang.{Double => jDouble}
63       if (a.numRows != b.numRows || a.numCols != b.numCols) {
64         return false
65       }
66       require(rel_tol >= 0 && abs_tol >=0, "Tolerance must be greater than or equal to zero.")
67       val length = a.getNumElements
68       var i = 0
69 
70       while (i < length) {
71         val va = a.get(i)
72         val vb = b.get(i)
73         val va_nan = va != va     /* quick NaN test */
74         val vb_nan = vb != vb     /* quick NaN test */
75         if (va_nan || vb_nan) {   /* if either NaN */
76           if (va_nan != vb_nan) { /* then both should be NaN */
77             return false
78           }
79         } else {
80           val va_inf = jDouble.isInfinite(va)
81           val vb_inf = jDouble.isInfinite(vb)
82           if (va_inf || vb_inf) {
83             if (va != vb) {
84               return false
85             }
86           } else {
87             /* check absolute tolerance, important for low magnitude values (0) */
88             val diff = Math.abs(va - vb)
89             if (diff > abs_tol) {
90               val va_abs = Math.abs(va)
91               val vb_abs = Math.abs(vb)
92               /* check relative tolerance, important for high magnitude values */
93               if (diff > Math.max(va_abs, vb_abs) * rel_tol) {
94                 return false
95               }
96             }
97           }
98         }
99         i += 1
100       }
101       true
102     }
103   }
104 
105   implicit class DoubleOps(a: Double) {
106     def +(b: SimpleMatrix): SimpleMatrix = b.plus(a)
107     def -(b: SimpleMatrix): SimpleMatrix = {
108       val c = new SimpleMatrix(b.getNumRows, b.getNumCols)
109       CommonOps_DDRM.subtract[DMatrixRMaj](a, b, c)
110       c
111     }
112     def *(b: SimpleMatrix): SimpleMatrix = b.scale(a)
113     def /(b: SimpleMatrix): SimpleMatrix = {
114       val c = new SimpleMatrix(b.getNumRows, b.getNumCols)
115       CommonOps_DDRM.divide[DMatrixRMaj](a, b, c)
116       c
117     }
118     def **(b: SimpleMatrix): SimpleMatrix = {
119       val c = new SimpleMatrix(b.getNumRows, b.getNumCols)
120       CommonOps_DDRM.elementPower[DMatrixRMaj](a, b, c)
121       c
122     }
123   }
124 }
Line Stmt Id Pos Tree Symbol Tests Code
17 14199 720 - 745 Apply org.ejml.simple.SimpleBase.getMatrix sm.getMatrix[org.ejml.data.DMatrixRMaj]()
21 14200 837 - 846 Apply org.ejml.simple.SimpleBase.plus SimpleMatrixOps.this.a.plus(b)
22 14201 890 - 899 Apply org.ejml.simple.SimpleBase.plus SimpleMatrixOps.this.a.plus(b)
24 14202 963 - 964 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
24 14203 963 - 964 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
24 14204 969 - 970 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
24 14205 969 - 970 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
24 14206 931 - 971 Apply org.ejml.dense.row.CommonOps_DDRM.add org.ejml.dense.row.CommonOps_DDRM.add[org.ejml.data.DMatrixRMaj](SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a), b, SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a))
24 14207 962 - 962 Literal <nosymbol> ()
25 14208 1040 - 1041 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
25 14209 1040 - 1041 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
25 14210 1043 - 1044 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(b)
25 14211 1046 - 1047 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
25 14212 1046 - 1047 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
25 14213 1008 - 1048 Apply org.ejml.dense.row.CommonOps_DDRM.add org.ejml.dense.row.CommonOps_DDRM.add[org.ejml.data.DMatrixRMaj](SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a), SimpleMatrixUtils.this.toDMatrixRMaj(b), SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a))
25 14214 1039 - 1039 Literal <nosymbol> ()
27 14215 1087 - 1097 Apply org.ejml.simple.SimpleBase.minus SimpleMatrixOps.this.a.minus(b)
28 14216 1141 - 1151 Apply org.ejml.simple.SimpleBase.minus SimpleMatrixOps.this.a.minus(b)
30 14217 1220 - 1221 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
30 14218 1220 - 1221 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
30 14219 1226 - 1227 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
30 14220 1226 - 1227 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
30 14221 1183 - 1228 Apply org.ejml.dense.row.CommonOps_DDRM.subtract org.ejml.dense.row.CommonOps_DDRM.subtract[org.ejml.data.DMatrixRMaj](SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a), b, SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a))
30 14222 1219 - 1219 Literal <nosymbol> ()
31 14223 1302 - 1303 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
31 14224 1302 - 1303 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
31 14225 1305 - 1306 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(b)
31 14226 1308 - 1309 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
31 14227 1308 - 1309 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
31 14228 1265 - 1310 Apply org.ejml.dense.row.CommonOps_DDRM.subtract org.ejml.dense.row.CommonOps_DDRM.subtract[org.ejml.data.DMatrixRMaj](SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a), SimpleMatrixUtils.this.toDMatrixRMaj(b), SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a))
31 14229 1301 - 1301 Literal <nosymbol> ()
33 14230 1349 - 1359 Apply org.ejml.simple.SimpleBase.scale SimpleMatrixOps.this.a.scale(b)
34 14231 1403 - 1419 Apply org.ejml.simple.SimpleBase.elementMult SimpleMatrixOps.this.a.elementMult(b)
36 14232 1475 - 1476 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
36 14233 1475 - 1476 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
36 14234 1478 - 1479 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
36 14235 1478 - 1479 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
36 14236 1451 - 1480 Apply org.ejml.dense.row.CommonOps_DDRM.scale org.ejml.dense.row.CommonOps_DDRM.scale(b, SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a), SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a))
37 14237 1557 - 1558 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
37 14238 1557 - 1558 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
37 14239 1560 - 1561 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(b)
37 14240 1563 - 1564 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
37 14241 1563 - 1564 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
37 14242 1517 - 1565 Apply org.ejml.dense.row.CommonOps_DDRM.elementMult org.ejml.dense.row.CommonOps_DDRM.elementMult[org.ejml.data.DMatrixRMaj](SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a), SimpleMatrixUtils.this.toDMatrixRMaj(b), SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a))
37 14243 1556 - 1556 Literal <nosymbol> ()
39 14244 1604 - 1615 Apply org.ejml.simple.SimpleBase.divide SimpleMatrixOps.this.a.divide(b)
40 14245 1659 - 1674 Apply org.ejml.simple.SimpleBase.elementDiv SimpleMatrixOps.this.a.elementDiv(b)
42 14246 1741 - 1742 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
42 14247 1741 - 1742 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
42 14248 1747 - 1748 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
42 14249 1747 - 1748 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
42 14250 1706 - 1749 Apply org.ejml.dense.row.CommonOps_DDRM.divide org.ejml.dense.row.CommonOps_DDRM.divide[org.ejml.data.DMatrixRMaj](SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a), b, SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a))
42 14251 1740 - 1740 Literal <nosymbol> ()
43 14252 1825 - 1826 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
43 14253 1825 - 1826 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
43 14254 1828 - 1829 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(b)
43 14255 1831 - 1832 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
43 14256 1831 - 1832 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
43 14257 1786 - 1833 Apply org.ejml.dense.row.CommonOps_DDRM.elementDiv org.ejml.dense.row.CommonOps_DDRM.elementDiv[org.ejml.data.DMatrixRMaj](SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a), SimpleMatrixUtils.this.toDMatrixRMaj(b), SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a))
43 14258 1824 - 1824 Literal <nosymbol> ()
45 14259 1873 - 1890 Apply org.ejml.simple.SimpleBase.elementPower SimpleMatrixOps.this.a.elementPower(b)
46 14260 1935 - 1952 Apply org.ejml.simple.SimpleBase.elementPower SimpleMatrixOps.this.a.elementPower(b)
48 14261 2026 - 2027 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
48 14262 2026 - 2027 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
48 14263 2032 - 2033 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
48 14264 2032 - 2033 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
48 14265 1985 - 2034 Apply org.ejml.dense.row.CommonOps_DDRM.elementPower org.ejml.dense.row.CommonOps_DDRM.elementPower[org.ejml.data.DMatrixRMaj](SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a), b, SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a))
48 14266 2025 - 2025 Literal <nosymbol> ()
49 14267 2113 - 2114 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
49 14268 2113 - 2114 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
49 14269 2116 - 2117 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(b)
49 14270 2119 - 2120 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
49 14271 2119 - 2120 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a)
49 14272 2072 - 2121 Apply org.ejml.dense.row.CommonOps_DDRM.elementPower org.ejml.dense.row.CommonOps_DDRM.elementPower[org.ejml.data.DMatrixRMaj](SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a), SimpleMatrixUtils.this.toDMatrixRMaj(b), SimpleMatrixUtils.this.toDMatrixRMaj(SimpleMatrixOps.this.a))
49 14273 2112 - 2112 Literal <nosymbol> ()
52 14274 2196 - 2197 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.a SimpleMatrixOps.this.a
52 14275 2179 - 2198 Apply org.ejml.simple.SimpleMatrix.<init> new org.ejml.simple.SimpleMatrix(SimpleMatrixOps.this.a)
53 14276 2206 - 2207 Literal <nosymbol> 0
53 14277 2223 - 2235 Apply org.ejml.data.DMatrixD1.getNumRows SimpleMatrixUtils.this.toDMatrixRMaj(m).getNumRows()
53 14278 2237 - 2249 Apply org.ejml.data.DMatrixD1.getNumCols SimpleMatrixUtils.this.toDMatrixRMaj(m).getNumCols()
53 14279 2214 - 2250 Apply java.lang.Math.min java.lang.Math.min(SimpleMatrixUtils.this.toDMatrixRMaj(m).getNumRows(), SimpleMatrixUtils.this.toDMatrixRMaj(m).getNumCols())
53 14280 2265 - 2279 Apply org.ejml.simple.SimpleBase.set m.set(i, i, v)
53 14281 2205 - 2280 Apply scala.collection.immutable.Range.foreach scala.Predef.intWrapper(0).until(java.lang.Math.min(SimpleMatrixUtils.this.toDMatrixRMaj(m).getNumRows(), SimpleMatrixUtils.this.toDMatrixRMaj(m).getNumCols())).foreach[Unit](((i: Int) => m.set(i, i, v)))
57 14282 2341 - 2350 Apply org.ejml.simple.SimpleBase.mult SimpleMatrixOps.this.a.mult(b)
59 14283 2378 - 2389 Apply org.ejml.simple.SimpleBase.transpose SimpleMatrixOps.this.a.transpose()
63 14284 2572 - 2581 Apply org.ejml.simple.SimpleBase.numRows b.numRows()
63 14285 2598 - 2607 Apply org.ejml.simple.SimpleBase.numCols b.numCols()
63 14286 2585 - 2607 Apply scala.Int.!= SimpleMatrixOps.this.a.numCols().!=(b.numCols())
63 14287 2559 - 2607 Apply scala.Boolean.|| SimpleMatrixOps.this.a.numRows().!=(b.numRows()).||(SimpleMatrixOps.this.a.numCols().!=(b.numCols()))
63 14290 2555 - 2555 Literal <nosymbol> ()
63 14291 2555 - 2555 Block <nosymbol> ()
64 14288 2626 - 2631 Literal <nosymbol> false
64 14289 2619 - 2631 Return org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.isIdenticalWithinTolerances return false
66 14292 2665 - 2666 Literal <nosymbol> 0
66 14293 2670 - 2681 Apply scala.Double.>= abs_tol.>=(0)
66 14294 2654 - 2681 Apply scala.Boolean.&& rel_tol.>=(0).&&(abs_tol.>=(0))
66 14295 2683 - 2733 Literal <nosymbol> "Tolerance must be greater than or equal to zero."
66 14296 2646 - 2734 Apply scala.Predef.require scala.Predef.require(rel_tol.>=(0).&&(abs_tol.>=(0)), "Tolerance must be greater than or equal to zero.")
67 14297 2754 - 2770 Apply org.ejml.simple.SimpleBase.getNumElements SimpleMatrixOps.this.a.getNumElements()
68 14298 2785 - 2786 Literal <nosymbol> 0
70 14299 2801 - 2811 Apply scala.Int.< i.<(length)
70 14337 2813 - 2813 Apply org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.while$1 while$1()
70 14338 2813 - 3849 Block <nosymbol> { { val va: Double = SimpleMatrixOps.this.a.get(i); val vb: Double = b.get(i); val va_nan: Boolean = va.!=(va); val vb_nan: Boolean = vb.!=(vb); if (va_nan.||(vb_nan)) if (va_nan.!=(vb_nan)) return false else () else { val va_inf: Boolean = java.lang.Double.isInfinite(va); val vb_inf: Boolean = java.lang.Double.isInfinite(vb); if (va_inf.||(vb_inf)) if (va.!=(vb)) return false else () else { val diff: Double = java.lang.Math.abs(va.-(vb)); if (diff.>(abs_tol)) { val va_abs: Double = java.lang.Math.abs(va); val vb_abs: Double = java.lang.Math.abs(vb); if (diff.>(java.lang.Math.max(va_abs, vb_abs).*(rel_tol))) return false else () } else () } }; i = i.+(1) }; while$1() }
70 14339 2794 - 2794 Literal <nosymbol> ()
70 14340 2794 - 2794 Block <nosymbol> ()
71 14300 2832 - 2840 Apply org.ejml.simple.SimpleBase.get SimpleMatrixOps.this.a.get(i)
72 14301 2858 - 2866 Apply org.ejml.simple.SimpleBase.get b.get(i)
73 14302 2888 - 2896 Apply scala.Double.!= va.!=(va)
74 14303 2943 - 2951 Apply scala.Double.!= vb.!=(vb)
75 14304 2989 - 3005 Apply scala.Boolean.|| va_nan.||(vb_nan)
76 14305 3045 - 3061 Apply scala.Boolean.!= va_nan.!=(vb_nan)
76 14308 3041 - 3041 Literal <nosymbol> ()
76 14309 3041 - 3041 Block <nosymbol> ()
76 14310 3041 - 3131 If <nosymbol> if (va_nan.!=(vb_nan)) return false else ()
77 14306 3114 - 3119 Literal <nosymbol> false
77 14307 3107 - 3119 Return org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.isIdenticalWithinTolerances return false
79 14335 3147 - 3826 Block <nosymbol> { val va_inf: Boolean = java.lang.Double.isInfinite(va); val vb_inf: Boolean = java.lang.Double.isInfinite(vb); if (va_inf.||(vb_inf)) if (va.!=(vb)) return false else () else { val diff: Double = java.lang.Math.abs(va.-(vb)); if (diff.>(abs_tol)) { val va_abs: Double = java.lang.Math.abs(va); val vb_abs: Double = java.lang.Math.abs(vb); if (diff.>(java.lang.Math.max(va_abs, vb_abs).*(rel_tol))) return false else () } else () } }
80 14311 3172 - 3194 Apply java.lang.Double.isInfinite java.lang.Double.isInfinite(va)
81 14312 3218 - 3240 Apply java.lang.Double.isInfinite java.lang.Double.isInfinite(vb)
82 14313 3255 - 3271 Apply scala.Boolean.|| va_inf.||(vb_inf)
83 14314 3291 - 3299 Apply scala.Double.!= va.!=(vb)
83 14317 3287 - 3287 Literal <nosymbol> ()
83 14318 3287 - 3287 Block <nosymbol> ()
83 14319 3287 - 3343 If <nosymbol> if (va.!=(vb)) return false else ()
84 14315 3324 - 3329 Literal <nosymbol> false
84 14316 3317 - 3329 Return org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.isIdenticalWithinTolerances return false
86 14334 3361 - 3816 Block <nosymbol> { val diff: Double = java.lang.Math.abs(va.-(vb)); if (diff.>(abs_tol)) { val va_abs: Double = java.lang.Math.abs(va); val vb_abs: Double = java.lang.Math.abs(vb); if (diff.>(java.lang.Math.max(va_abs, vb_abs).*(rel_tol))) return false else () } else () }
88 14320 3478 - 3485 Apply scala.Double.- va.-(vb)
88 14321 3469 - 3486 Apply java.lang.Math.abs java.lang.Math.abs(va.-(vb))
89 14322 3503 - 3517 Apply scala.Double.> diff.>(abs_tol)
89 14331 3519 - 3804 Block <nosymbol> { val va_abs: Double = java.lang.Math.abs(va); val vb_abs: Double = java.lang.Math.abs(vb); if (diff.>(java.lang.Math.max(va_abs, vb_abs).*(rel_tol))) return false else () }
89 14332 3499 - 3499 Literal <nosymbol> ()
89 14333 3499 - 3499 Block <nosymbol> ()
90 14323 3548 - 3560 Apply java.lang.Math.abs java.lang.Math.abs(va)
91 14324 3588 - 3600 Apply java.lang.Math.abs java.lang.Math.abs(vb)
93 14325 3708 - 3742 Apply scala.Double.* java.lang.Math.max(va_abs, vb_abs).*(rel_tol)
93 14326 3701 - 3742 Apply scala.Double.> diff.>(java.lang.Math.max(va_abs, vb_abs).*(rel_tol))
93 14329 3697 - 3697 Literal <nosymbol> ()
93 14330 3697 - 3697 Block <nosymbol> ()
94 14327 3769 - 3774 Literal <nosymbol> false
94 14328 3762 - 3774 Return org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.SimpleMatrixOps.isIdenticalWithinTolerances return false
99 14336 3835 - 3841 Apply scala.Int.+ i.+(1)
101 14341 3856 - 3860 Literal <nosymbol> true
106 14342 3962 - 3963 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.DoubleOps.a DoubleOps.this.a
106 14343 3955 - 3964 Apply org.ejml.simple.SimpleBase.plus b.plus(DoubleOps.this.a)
108 14344 4041 - 4053 Apply org.ejml.data.DMatrixD1.getNumRows SimpleMatrixUtils.this.toDMatrixRMaj(b).getNumRows()
108 14345 4055 - 4067 Apply org.ejml.data.DMatrixD1.getNumCols SimpleMatrixUtils.this.toDMatrixRMaj(b).getNumCols()
108 14346 4024 - 4068 Apply org.ejml.simple.SimpleMatrix.<init> new org.ejml.simple.SimpleMatrix(SimpleMatrixUtils.this.toDMatrixRMaj(b).getNumRows(), SimpleMatrixUtils.this.toDMatrixRMaj(b).getNumCols())
109 14347 4112 - 4113 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.DoubleOps.a DoubleOps.this.a
109 14348 4115 - 4116 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(b)
109 14349 4118 - 4119 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(c)
109 14350 4075 - 4120 Apply org.ejml.dense.row.CommonOps_DDRM.subtract org.ejml.dense.row.CommonOps_DDRM.subtract[org.ejml.data.DMatrixRMaj](DoubleOps.this.a, SimpleMatrixUtils.this.toDMatrixRMaj(b), SimpleMatrixUtils.this.toDMatrixRMaj(c))
112 14351 4186 - 4187 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.DoubleOps.a DoubleOps.this.a
112 14352 4178 - 4188 Apply org.ejml.simple.SimpleBase.scale b.scale(DoubleOps.this.a)
114 14353 4265 - 4277 Apply org.ejml.data.DMatrixD1.getNumRows SimpleMatrixUtils.this.toDMatrixRMaj(b).getNumRows()
114 14354 4279 - 4291 Apply org.ejml.data.DMatrixD1.getNumCols SimpleMatrixUtils.this.toDMatrixRMaj(b).getNumCols()
114 14355 4248 - 4292 Apply org.ejml.simple.SimpleMatrix.<init> new org.ejml.simple.SimpleMatrix(SimpleMatrixUtils.this.toDMatrixRMaj(b).getNumRows(), SimpleMatrixUtils.this.toDMatrixRMaj(b).getNumCols())
115 14356 4334 - 4335 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.DoubleOps.a DoubleOps.this.a
115 14357 4337 - 4338 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(b)
115 14358 4340 - 4341 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(c)
115 14359 4299 - 4342 Apply org.ejml.dense.row.CommonOps_DDRM.divide org.ejml.dense.row.CommonOps_DDRM.divide[org.ejml.data.DMatrixRMaj](DoubleOps.this.a, SimpleMatrixUtils.this.toDMatrixRMaj(b), SimpleMatrixUtils.this.toDMatrixRMaj(c))
119 14360 4434 - 4446 Apply org.ejml.data.DMatrixD1.getNumRows SimpleMatrixUtils.this.toDMatrixRMaj(b).getNumRows()
119 14361 4448 - 4460 Apply org.ejml.data.DMatrixD1.getNumCols SimpleMatrixUtils.this.toDMatrixRMaj(b).getNumCols()
119 14362 4417 - 4461 Apply org.ejml.simple.SimpleMatrix.<init> new org.ejml.simple.SimpleMatrix(SimpleMatrixUtils.this.toDMatrixRMaj(b).getNumRows(), SimpleMatrixUtils.this.toDMatrixRMaj(b).getNumCols())
120 14363 4509 - 4510 Select org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.DoubleOps.a DoubleOps.this.a
120 14364 4512 - 4513 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(b)
120 14365 4515 - 4516 ApplyImplicitView org.locationtech.geomesa.utils.stats.SimpleMatrixUtils.toDMatrixRMaj SimpleMatrixUtils.this.toDMatrixRMaj(c)
120 14366 4468 - 4517 Apply org.ejml.dense.row.CommonOps_DDRM.elementPower org.ejml.dense.row.CommonOps_DDRM.elementPower[org.ejml.data.DMatrixRMaj](DoubleOps.this.a, SimpleMatrixUtils.this.toDMatrixRMaj(b), SimpleMatrixUtils.this.toDMatrixRMaj(c))