Skip to content

Added a "bulk" Linear regression operator that returns a tensor of#634

Merged
highperformancecoder merged 4 commits intomasterfrom
feature-bulk-linear-regression
Mar 30, 2026
Merged

Added a "bulk" Linear regression operator that returns a tensor of#634
highperformancecoder merged 4 commits intomasterfrom
feature-bulk-linear-regression

Conversation

@highperformancecoder
Copy link
Copy Markdown
Owner

@highperformancecoder highperformancecoder commented Mar 29, 2026

  • Analyze codebase and understand existing linearRegression tests
  • Fix null pointer crash in linearRegression::setArguments (added if (!y) return; guard)
  • Fix null pointer crash in bulkLinearRegression::setArguments (added if (!y) return; guard)
  • Fix LaTeX renderer (node_latex.cc:412) - now uses ->latex() and closes the outer }
  • Fix equation display renderer (equationDisplayRender.cc:1063) - now uses arguments[1][0] instead of arguments[0][1]
  • Add tests for bulkLinearRegression:
    • vectorBulkLinearRegression: verifies output shape (2 elements: Slope/Intercept) and correct values for y=x+1
    • matrixBulkLinearRegression: verifies output shape ({2,2}: Slope/Intercept × columns) and correct values for two regression lines

📱 Kick off Copilot coding agent tasks wherever you are with GitHub Mobile, available on iOS and Android.


This change is Reviewable

Summary by CodeRabbit

  • New Features

    • Added a bulk linear regression operation type for advanced regression analysis on vectors and matrices, including output rendering across LaTeX, MATLAB, and visual display formats.
  • Bug Fixes

    • Fixed LaTeX equation rendering for linear regression to properly display closing notation.
  • Chores

    • Removed build-time debug output for cleaner compilation logs.
    • Updated project dependencies.

slope/intercepts, rather than the linear interpolation that the
standard linear regression operator does.
Copilot AI review requested due to automatic review settings March 29, 2026 06:37
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 29, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6670ad03-0ed6-4a77-a737-f550f73c143d

📥 Commits

Reviewing files that changed from the base of the PR and between 9614def and 3d969c8.

📒 Files selected for processing (6)
  • engine/equationDisplayRender.cc
  • engine/minskyTensorOps.cc
  • engine/node_latex.cc
  • model/operation.cc
  • schema/operationType.h
  • test/testTensorOps.cc
✅ Files skipped from review due to trivial changes (1)
  • schema/operationType.h
🚧 Files skipped from review as they are similar to previous changes (1)
  • engine/node_latex.cc

📝 Walkthrough

Walkthrough

Adds a new OperationType bulkLinearRegression with tensor implementation, registration, rendering/LaTeX/MATLAB specializations, derivative stub, unit/icon handling, tests, and submodule/Makefile pointer updates; all changes are confined to the listed files.

Changes

