Skip to content

Add cross-platform FloatMatrix generic operations - #160

Merged
Quafadas merged 5 commits into
mainfrom
copilot/add-floatmatrix-implementation
Sep 11, 2026
Merged

Add cross-platform FloatMatrix generic operations#160
Quafadas merged 5 commits into
mainfrom
copilot/add-floatmatrix-implementation

Conversation

Copilot AI commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

vecxt/src/doublematrix.scala provides a full set of generic (non-SIMD) operations for Matrix[Double], but the Float equivalent was missing — platform-specific Float matrix files (JvmFloatMatrix, JsFloatMatrix, NativeFloatMatrix) only cover matmul and a handful of JVM-only scalar ops.

Changes

  • New vecxt/src/floatmatrix.scalaobject FloatMatrix, the Float counterpart to DoubleMatrix, filling in every generic op absent from all three platform-specific Float files:
    • Elementwise matrix ops: +:+/+, hadamard/*, /:/, -:-, maximum, kronecker (stub)
    • Scalar ops: -(n), /(n), /=(n)
    • Math: exp/exp!, log/log!, sqrt/sqrt!, sin/sin!, cos/cos!, tan/tan!, **, unary_-
    • Reductions: mean, trace, sum/sumSIMD, norm
    • All delegate to the existing vecxt.floatarrays kernels (JVM SIMD / JS-Native loops), so no new low-level math was written
    • @targetName added where a method's erased signature would otherwise clash with its Double counterpart once both are exported from vecxt.all
  • vecxt/src/all.scala — exports vecxt.FloatMatrix.*
  • vecxt/test/src/floatmatrix.test.scala — cross-platform tests for each newly added operation
import vecxt.all.*

val a = Matrix[Float](Array(1f, 2f, 3f, 4f), (2, 2))
val b = Matrix[Float](Array(2f, 2f, 2f, 2f), (2, 2))

a.hadamard(b)   // elementwise multiply, now works for Float
a.trace         // 5.0f
a.exp           // elementwise exp

Out of scope

Scalar +/*/+=/-=/comparisons on Matrix[Float] still exist only on the JVM platform (pre-existing gap, not introduced here) — worth a follow-up to bring JS/Native to parity.

Copilot AI linked an issue Sep 11, 2026 that may be closed by this pull request
Copilot AI and others added 2 commits September 11, 2026 11:55
Co-authored-by: Quafadas <24899792+Quafadas@users.noreply.github.com>
Co-authored-by: Quafadas <24899792+Quafadas@users.noreply.github.com>
Copilot AI changed the title [WIP] Add FloatMatrix implementation for Matrix[Double] methods Add cross-platform FloatMatrix generic operations Sep 11, 2026
Copilot AI requested a review from Quafadas September 11, 2026 12:02
@github-actions

github-actions Bot commented Sep 11, 2026

Copy link
Copy Markdown

Bytecode audit (Tier 1) — ⚠️ no failures, 1 WARN

JDK 25.0.2 (major 25), OpenJDK 64-Bit Server VM

Vector lanes (DoubleVector.SPECIES_PREFERRED.length()): 8

threshold value provenance
MaxTrivialSize 6 discovered
MaxInlineSize 35 discovered
FreqInlineSize 325 discovered
MaxInlineLevel 15 discovered
InlineSmallCode 2500 discovered
NodeCountInliningCutoff 18000 assumed
HugeMethodLimit 8000 assumed

-XX:HugeMethodLimit= was rejected on the command line: a develop flag compiled out of this product build, so 8000 is taken from the HotSpot source and cannot be confirmed against the running JVM.

