perf(core): O(1) SymbolTable for ModelicaDAE variable lookups, replac… · modelscript/modelscript@e0852df · GitHub
Skip to content

Commit e0852df

Browse files
committed
perf(core): O(1) SymbolTable for ModelicaDAE variable lookups, replace ~40 linear scans across flattener pipeline
1 parent dd61de0 commit e0852df

7 files changed

Lines changed: 255 additions & 52 deletions

File tree

‎packages/core/src/compiler/modelica/ad-codegen.ts‎

Lines changed: 1 addition & 1 deletion

‎packages/core/src/compiler/modelica/ad-jacobian.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ export function buildAdJacobian(dae: ModelicaDAE): ((t: number, y: number[]) =>
250250
const baseName = ld || rd;
251251
if (!baseName) continue;
252252
const rhs = ld ? se.expression2 : se.expression1;
253-
const v = dae.variables.find((dv) => dv.name === baseName);
253+
const v = dae.variables.get(baseName);
254254
const dims = v?.arrayDimensions ?? [];
255255
const size = dims.length > 0 ? dims.reduce((a: number, b: number) => a * b, 1) : 1;
256256
for (let i = 0; i < size; i++) {

‎packages/core/src/compiler/modelica/branch-and-bound.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ export function buildSbbFromDAE(
408408
export function expandArrayBounds(box: DomainBox, dae: ModelicaDAE): DomainBox {
409409
const expanded: DomainBox = new Map();
410410
for (const [name, interval] of box) {
411-
const v = dae.variables.find((dv) => dv.name === name);
411+
const v = dae.variables.get(name);
412412
if (v?.arrayDimensions && v.arrayDimensions.length > 0) {
413413
const size = v.arrayDimensions.reduce((a: number, b: number) => a * b, 1);
414414
for (let i = 0; i < size; i++) {

‎packages/core/src/compiler/modelica/dae.ts‎

Lines changed: 209 additions & 5 deletions

0 commit comments

Comments
 (0)