Cohort / File(s) Summary
Build & Submodules
Makefile, RavelCAPI, ecolab
Removed two $(warning ...) lines from the $(EXES) recipe; updated submodule commit references for RavelCAPI and ecolab.
Schema / Operation Type
schema/operationType.h, schema/operationType.cc
Inserted bulkLinearRegression into OperationType::Type (after linearRegression) and added numArguments<...> specialization returning 2.
Tensor ops / Regression core
engine/minskyTensorOps.cc
Added a concrete minsky::LinearRegression ITensor-based implementation and refactored GeneralTensorOp<OperationType::linearRegression> to inherit it; added GeneralTensorOp<OperationType::bulkLinearRegression> specialization that injects a "Linear Parameters" axis and implements slope/intercept mapping and timestamp/scale logic.
Rendering / Display / LaTeX / MATLAB
engine/equationDisplayRender.cc, engine/node_latex.cc, engine/node_matlab.cc
Fixed argument rendering order for covariance/correlation/linearRegression; added surface rendering for bLinReg and corresponding LaTeX ({\mathrm{bLinReg}(...)}]) and MATLAB (bLinReg(...)) specializations; added fallbacks printing "0" when args are missing.
Derivatives
engine/derivative.cc
Added vector derivative specialization for OperationType::bulkLinearRegression that uses VECTOR_DERIVATIVE_NOT_IMPLEMENTED (same error path as other unsupported vector ops).
Model: units, icon, registration
model/operation.cc, model/operationRS1.cc
Extended OperationBase::units to handle bulkLinearRegression like linearRegression; added iconDraw specialization for bulkLinearRegression; registered the new operation via DEFOP(bulkLinearRegression).
Tests
test/testTensorOps.cc
Added GoogleTest cases exercising OperationType::bulkLinearRegression for 1D and 2D inputs, asserting output hypercube, dimension labels ("Linear Parameters": {"Slope","Intercept"}), sizes, and numeric slope/intercept results.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰 A bulk regression hopped upon my lap,
Slope and intercept tucked in a map,
Tensors wired, renderings gleam,
Submodules updated—what a dream! 📈✨

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 3.13% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title is incomplete and cuts off mid-sentence, making it vague about what 'a tensor of' refers to. Complete the title to clearly specify the output type (e.g., 'Added a bulk linear regression operator that returns a tensor of slope/intercept values') or clarify what data structure is returned.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature-bulk-linear-regression

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new bulkLinearRegression operation type intended to return regression parameters (slope/intercept) as a tensor, distinct from the existing linearRegression behavior.

Changes:

  • Extends the OperationType enum and wiring/instantiation paths to include bulkLinearRegression.
  • Implements a new tensor-op specialization for bulkLinearRegression, plus units and icon rendering support.
  • Adds/updates a large set of web UI icon PNG assets (including bulkLinearRegression.png) and adds equation/LaTeX/Matlab renderers for the new op.

Reviewed changes

Copilot reviewed 12 out of 64 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
schema/operationType.h Adds bulkLinearRegression to the operation type enum.
schema/operationType.cc Defines numArguments for bulkLinearRegression.
model/operationRS1.cc Instantiates/exports the new operation type for the RS layer.
model/operation.cc Adds units handling + icon drawing for bulkLinearRegression.
engine/node_matlab.cc Adds Matlab codegen for bulkLinearRegression.
engine/node_latex.cc Adds LaTeX codegen for bulkLinearRegression.
engine/minskyTensorOps.cc Refactors linear regression implementation and adds bulkLinearRegression tensor op.
engine/equationDisplayRender.cc Adds equation rendering for bulkLinearRegression.
engine/derivative.cc Marks vector derivative as not implemented for bulkLinearRegression.
Makefile Removes debug warnings from the build.
gui-js/apps/minsky-web/src/assets/images/icons/bulkLinearRegression.png Adds web icon asset for the new operation.
gui-js/apps/minsky-web/src/assets/images/icons/zero.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/userFunction.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/time.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/tanh.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/tan.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/supremum.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/supIndex.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/sum.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/stdDev.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/slice.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/size.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/sinh.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/sin.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/shape.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/runningSum.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/runningProduct.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/runningAv.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/product.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/pow.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/polygamma.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/pi.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/percent.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/min.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/median.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/max.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/lt.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/log.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/ln.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/le.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/innerProduct.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/infimum.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/infIndex.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/inf.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/index.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/frac.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/floor.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/exp.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/euler.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/eq.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/differentiate.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/differencePlus.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/difference.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/covariance.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/cosh.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/cos.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/correlation.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/atan.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/asin.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/any.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/all.png Adds/updates web icon asset.
gui-js/apps/minsky-web/src/assets/images/icons/acos.png Adds/updates web icon asset.
Comments suppressed due to low confidence (1)