metric now baseline delta
cheatsheet methods 52
total bytes 28655 36556 -21.6%
distinct library ops 202 204 -1.0%
bytes per op 141.9 179.2 -20.8%
severity check at method detail
WARN C9 bytecode/baseline.json cheatsheet.scala the cheatsheet now invokes 202 distinct library operations, down from 204. A shrinking denominator loosens this check and unaudits whatever stopped being called
Annotated methods (184)
method annotations bytes budget used loop at
vecxt.floatarrays$.$minus$eq @Thin 26 74% of 35 no floatarrays.scala:736
vecxt.doublearrays$.$minus$eq @Thin 26 74% of 35 no doublearrays.scala:1031
vecxt.intarrays$.$plus @Thin 24 69% of 35 no intarrays.scala:544
vecxt.intarrays$.$minus @Thin 24 69% of 35 no intarrays.scala:397
vecxt.floatarrays$.$minus @Thin 24 69% of 35 no floatarrays.scala:725
vecxt.doublearrays$.$minus @Thin 24 69% of 35 no doublearrays.scala:1019
vecxt.floatarrays$.dot @Thin 23 66% of 35 no floatarrays.scala:651
vecxt.doublearrays$.dot @Thin 23 66% of 35 no doublearrays.scala:1004
vecxt.NDArrayFloatOps$.compareGeneral @HotPath 195 60% of 325 yes ndarrayFloatOps.scala:67
vecxt.NDArrayFloatOps$.binaryOpGeneral @HotPath 195 60% of 325 yes ndarrayFloatOps.scala:20
vecxt.NDArrayIntOps$.compareGeneral @HotPath 186 57% of 325 yes ndarrayIntOps.scala:67
vecxt.NDArrayIntOps$.binaryOpGeneral @HotPath 186 57% of 325 yes ndarrayIntOps.scala:19
vecxt.NDArrayDoubleOps$.compareGeneral @HotPath 186 57% of 325 yes ndarrayDoubleOps.scala:74
vecxt.NDArrayDoubleOps$.binaryOpGeneral @HotPath 186 57% of 325 yes ndarrayDoubleOps.scala:24
vecxt.doublearrays$.clamp$bang @AllocFree @HotPath 180 55% of 325 yes doublearrays.scala:898
vecxt.matrix$Layout.linearIndex @Thin 19 54% of 35 no matrix.scala:48
vecxt.floatarrays$.clamp$bang @AllocFree @HotPath 172 53% of 325 yes floatarrays.scala:419
vecxt.NDArrayFloatOps$.compareScalarGeneral @HotPath 165 51% of 325 yes ndarrayFloatOps.scala:94
vecxt.NDArrayFloatOps$.binaryOpInPlaceGeneral @HotPath 162 50% of 325 yes ndarrayFloatOps.scala:119
vecxt.NDArrayDoubleOps$.compareScalarGeneral @HotPath 157 48% of 325 yes ndarrayDoubleOps.scala:102
vecxt.NDArrayIntOps$.compareScalarGeneral @HotPath 156 48% of 325 yes ndarrayIntOps.scala:94
vecxt.NDArrayIntOps$.binaryOpInPlaceGeneral @HotPath 153 47% of 325 yes ndarrayIntOps.scala:119
vecxt.NDArrayDoubleOps$.binaryOpInPlaceGeneral @HotPath 153 47% of 325 yes ndarrayDoubleOps.scala:131
vecxt.NDArrayIntOps$.unaryOpGeneral @HotPath 152 47% of 325 yes ndarrayIntOps.scala:42
vecxt.NDArrayDoubleOps$.unaryOpGeneral @HotPath 152 47% of 325 yes ndarrayDoubleOps.scala:48
vecxt.intarrays$.$minus @Thin 16 46% of 35 no intarrays.scala:517
vecxt.floatarrays$.cumsum @Thin 15 43% of 35 no floatarrays.scala:695
vecxt.doublearrays$.cumsum @Thin 15 43% of 35 no doublearrays.scala:985
vecxt.doublearrays$.fillLinspace @AllocFree @HotPath 133 41% of 325 yes doublearrays.scala:34
vecxt.intarrays$.increments @HotPath 121 37% of 325 yes intarrays.scala:217
vecxt.ndarray$.mkNDArray @Thin 13 37% of 35 no ndarray.scala:188
vecxt.floatarrays$.norm @Thin 13 37% of 35 no floatarrays.scala:656
vecxt.doublearrays$.norm @Thin 13 37% of 35 no doublearrays.scala:1009
vecxt.doublearrays$.$plus @AllocFree @HotPath 116 36% of 325 yes doublearrays.scala:1065
vecxt.doublearrays$.$minus @AllocFree @HotPath 116 36% of 325 yes doublearrays.scala:1128
vecxt.doublearrays$.$div @AllocFree @HotPath 116 36% of 325 yes doublearrays.scala:1341
vecxt.doublearrays$.increments @HotPath 110 34% of 325 yes doublearrays.scala:397
vecxt.intarrays$.dot @AllocFree @HotPath 108 33% of 325 yes intarrays.scala:370
vecxt.doublearrays$.unary_$minus @HotPath 108 33% of 325 yes doublearrays.scala:172
vecxt.doublearrays$.tanh @HotPath 108 33% of 325 yes doublearrays.scala:365
vecxt.doublearrays$.tan @HotPath 108 33% of 325 yes doublearrays.scala:354
vecxt.doublearrays$.sqrt @HotPath 108 33% of 325 yes doublearrays.scala:317
vecxt.doublearrays$.sinh @HotPath 108 33% of 325 yes doublearrays.scala:339
vecxt.doublearrays$.sin @HotPath 108 33% of 325 yes doublearrays.scala:328
vecxt.doublearrays$.log1p @HotPath 108 33% of 325 yes doublearrays.scala:306
vecxt.doublearrays$.log10 @HotPath 108 33% of 325 yes doublearrays.scala:295
vecxt.doublearrays$.log @HotPath 108 33% of 325 yes doublearrays.scala:284
vecxt.doublearrays$.expm1 @HotPath 108 33% of 325 yes doublearrays.scala:273
vecxt.doublearrays$.exp @HotPath 108 33% of 325 yes doublearrays.scala:262
vecxt.doublearrays$.cosh @HotPath 108 33% of 325 yes doublearrays.scala:251
vecxt.doublearrays$.cos @HotPath 108 33% of 325 yes doublearrays.scala:240
vecxt.doublearrays$.cbrt @HotPath 108 33% of 325 yes doublearrays.scala:229
vecxt.doublearrays$.atan @HotPath 108 33% of 325 yes doublearrays.scala:218
vecxt.doublearrays$.asin @HotPath 108 33% of 325 yes doublearrays.scala:207
vecxt.doublearrays$.acos @HotPath 108 33% of 325 yes doublearrays.scala:196
vecxt.doublearrays$.abs @HotPath 108 33% of 325 yes doublearrays.scala:184
vecxt.intarrays$.$less @HotPath 106 33% of 325 yes intarrays.scala:46
vecxt.intarrays$.$less$eq @HotPath 106 33% of 325 yes intarrays.scala:50
vecxt.intarrays$.$greater @HotPath 106 33% of 325 yes intarrays.scala:54
vecxt.intarrays$.$greater$eq @HotPath 106 33% of 325 yes intarrays.scala:58
vecxt.intarrays$.$eq$colon$eq @HotPath 106 33% of 325 yes intarrays.scala:38
vecxt.intarrays$.$bang$colon$eq @HotPath 106 33% of 325 yes intarrays.scala:42
vecxt.floatarrays$.unary_$minus @HotPath 104 32% of 325 yes floatarrays.scala:116
vecxt.floatarrays$.tanh @HotPath 104 32% of 325 yes floatarrays.scala:305
vecxt.floatarrays$.tan @HotPath 104 32% of 325 yes floatarrays.scala:294
vecxt.floatarrays$.sqrt @HotPath 104 32% of 325 yes floatarrays.scala:261
vecxt.floatarrays$.sinh @HotPath 104 32% of 325 yes floatarrays.scala:283
vecxt.floatarrays$.sin @HotPath 104 32% of 325 yes floatarrays.scala:272
vecxt.floatarrays$.log1p @HotPath 104 32% of 325 yes floatarrays.scala:250
vecxt.floatarrays$.log10 @HotPath 104 32% of 325 yes floatarrays.scala:239
vecxt.floatarrays$.log @HotPath 104 32% of 325 yes floatarrays.scala:228
vecxt.floatarrays$.expm1 @HotPath 104 32% of 325 yes floatarrays.scala:217
vecxt.floatarrays$.exp @HotPath 104 32% of 325 yes floatarrays.scala:206
vecxt.floatarrays$.cosh @HotPath 104 32% of 325 yes floatarrays.scala:195
vecxt.floatarrays$.cos @HotPath 104 32% of 325 yes floatarrays.scala:184
vecxt.floatarrays$.cbrt @HotPath 104 32% of 325 yes floatarrays.scala:173
vecxt.floatarrays$.atan @HotPath 104 32% of 325 yes floatarrays.scala:162
vecxt.floatarrays$.asin @HotPath 104 32% of 325 yes floatarrays.scala:151
vecxt.floatarrays$.acos @HotPath 104 32% of 325 yes floatarrays.scala:140
vecxt.floatarrays$.abs @HotPath 104 32% of 325 yes floatarrays.scala:128
vecxt.intarrays$.mean @Thin 11 31% of 35 no intarrays.scala:285
vecxt.doublearrays$.sumSIMD @AllocFree @HotPath 102 31% of 325 yes doublearrays.scala:703
vecxt.doublearrays$.tanh$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.tan$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.sqrt$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.sinh$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.sin$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.log1p$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.log10$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.log$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.expm1$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.exp$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.cosh$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.cos$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.cbrt$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.atan$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.asin$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.acos$bang @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.abs$bang @AllocFree @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.doublearrays$.$minus$bang @AllocFree @HotPath 98 30% of 325 yes doublearrays.scala:151
vecxt.floatarrays$.increments @HotPath 97 30% of 325 yes floatarrays.scala:660
vecxt.doublearrays$.$times$times$bang @HotPath 95 29% of 325 yes doublearrays.scala:372
vecxt.intarrays$.$less @HotPath 94 29% of 325 yes intarrays.scala:137
vecxt.intarrays$.$less$eq @HotPath 94 29% of 325 yes intarrays.scala:141
vecxt.intarrays$.$greater @HotPath 94 29% of 325 yes intarrays.scala:145
vecxt.intarrays$.$greater$eq @HotPath 94 29% of 325 yes intarrays.scala:149
vecxt.intarrays$.$eq$colon$eq @HotPath 94 29% of 325 yes intarrays.scala:129
vecxt.intarrays$.$bang$colon$eq @HotPath 94 29% of 325 yes intarrays.scala:133
vecxt.floatarrays$.tanh$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.tan$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.sqrt$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.sinh$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.sin$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.log1p$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.log10$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.log$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.expm1$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.exp$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.cosh$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.cos$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.cbrt$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.atan$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.asin$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.acos$bang @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.abs$bang @AllocFree @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.floatarrays$.$minus$bang @AllocFree @HotPath 93 29% of 325 yes floatarrays.scala:96
vecxt.intarrays$.variance @Thin 10 29% of 35 no intarrays.scala:302
vecxt.intarrays$.std @Thin 10 29% of 35 no intarrays.scala:359
vecxt.doublearrays$.variance @AllocFree @Thin 10 29% of 35 no doublearrays.scala:541
vecxt.doublearrays$.$plus$eq @AllocFree @HotPath 90 28% of 325 yes doublearrays.scala:1087
vecxt.doublearrays$.$minus$eq @AllocFree @HotPath 90 28% of 325 yes doublearrays.scala:1175
vecxt.doublearrays$.$times$eq @AllocFree @HotPath 88 27% of 325 yes doublearrays.scala:1250
vecxt.doublearrays$.productSIMD @AllocFree @HotPath 86 26% of 325 yes doublearrays.scala:726
vecxt.floatarrays$.$times$times$bang @HotPath 85 26% of 325 yes floatarrays.scala:316
vecxt.doublearrays$.sumSIMD @AllocFree @HotPath 85 26% of 325 yes doublearrays.scala:677
vecxt.doublearrays$.fma$bang @AllocFree @HotPath 85 26% of 325 yes doublearrays.scala:1150
vecxt.intarrays$.$plus$eq @AllocFree @HotPath 84 26% of 325 yes intarrays.scala:553
vecxt.intarrays$.$minus$eq @AllocFree @HotPath 84 26% of 325 yes intarrays.scala:525
vecxt.floatarrays$.$times$eq @AllocFree @HotPath 84 26% of 325 yes floatarrays.scala:893
vecxt.floatarrays$.$plus$eq @AllocFree @HotPath 84 26% of 325 yes floatarrays.scala:791
vecxt.floatarrays$.$minus$eq @AllocFree @HotPath 84 26% of 325 yes floatarrays.scala:831
vecxt.ndarrayOps.expandDims @Thin 9 26% of 35 no ndarrayOps.scala
vecxt.intarrays.stdDev @Thin 9 26% of 35 no intarrays.scala
vecxt.intarrays.meanAndVariance @Thin 9 26% of 35 no intarrays.scala
vecxt.intarrays.lte @Thin 9 26% of 35 no intarrays.scala
vecxt.intarrays.lte @Thin 9 26% of 35 no intarrays.scala
vecxt.intarrays.lt @Thin 9 26% of 35 no intarrays.scala
vecxt.intarrays.lt @Thin 9 26% of 35 no intarrays.scala
vecxt.intarrays.gte @Thin 9 26% of 35 no intarrays.scala
vecxt.intarrays.gte @Thin 9 26% of 35 no intarrays.scala
vecxt.intarrays.gt @Thin 9 26% of 35 no intarrays.scala
vecxt.intarrays.gt @Thin 9 26% of 35 no intarrays.scala
vecxt.intarrays$.variance @Thin 9 26% of 35 no intarrays.scala:289
vecxt.intarrays$.stdDev @Thin 9 26% of 35 no intarrays.scala:362
vecxt.intarrays$.std @Thin 9 26% of 35 no intarrays.scala:355
vecxt.intarrays$.meanAndVariance @Thin 9 26% of 35 no intarrays.scala:306
vecxt.doublearrays.meanAndVariance @Thin 9 26% of 35 no doublearrays.scala
vecxt.doublearrays$.meanAndVariance @Thin 9 26% of 35 no doublearrays.scala:555
vecxt.intarrays$.minSIMD @AllocFree @HotPath 82 25% of 325 yes intarrays.scala:573
vecxt.intarrays$.maxSIMD @AllocFree @HotPath 82 25% of 325 yes intarrays.scala:593
vecxt.floatarrays$.productSIMD @AllocFree @HotPath 82 25% of 325 yes floatarrays.scala:539
vecxt.intarrays$.sumSIMD @AllocFree @HotPath 81 25% of 325 yes intarrays.scala:263
vecxt.floatarrays$.sumSIMD @AllocFree @HotPath 81 25% of 325 yes floatarrays.scala:518
vecxt.floatarrays$.fma$bang @AllocFree @HotPath 80 25% of 325 yes floatarrays.scala:342
vecxt.floatarrays$.$times$eq @AllocFree @HotPath 78 24% of 325 yes floatarrays.scala:945
vecxt.ndarray.shapeArray @Thin 8 23% of 35 no ndarray.scala
vecxt.matrix$Matrix.rows @Thin 8 23% of 35 no matrix.scala:195
vecxt.matrix$Matrix.rowStride @Thin 8 23% of 35 no matrix.scala:201
vecxt.matrix$Matrix.offset @Thin 8 23% of 35 no matrix.scala:207
vecxt.matrix$Matrix.numel @Thin 8 23% of 35 no matrix.scala:210
vecxt.matrix$Matrix.isDenseRowMajor @Thin 8 23% of 35 no matrix.scala:216
vecxt.matrix$Matrix.isDenseColMajor @Thin 8 23% of 35 no matrix.scala:213
vecxt.matrix$Matrix.hasSimpleContiguousMemoryLayout @Thin 8 23% of 35 no matrix.scala:228
vecxt.matrix$Matrix.cols @Thin 8 23% of 35 no matrix.scala:198
vecxt.matrix$Matrix.colStride @Thin 8 23% of 35 no matrix.scala:204
vecxt.intarrays$.countsToIdx @HotPath 70 22% of 325 yes intarrays.scala:242
vecxt.intarrays$.$minus$eq @AllocFree @HotPath 67 21% of 325 yes intarrays.scala:406
vecxt.IntArraysX$.select @HotPath 44 14% of 325 yes intarray.scala:74
vecxt.IntArraysX$.contiguous @HotPath 39 12% of 325 yes intarray.scala:111
vecxt.floatarrays$.cumsum$bang @AllocFree @HotPath 27 8% of 325 yes floatarrays.scala:686
vecxt.doublearrays$.cumsum$bang @AllocFree @HotPath 27 8% of 325 yes doublearrays.scala:976
vecxt.floatarrays$.$plus$eq @AllocFree @HotPath 24 7% of 325 no floatarrays.scala:750
vecxt.JvmFloatMatrix$.$times$eq @AllocFree 316 n/a (Phase 2, D1) yes floatmatrix.scala:176
vecxt.JvmDoubleMatrix$.$times$eq @AllocFree 316 n/a (Phase 2, D1) yes doublematrix.scala:207
Method sizes
band methods
<= 6 (trivial, always inlined) 1446
7-35 (inlinable cold) 3934
36-325 (inlinable when hot) 686
326-8000 (not inlined) 119
> 8000 (NEVER JIT COMPILED) 0
bytes method module at
4290 CheatsheetTest$.matrixRangeSlicing experiments cheatsheet.scala:118
3531 CheatsheetTest$.ndArrayInt experiments cheatsheet.scala:416
3511 CheatsheetTest$.ndArrayBoolean experiments cheatsheet.scala:430
2918 CheatsheetTest$.ndArrayFloat experiments cheatsheet.scala:395
2913 CheatsheetTest$.matrixReverseSlicing experiments cheatsheet.scala:125
2845 CheatsheetTest$.ndArrayFloatReductions experiments cheatsheet.scala:405
2440 vecxt_re.Tower.show vecxt_re Tower.scala:63
1493 vecxt.Determinant$.inv vecxt determinant.scala:273
1450 vecxt.ndarrayOps$.apply vecxt ndarrayOps.scala:452
1390 vecxt.Determinant$.adj vecxt determinant.scala:187
1281 vecxt.QR$.qr vecxt qr.scala:39
1250 vecxt.LU$.lu vecxt lu.scala:45
1236 vecxt.Determinant$.det vecxt determinant.scala:44
979 CheatsheetTest$.arrayManipulation experiments cheatsheet.scala:305
963 vecxt.JvmDoubleMatrix$.$plus$eq vecxt doublematrix.scala:307
939 vecxt.JvmFloatMatrix$.floatmatrixAddVectorInPlace vecxt floatmatrix.scala:278
939 vecxt.JvmFloatMatrix$.floatmatrixSubVectorInPlace vecxt floatmatrix.scala:378
937 vecxt_re.Scenarr$.combine vecxt_re scenarr.scala:160
925 vecxt.JvmFloatMatrix$.floatmatrixSubVector vecxt floatmatrix.scala:360
896 vecxt_re.NegativeBinomial$.volweightedMle vecxt_re NegativeBinomial.scala:281
878 vecxt_re.NegativeBinomial$.mle vecxt_re NegativeBinomial.scala:151
861 vecxt.Eigenvalues$.eig vecxt eig.scala:18
843 vecxt.JvmDoubleMatrix$.$plus$eq vecxt doublematrix.scala:389
828 vecxt.JvmFloatMatrix$.floatmatrixAddScalarInPlace vecxt floatmatrix.scala:454
828 vecxt.JvmFloatMatrix$.floatmatrixSubScalarInPlace vecxt floatmatrix.scala:526
Proposed baseline
{
  "jdkMajor": 25,
  "c9": { "totalBytes": 28655, "distinctOps": 202 },
  "annotated": {
    "vecxt.IntArraysX$.contiguous([I)Z": 39,
    "vecxt.IntArraysX$.select([I[I)[I": 44,
    "vecxt.JvmDoubleMatrix$.$times$eq(Lvecxt/matrix$Matrix;[D[DDD)V": 316,
    "vecxt.JvmFloatMatrix$.$times$eq(Lvecxt/matrix$Matrix;[F[FFF)V": 316,
    "vecxt.NDArrayDoubleOps$.binaryOpGeneral(Lvecxt/ndarray$NDArray;Lvecxt/ndarray$NDArray;Lscala/Function2;)Lvecxt/ndarray$NDArray;": 186,
    "vecxt.NDArrayDoubleOps$.binaryOpInPlaceGeneral(Lvecxt/ndarray$NDArray;Lvecxt/ndarray$NDArray;Lscala/Function2;)V": 153,
    "vecxt.NDArrayDoubleOps$.compareGeneral(Lvecxt/ndarray$NDArray;Lvecxt/ndarray$NDArray;Lscala/Function2;)Lvecxt/ndarray$NDArray;": 186,
    "vecxt.NDArrayDoubleOps$.compareScalarGeneral(Lvecxt/ndarray$NDArray;DLscala/Function2;)Lvecxt/ndarray$NDArray;": 157,
    "vecxt.NDArrayDoubleOps$.unaryOpGeneral(Lvecxt/ndarray$NDArray;Lscala/Function1;)Lvecxt/ndarray$NDArray;": 152,
    "vecxt.NDArrayFloatOps$.binaryOpGeneral(Lvecxt/ndarray$NDArray;Lvecxt/ndarray$NDArray;Lscala/Function2;)Lvecxt/ndarray$NDArray;": 195,
    "vecxt.NDArrayFloatOps$.binaryOpInPlaceGeneral(Lvecxt/ndarray$NDArray;Lvecxt/ndarray$NDArray;Lscala/Function2;)V": 162,
    "vecxt.NDArrayFloatOps$.compareGeneral(Lvecxt/ndarray$NDArray;Lvecxt/ndarray$NDArray;Lscala/Function2;)Lvecxt/ndarray$NDArray;": 195,
    "vecxt.NDArrayFloatOps$.compareScalarGeneral(Lvecxt/ndarray$NDArray;FLscala/Function2;)Lvecxt/ndarray$NDArray;": 165,
    "vecxt.NDArrayIntOps$.binaryOpGeneral(Lvecxt/ndarray$NDArray;Lvecxt/ndarray$NDArray;Lscala/Function2;)Lvecxt/ndarray$NDArray;": 186,
    "vecxt.NDArrayIntOps$.binaryOpInPlaceGeneral(Lvecxt/ndarray$NDArray;Lvecxt/ndarray$NDArray;Lscala/Function2;)V": 153,
    "vecxt.NDArrayIntOps$.compareGeneral(Lvecxt/ndarray$NDArray;Lvecxt/ndarray$NDArray;Lscala/Function2;)Lvecxt/ndarray$NDArray;": 186,
    "vecxt.NDArrayIntOps$.compareScalarGeneral(Lvecxt/ndarray$NDArray;ILscala/Function2;)Lvecxt/ndarray$NDArray;": 156,
    "vecxt.NDArrayIntOps$.unaryOpGeneral(Lvecxt/ndarray$NDArray;Lscala/Function1;)Lvecxt/ndarray$NDArray;": 152,
    "vecxt.doublearrays$.$div([DDII[DI)V": 116,
    "vecxt.doublearrays$.$minus$bang([D)V": 98,
    "vecxt.doublearrays$.$minus$eq([DD)V": 90,
    "vecxt.doublearrays$.$minus$eq([D[D)V": 26,
    "vecxt.doublearrays$.$minus([DDII[DI)V": 116,
    "vecxt.doublearrays$.$minus([D[D)[D": 24,
    "vecxt.doublearrays$.$plus$eq([DD)V": 90,
    "vecxt.doublearrays$.$plus([DDII[DI)V": 116,
    "vecxt.doublearrays$.$times$eq([D[D)V": 88,
    "vecxt.doublearrays$.$times$times$bang([DD)V": 95,
    "vecxt.doublearrays$.abs$bang([D)V": 98,
    "vecxt.doublearrays$.abs([D)[D": 108,
    "vecxt.doublearrays$.acos$bang([D)V": 98,
    "vecxt.doublearrays$.acos([D)[D": 108,
    "vecxt.doublearrays$.asin$bang([D)V": 98,
    "vecxt.doublearrays$.asin([D)[D": 108,
    "vecxt.doublearrays$.atan$bang([D)V": 98,
    "vecxt.doublearrays$.atan([D)[D": 108,
    "vecxt.doublearrays$.cbrt$bang([D)V": 98,
    "vecxt.doublearrays$.cbrt([D)[D": 108,
    "vecxt.doublearrays$.clamp$bang([DDD)V": 180,
    "vecxt.doublearrays$.cos$bang([D)V": 98,
    "vecxt.doublearrays$.cos([D)[D": 108,
    "vecxt.doublearrays$.cosh$bang([D)V": 98,
    "vecxt.doublearrays$.cosh([D)[D": 108,
    "vecxt.doublearrays$.cumsum$bang([D)V": 27,
    "vecxt.doublearrays$.cumsum([D)[D": 15,
    "vecxt.doublearrays$.dot([D[D)D": 23,
    "vecxt.doublearrays$.exp$bang([D)V": 98,
    "vecxt.doublearrays$.exp([D)[D": 108,
    "vecxt.doublearrays$.expm1$bang([D)V": 98,
    "vecxt.doublearrays$.expm1([D)[D": 108,
    "vecxt.doublearrays$.fillLinspace([DDD)V": 133,
    "vecxt.doublearrays$.fma$bang([DDD)V": 85,
    "vecxt.doublearrays$.increments([D)[D": 110,
    "vecxt.doublearrays$.log$bang([D)V": 98,
    "vecxt.doublearrays$.log([D)[D": 108,
    "vecxt.doublearrays$.log10$bang([D)V": 98,
    "vecxt.doublearrays$.log10([D)[D": 108,
    "vecxt.doublearrays$.log1p$bang([D)V": 98,
    "vecxt.doublearrays$.log1p([D)[D": 108,
    "vecxt.doublearrays$.meanAndVariance([D)Lvecxt/MeanAndVariance;": 9,
    "vecxt.doublearrays$.norm([D)D": 13,
    "vecxt.doublearrays$.productSIMD([D)D": 86,
    "vecxt.doublearrays$.sin$bang([D)V": 98,
    "vecxt.doublearrays$.sin([D)[D": 108,
    "vecxt.doublearrays$.sinh$bang([D)V": 98,
    "vecxt.doublearrays$.sinh([D)[D": 108,
    "vecxt.doublearrays$.sqrt$bang([D)V": 98,
    "vecxt.doublearrays$.sqrt([D)[D": 108,
    "vecxt.doublearrays$.sumSIMD([D)D": 85,
    "vecxt.doublearrays$.sumSIMD([DII)D": 102,
    "vecxt.doublearrays$.tan$bang([D)V": 98,
    "vecxt.doublearrays$.tan([D)[D": 108,
    "vecxt.doublearrays$.tanh$bang([D)V": 98,
    "vecxt.doublearrays$.tanh([D)[D": 108,
    "vecxt.doublearrays$.unary_$minus([D)[D": 108,
    "vecxt.doublearrays$.variance([DLvecxt/VarianceMode;)D": 10,
    "vecxt.doublearrays.meanAndVariance([DLvecxt/VarianceMode;)Lvecxt/MeanAndVariance;": 9,
    "vecxt.floatarrays$.$minus$bang([F)V": 93,
    "vecxt.floatarrays$.$minus$eq([FF)V": 84,
    "vecxt.floatarrays$.$minus$eq([F[F)V": 26,
    "vecxt.floatarrays$.$minus([F[F)[F": 24,
    "vecxt.floatarrays$.$plus$eq([FF)V": 84,
    "vecxt.floatarrays$.$plus$eq([F[F)V": 24,
    "vecxt.floatarrays$.$times$eq([FF)V": 78,
    "vecxt.floatarrays$.$times$eq([F[F)V": 84,
    "vecxt.floatarrays$.$times$times$bang([FF)V": 85,
    "vecxt.floatarrays$.abs$bang([F)V": 93,
    "vecxt.floatarrays$.abs([F)[F": 104,
    "vecxt.floatarrays$.acos$bang([F)V": 93,
    "vecxt.floatarrays$.acos([F)[F": 104,
    "vecxt.floatarrays$.asin$bang([F)V": 93,
    "vecxt.floatarrays$.asin([F)[F": 104,
    "vecxt.floatarrays$.atan$bang([F)V": 93,
    "vecxt.floatarrays$.atan([F)[F": 104,
    "vecxt.floatarrays$.cbrt$bang([F)V": 93,
    "vecxt.floatarrays$.cbrt([F)[F": 104,
    "vecxt.floatarrays$.clamp$bang([FFF)V": 172,
    "vecxt.floatarrays$.cos$bang([F)V": 93,
    "vecxt.floatarrays$.cos([F)[F": 104,
    "vecxt.floatarrays$.cosh$bang([F)V": 93,
    "vecxt.floatarrays$.cosh([F)[F": 104,
    "vecxt.floatarrays$.cumsum$bang([F)V": 27,
    "vecxt.floatarrays$.cumsum([F)[F": 15,
    "vecxt.floatarrays$.dot([F[F)F": 23,
    "vecxt.floatarrays$.exp$bang([F)V": 93,
    "vecxt.floatarrays$.exp([F)[F": 104,
    "vecxt.floatarrays$.expm1$bang([F)V": 93,
    "vecxt.floatarrays$.expm1([F)[F": 104,
    "vecxt.floatarrays$.fma$bang([FFF)V": 80,
    "vecxt.floatarrays$.increments([F)[F": 97,
    "vecxt.floatarrays$.log$bang([F)V": 93,
    "vecxt.floatarrays$.log([F)[F": 104,
    "vecxt.floatarrays$.log10$bang([F)V": 93,
    "vecxt.floatarrays$.log10([F)[F": 104,
    "vecxt.floatarrays$.log1p$bang([F)V": 93,
    "vecxt.floatarrays$.log1p([F)[F": 104,
    "vecxt.floatarrays$.norm([F)F": 13,
    "vecxt.floatarrays$.productSIMD([F)F": 82,
    "vecxt.floatarrays$.sin$bang([F)V": 93,
    "vecxt.floatarrays$.sin([F)[F": 104,
    "vecxt.floatarrays$.sinh$bang([F)V": 93,
    "vecxt.floatarrays$.sinh([F)[F": 104,
    "vecxt.floatarrays$.sqrt$bang([F)V": 93,
    "vecxt.floatarrays$.sqrt([F)[F": 104,
    "vecxt.floatarrays$.sumSIMD([F)F": 81,
    "vecxt.floatarrays$.tan$bang([F)V": 93,
    "vecxt.floatarrays$.tan([F)[F": 104,
    "vecxt.floatarrays$.tanh$bang([F)V": 93,
    "vecxt.floatarrays$.tanh([F)[F": 104,
    "vecxt.floatarrays$.unary_$minus([F)[F": 104,
    "vecxt.intarrays$.$bang$colon$eq([II)[Z": 94,
    "vecxt.intarrays$.$bang$colon$eq([I[I)[Z": 106,
    "vecxt.intarrays$.$eq$colon$eq([II)[Z": 94,
    "vecxt.intarrays$.$eq$colon$eq([I[I)[Z": 106,
    "vecxt.intarrays$.$greater$eq([II)[Z": 94,
    "vecxt.intarrays$.$greater$eq([I[I)[Z": 106,
    "vecxt.intarrays$.$greater([II)[Z": 94,
    "vecxt.intarrays$.$greater([I[I)[Z": 106,
    "vecxt.intarrays$.$less$eq([II)[Z": 94,
    "vecxt.intarrays$.$less$eq([I[I)[Z": 106,
    "vecxt.intarrays$.$less([II)[Z": 94,
    "vecxt.intarrays$.$less([I[I)[Z": 106,
    "vecxt.intarrays$.$minus$eq([II)V": 67,
    "vecxt.intarrays$.$minus$eq([I[I)V": 84,
    "vecxt.intarrays$.$minus([II)[I": 16,
    "vecxt.intarrays$.$minus([I[I)[I": 24,
    "vecxt.intarrays$.$plus$eq([I[I)V": 84,
    "vecxt.intarrays$.$plus([I[I)[I": 24,
    "vecxt.intarrays$.countsToIdx([I)[I": 70,
    "vecxt.intarrays$.dot([I[I)I": 108,
    "vecxt.intarrays$.increments([I)[I": 121,
    "vecxt.intarrays$.maxSIMD([I)I": 82,
    "vecxt.intarrays$.mean([I)D": 11,
    "vecxt.intarrays$.meanAndVariance([I)Lvecxt/MeanAndVariance;": 9,
    "vecxt.intarrays$.minSIMD([I)I": 82,
    "vecxt.intarrays$.std([I)D": 9,
    "vecxt.intarrays$.std([ILvecxt/VarianceMode;)D": 10,
    "vecxt.intarrays$.stdDev([I)D": 9,
    "vecxt.intarrays$.sumSIMD([I)I": 81,
    "vecxt.intarrays$.variance([I)D": 9,
    "vecxt.intarrays$.variance([ILvecxt/VarianceMode;)D": 10,
    "vecxt.intarrays.gt([II)[Z": 9,
    "vecxt.intarrays.gt([I[I)[Z": 9,
    "vecxt.intarrays.gte([II)[Z": 9,
    "vecxt.intarrays.gte([I[I)[Z": 9,
    "vecxt.intarrays.lt([II)[Z": 9,
    "vecxt.intarrays.lt([I[I)[Z": 9,
    "vecxt.intarrays.lte([II)[Z": 9,
    "vecxt.intarrays.lte([I[I)[Z": 9,
    "vecxt.intarrays.meanAndVariance([ILvecxt/VarianceMode;)Lvecxt/MeanAndVariance;": 9,
    "vecxt.intarrays.stdDev([ILvecxt/VarianceMode;)D": 9,
    "vecxt.matrix$Layout.linearIndex(II)I": 19,
    "vecxt.matrix$Matrix.colStride()I": 8,
    "vecxt.matrix$Matrix.cols()I": 8,
    "vecxt.matrix$Matrix.hasSimpleContiguousMemoryLayout()Z": 8,
    "vecxt.matrix$Matrix.isDenseColMajor()Z": 8,
    "vecxt.matrix$Matrix.isDenseRowMajor()Z": 8,
    "vecxt.matrix$Matrix.numel()I": 8,
    "vecxt.matrix$Matrix.offset()I": 8,
    "vecxt.matrix$Matrix.rowStride()I": 8,
    "vecxt.matrix$Matrix.rows()I": 8,
    "vecxt.ndarray$.mkNDArray(Ljava/lang/Object;[I[II)Lvecxt/ndarray$NDArray;": 13,
    "vecxt.ndarray.shapeArray(Lvecxt/ndarray$NDArray;)[I": 8,
    "vecxt.ndarrayOps.expandDims(Lvecxt/ndarray$NDArray;I)Lvecxt/ndarray$NDArray;": 9
  }
}

Co-authored-by: Quafadas <24899792+Quafadas@users.noreply.github.com>
@Quafadas
Quafadas marked this pull request as ready for review September 11, 2026 12:56
@Quafadas
Quafadas merged commit 473cdc8 into main Sep 11, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

FloatMatrix

2 participants