engine/minskyTensorOps.cc:1157

  • LinearRegression::setArguments() now computes dimension by iterating m_hypercube.xvectors and using rank(), but m_hypercube is no longer initialised from y->hypercube() in this function. This can leave dimension incorrect (or dependent on stale state from a previous call), breaking axis selection and the fallback x-from-xvector logic. Compute dimension from y->hypercube() / y->rank() (or set hypercube(y->hypercube()) before this block, then let derived classes override the output hypercube as needed).
      {
        auto& xv=m_hypercube.xvectors;
        dimension=rank()>1? rank(): 0;
        for (auto i=xv.begin(); i!=xv.end(); ++i)
          if (i->name==args.dimension)
            dimension=i-xv.begin();
      }

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +1250 to +1259
void setArguments(const TensorPtr& y, const TensorPtr& x,
const ITensor::Args& args) override
{
LinearRegression::setArguments(y,x,args);
if (dimension>=y->rank())
throw_error("Need to specify axis");
auto hc=y->hypercube();
hc.xvectors[dimension]=civita::XVector("Linear Parameters",{},{"Slope","Intercept"});
hypercube(hc);
}
Copy link

Copilot AI Mar 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GeneralTensorOp::setArguments() assumes y is non-null (y->rank(), y->hypercube()), but LinearRegression::setArguments() explicitly supports !y by returning early. This override should mirror that behaviour (early return when !y) to avoid dereferencing a null tensor when the op is unwired.

Copilot uses AI. Check for mistakes.
if (!arguments.empty() && !arguments[0].empty() && arguments[0][0] &&
arguments.size()>1 && !arguments[1].empty() && arguments[1][0])
return o<<"{\\mathrm{bLinReg}\\left("<<arguments[0][0]->latex()<<
","<<arguments[1][0]<<"\\right)";
Copy link

Copilot AI Mar 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the bulkLinearRegression LaTeX renderer, the second argument is streamed as arguments[1][0] rather than rendered via ->latex(), which will output a pointer/address (and also leaves the \mathrm{...} group unbalanced because the outer { is never closed). Use arguments[1][0]->latex() and ensure the emitted string closes the outer brace (eg ...\right)}) to produce valid LaTeX.

Suggested change
","<<arguments[1][0]<<"\\right)";
","<<arguments[1][0]->latex()<<"\\right)}";

Copilot uses AI. Check for mistakes.
parenthesise(surf, [&](Surface& surf){
arguments[0][0]->render(surf);
print(surf.cairo(),",",Anchor::nw);
arguments[0][1]->render(surf);
Copy link

Copilot AI Mar 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In bulkLinearRegression equation rendering, the second operand is rendered using arguments[0][1], but the operand existence check uses arguments[1][0] (and most other binary renderers use arguments[1][0]). This likely renders the wrong node or can go out of bounds. Render the second argument via arguments[1][0] here.

Suggested change
arguments[0][1]->render(surf);
arguments[1][0]->render(surf);

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
engine/minskyTensorOps.cc (2)

1143-1148: ⚠️ Potential issue | 🔴 Critical

Guard the unwired state before touching x or y.

LinearRegression::setArguments() already treats !y as valid, but timestamp() and both derived setArguments() overloads still dereference x/y unconditionally. That turns an unwired operator into a null-deref during graph construction/evaluation.

🛡️ Suggested fix
@@
       if (!y)
         {
+          x.reset();
+          this->y.reset();
           m_index.clear();
           hypercube({});
           return;
         }
@@
-    civita::ITensor::Timestamp timestamp() const override {return std::max(x->timestamp(), y->timestamp());}
+    civita::ITensor::Timestamp timestamp() const override
+    {
+      return std::max(x ? x->timestamp() : Timestamp(),
+                      y ? y->timestamp() : Timestamp());
+    }
@@
       LinearRegression::setArguments(y,x,args);
+      if (!y) return;
       hypercube(y->hypercube());
@@
       LinearRegression::setArguments(y,x,args);
+      if (!y) return;
       if (dimension>=y->rank())

Also applies to: 1211-1211, 1219-1224, 1250-1259

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@engine/minskyTensorOps.cc` around lines 1143 - 1148, The code dereferences
x/y without guarding for an unwired (null) input; update timestamp(),
LinearRegression::setArguments() overloads and the derived setArguments()
methods to check the unwired condition (e.g., if (!y) or if (!x || !y) as
appropriate) before accessing x or y and return early or skip processing
(mirroring the existing LinearRegression::setArguments() behavior); ensure
m_index.clear() and hypercube({}) remain where needed for the !y path and do not
touch x/y when they are null to avoid null-derefs.

1151-1169: ⚠️ Potential issue | 🔴 Critical

Resolve the regression axis from y->hypercube(), not from this op's current hypercube.

After the refactor, this block reads m_hypercube before it has been initialized from y. On a fresh op, every named axis is ignored, so rank>1 regressions silently run on axis 0 and bulkLinearRegression no longer rejects missing/invalid axis names.

🔧 Suggested fix
@@
-      {
-        auto& xv=m_hypercube.xvectors;
-        dimension=rank()>1? rank(): 0;
-        for (auto i=xv.begin(); i!=xv.end(); ++i)
-          if (i->name==args.dimension)
-            dimension=i-xv.begin();
-      }
+      {
+        const auto& xv=y->hypercube().xvectors;
+        dimension=y->rank()>1? y->rank(): 0;
+        for (auto i=xv.begin(); i!=xv.end(); ++i)
+          if (i->name==args.dimension)
+            dimension=i-xv.begin();
+      }
@@
-          if (rank()>1 && dimension>=rank()) return;
+          if (y->rank()>1 && dimension>=y->rank()) return;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@engine/minskyTensorOps.cc` around lines 1151 - 1169, The code currently
resolves named axes using m_hypercube before m_hypercube has been initialized
from y, causing named axes to be ignored; change the logic so you initialize or
reference y's hypercube (y->hypercube() or equivalent) to determine
dimension/name lookup before using m_hypercube: use y->hypercube().xvectors when
searching for args.dimension, assign dimension from that hypercube, then proceed
to set sumy/setArguments and the rank checks (rank()>1 && dimension>=rank()) so
invalid/missing axis names are rejected as before (affecting the block around
sumy.setArgument, SpreadY creation, setArguments and the subsequent x
construction/bulkLinearRegression path).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@engine/equationDisplayRender.cc`:
- Around line 1053-1064: The render implementation of
OperationDAG<OperationType::bulkLinearRegression>::render is indexing the wrong
input list for the second argument: the guard checks arguments[1][0] but the
code uses arguments[0][1], which can go out of bounds; update the lambda body to
render the second item from the validated second input list (use arguments[1][1]
for the second rendered argument) and keep the existing guards (arguments,
arguments[0][0], arguments[1][0], etc.) to ensure safety.

In `@engine/minskyTensorOps.cc`:
- Around line 1253-1258: LinearRegression::setArguments inherits m_index from
y->index(), but after replacing the regression axis via hc.xvectors[...] and
calling hypercube(hc) the old linear indices are invalid; clear or rebuild
m_index so output indices match the new hypercube. Specifically, after the
hypercube(hc) call reset m_index (e.g. set empty) or recompute it from the
result hypercube/scale.index() instead of y->index(); ensure any downstream
logic uses the rebuilt m_index derived from scale.index() when producing sparse
output.

In `@engine/node_latex.cc`:
- Around line 406-413: The latex emitter for
OperationDAG<OperationType::bulkLinearRegression>::latex incorrectly streams
arguments[1][0] directly and omits the closing brace; update the return
expression to call arguments[1][0]->latex() and append the missing closing
braces so the output is something like o << "{\\mathrm{bLinReg}\\left(" <<
arguments[0][0]->latex() << "," << arguments[1][0]->latex() << "\\right)}";
ensuring parentheses and the outer '{' are properly closed.

In `@model/operation.cc`:
- Around line 518-519: The bulkLinearRegression branch incorrectly returns
m_ports[1]->units(check) for both outputs; change it to compute and return the
correct units for slope and intercept: derive slope units as units(Y)/units(X)
and intercept units as units(Y) using the existing units() accessor on input
ports (e.g., m_ports[index]->units(check)), then populate/return the two output
unit entries (matching the output port order for slope and intercept) instead of
forwarding m_ports[1]->units(check); update the case handling for
bulkLinearRegression in Operation::units (or the function containing that
switch) to construct and return the proper unit vector for both outputs.

---

Outside diff comments:
In `@engine/minskyTensorOps.cc`:
- Around line 1143-1148: The code dereferences x/y without guarding for an
unwired (null) input; update timestamp(), LinearRegression::setArguments()
overloads and the derived setArguments() methods to check the unwired condition
(e.g., if (!y) or if (!x || !y) as appropriate) before accessing x or y and
return early or skip processing (mirroring the existing
LinearRegression::setArguments() behavior); ensure m_index.clear() and
hypercube({}) remain where needed for the !y path and do not touch x/y when they
are null to avoid null-derefs.
- Around line 1151-1169: The code currently resolves named axes using
m_hypercube before m_hypercube has been initialized from y, causing named axes
to be ignored; change the logic so you initialize or reference y's hypercube
(y->hypercube() or equivalent) to determine dimension/name lookup before using
m_hypercube: use y->hypercube().xvectors when searching for args.dimension,
assign dimension from that hypercube, then proceed to set sumy/setArguments and
the rank checks (rank()>1 && dimension>=rank()) so invalid/missing axis names
are rejected as before (affecting the block around sumy.setArgument, SpreadY
creation, setArguments and the subsequent x construction/bulkLinearRegression
path).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 35797ea0-f966-44a9-a040-8d26cd0ef12d

📥 Commits

Reviewing files that changed from the base of the PR and between 21994a2 and 9614def.

⛔ Files ignored due to path filters (52)
  • gui-js/apps/minsky-web/src/assets/images/icons/acos.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/all.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/any.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/asin.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/atan.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/bulkLinearRegression.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/correlation.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/cos.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/cosh.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/covariance.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/difference.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/differencePlus.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/differentiate.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/eq.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/euler.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/exp.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/floor.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/frac.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/index.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/inf.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/infIndex.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/infimum.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/innerProduct.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/le.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/ln.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/log.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/lt.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/max.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/median.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/min.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/percent.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/pi.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/polygamma.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/pow.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/product.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/runningAv.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/runningProduct.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/runningSum.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/shape.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/sin.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/sinh.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/size.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/slice.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/stdDev.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/sum.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/supIndex.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/supremum.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/tan.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/tanh.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/time.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/userFunction.png is excluded by !**/*.png
  • gui-js/apps/minsky-web/src/assets/images/icons/zero.png is excluded by !**/*.png
📒 Files selected for processing (12)
  • Makefile
  • RavelCAPI
  • ecolab
  • engine/derivative.cc
  • engine/equationDisplayRender.cc
  • engine/minskyTensorOps.cc
  • engine/node_latex.cc
  • engine/node_matlab.cc
  • model/operation.cc
  • model/operationRS1.cc
  • schema/operationType.cc
  • schema/operationType.h
💤 Files with no reviewable changes (1)
  • Makefile

…d tests

Agent-Logs-Url: https://github.com/highperformancecoder/minsky/sessions/6762f0ad-cf41-452b-b6b4-3fc692881ff2

Co-authored-by: highperformancecoder <3075825+highperformancecoder@users.noreply.github.com>
@highperformancecoder highperformancecoder merged commit a54d3f0 into master Mar 30, 2026
7 checks passed
@highperformancecoder highperformancecoder deleted the feature-bulk-linear-regression branch March 30, 2026 05:07
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.

3 participants