Skip to content

Commit

Permalink
remove _logger from Expression
Browse files Browse the repository at this point in the history
  • Loading branch information
metelkin committed Jun 26, 2024
1 parent 6b20315 commit 2abea22
Show file tree
Hide file tree
Showing 15 changed files with 65 additions and 75 deletions.
1 change: 0 additions & 1 deletion src/core/c-switcher.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ class CSwitcher extends _Switcher {
if (typeof q.trigger !== 'undefined') {
try { // this is for the cases of wrong ExprString structure
let expr = Expression.fromString(q.trigger);
expr._logger = logger;
if (!expr.hasBooleanResult()) {
this.trigger = expr;
} else {
Expand Down
1 change: 0 additions & 1 deletion src/core/d-switcher.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ class DSwitcher extends _Switcher {
q.trigger += '';
try { // this is for the cases of wrong ExprString structure
let expr = Expression.fromString(q.trigger);
expr._logger = logger;
if (expr.hasBooleanResult()) {
this.trigger = expr;
} else {
Expand Down
7 changes: 0 additions & 7 deletions src/core/expression.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@ const { uniqBy } = require('../utils');
class Expression {
/*
exprParsed: <mathjs.Node>
XXX: currently Expression instances have _logger property
which is set after expression creation
in future versions it should be resolved by automatic addition of __platform__ property
*/
constructor(exprParsed){
this.exprParsed = exprParsed;
Expand Down Expand Up @@ -68,7 +64,6 @@ class Expression {
clone(){
let clonedMath = this.exprParsed.cloneDeep();
let expr = new Expression(clonedMath);
expr._logger = this._logger;
return expr;
}
// substitute user defined functions by their content, return Expression
Expand All @@ -82,7 +77,6 @@ class Expression {
});

let expr = new Expression(transformed);
expr._logger = this._logger;

return expr;
}
Expand Down Expand Up @@ -157,7 +151,6 @@ class Expression {
]);

let expr = new Expression(node);
expr._logger = this._logger; // set the same logger

return expr;
}
Expand Down
1 change: 0 additions & 1 deletion src/core/function-def.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ class FunctionDef extends Top {
if (q.math) {
try {
var expr = Expression.fromString(q.math);
expr._logger = logger;
if (!expr.hasBooleanResult()) {
this.math = expr;
} else {
Expand Down
1 change: 0 additions & 1 deletion src/core/record.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ class Record extends _Size {
if (typeof x === 'string' || typeof x === 'number') {
try { // this is for the cases of wrong ExprString structure
let expr = Expression.fromString(x);
expr._logger = logger;
if (!expr.hasBooleanResult()) {
this.assignments[key] = expr;
} else {
Expand Down
1 change: 0 additions & 1 deletion src/core/stop-switcher.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ class StopSwitcher extends _Switcher {
q.trigger += '';
try { // this is for the cases of wrong ExprString structure
let expr = Expression.fromString(q.trigger);
expr._logger = logger;
if (expr.hasBooleanResult()) {
this.trigger = expr;
} else {
Expand Down
6 changes: 3 additions & 3 deletions src/dbsolve-export/expression.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const { Expression } = require('../core/expression');

Expression.prototype.toSLVString = function(powTransform = 'keep', substituteByDefinitions = true) {
Expression.prototype.toSLVString = function(logger, powTransform = 'keep', substituteByDefinitions = true) {
let tree = substituteByDefinitions ? this.substituteByDefinitions().exprParsed : this.exprParsed;

if (['keep', 'operator', 'function'].indexOf(powTransform) === -1) {
Expand Down Expand Up @@ -140,7 +140,7 @@ Expression.prototype.toSLVString = function(powTransform = 'keep', substituteByD
}
if (node.type === 'FunctionNode' && node.fn.name === 'piecewise') {
let msg = `DBS and SLV formats do not support "piecewise" function, got "${node.toString()}"`;
this._logger.error(msg);
logger && logger.error(msg);
let args = node.args
.map((arg) => arg.toString(options));
return `piecewise(${args.join(',')})`;
Expand Down Expand Up @@ -173,7 +173,7 @@ Expression.prototype.toSLVString = function(powTransform = 'keep', substituteByD
return `ifgt(0, 1, ${trueExpr}, ${falseExpr})`;
} else if (condition.type === 'OperatorNode') {
let msg = `SLV format does not support boolean operators, got "${node.toString()}"`;
this._logger.error(msg);
logger && logger.error(msg);
return `ifgt([error], [error], ${trueExpr}, ${falseExpr})`;
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/dbsolve-export/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class DBSolveExport extends AbstractExport{
super(q, isCore);

// check arguments here
let logger = this._container.logger;
let { logger } = this._container;
let valid = DBSolveExport.isValid(q, logger);
if (!valid) { this.errored = true; return; }

Expand All @@ -45,7 +45,7 @@ class DBSolveExport extends AbstractExport{
* @return {string} Text code of exported format.
*/
makeText() {
//let logger = this._container.logger;
//let { logger } = this._container;

let selectedNamespaces = this.selectedNamespaces();

Expand Down
3 changes: 2 additions & 1 deletion src/dbsolve-export/namespace.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ Namespace.prototype.getDBSolveImage = function(powTransform, groupConstBy, versi
target: record.id + (record.isDynamic ? '_' : ''),
multiply: 0,
add: record.id + '_' + switcher.id + '_',
expr: expr.toSLVString(powTransform)
expr: expr.toSLVString(logger, powTransform)
};
timeEvents.push(evt);
});
Expand Down Expand Up @@ -169,5 +169,6 @@ Namespace.prototype.getDBSolveImage = function(powTransform, groupConstBy, versi
discreteEvents,
continuousEvents,
groupedConst,
logger
};
};
4 changes: 2 additions & 2 deletions src/mrgsolve-export/expression.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const { Expression } = require('../core/expression');

Expression.prototype.toCString = function(_mathOptions = {}, substituteByDefinitions = true){
Expression.prototype.toCString = function(logger, _mathOptions = {}, substituteByDefinitions = true){
// set defaults
let mathOptions = Object.assign({
timeVariable: 'SOLVERTIME'
Expand Down Expand Up @@ -36,7 +36,7 @@ Expression.prototype.toCString = function(_mathOptions = {}, substituteByDefinit
// piecewise function
if (node.type === 'FunctionNode' && node.fn.name === 'piecewise') {
let msg = `mrgsolve format does not support "piecewise" function, got "${node.toString()}"`;
this._logger.error(msg);
logger && logger.error(msg);
let args = node.args
.map((arg) => arg.toString(options));
return `piecewise(${args.join(',')})`;
Expand Down
7 changes: 4 additions & 3 deletions src/mrgsolve-export/namespace.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ require('./expression');
const { intersection } = require('../utils');

Namespace.prototype.getMrgsolveImage = function() {
let { logger } = this.container;
// set dynamic variables
let dynamicRecords = this
.selectByInstanceOf('Record')
Expand All @@ -19,7 +20,6 @@ Namespace.prototype.getMrgsolveImage = function() {
let deps = record.dependOn('start_', true);
let diff = intersection(dynamicIds, deps);
if (diff.length > 0) {
let logger = this.container.logger;
let errorMsg = `Mrgsolve does not support when initial assignments depends on dynamic values: ${diff}\n`
+ `${record.index} .= ${record.assignments.start_.toString()}`;

Expand Down Expand Up @@ -123,6 +123,7 @@ Namespace.prototype.getMrgsolveImage = function() {
ruleRecords,
timeEvents,
continuousEvents,
output
output,
logger
};
};
};
22 changes: 11 additions & 11 deletions src/templates/dbsolve-model.slv.njk
Original file line number Diff line number Diff line change
Expand Up @@ -435,9 +435,9 @@ if(t == 0){
// initialization of Records
{%- for record in initRecords %}
{% if record.isRule -%}
{{ record.id }} = {{ record.getAssignment('ode_').toSLVString(powTransform) }};
{{ record.id }} = {{ record.getAssignment('ode_').toSLVString(logger, powTransform) }};
{%- else -%}
{{ record.id }} = {{ record.getAssignment('start_').toSLVString(powTransform) }};
{{ record.id }} = {{ record.getAssignment('start_').toSLVString(logger, powTransform) }};
{%- endif %}
{%- endfor %}
// calculate initial amounts
Expand All @@ -456,7 +456,7 @@ if(t == 0){
//!! {{ record.id }}
{%- endif %}
{% if record.isRule -%}
{{ record.id }} = {{ record.getAssignment('ode_').toSLVString(powTransform) }};
{{ record.id }} = {{ record.getAssignment('ode_').toSLVString(logger, powTransform) }};
{%- elif record.isDynamic -%}
{{ record.id }} = ({{ record.id }}_ + {{ record.id }}_start__){{ ' / '+ record.compartment if record.instanceOf('Species') and not record.isAmount}};
{%- endif -%}
Expand All @@ -478,20 +478,20 @@ F[{{ loop.index }}] = {{ diff(dynamic.backReferences) }};
{%- for evt in discreteEvents %}
if({{ evt.switcher.id }}_ > 0){
if({{ evt.switcher.id }}_down_ == 0){
if({{ evt.switcher.trigger.toSLVString(powTransform) if evt.switcher.trigger is defined }}){
if({{ evt.switcher.trigger.toSLVString(logger, powTransform) if evt.switcher.trigger is defined }}){
{%- for assign in evt.assignments %}
{%- if assign.targetObj.isDynamic %}
{{ assign.targetObj.id }}_start__ = {{ assign.expr.toSLVString(powTransform) -}}
{{ assign.targetObj.id }}_start__ = {{ assign.expr.toSLVString(logger, powTransform) -}}
- ({{ assign.targetObj.id }}){{ ' * '+ assign.targetObj.compartment if assign.targetObj.instanceOf('Species') and not assign.targetObj.isAmount -}}
+ {{ assign.targetObj.id }}_start__;
{%- else %}
{{ assign.targetObj.id }} = {{ assign.expr.toSLVString(powTransform) }};
{{ assign.targetObj.id }} = {{ assign.expr.toSLVString(logger, powTransform) }};
{%- endif %}
{%- endfor %}
{{ evt.switcher.id }}_down_ = 1;
}else{}
}else{
if({{ evt.switcher.trigger.toSLVString(powTransform) if evt.switcher.trigger is defined }}){}else{
if({{ evt.switcher.trigger.toSLVString(logger, powTransform) if evt.switcher.trigger is defined }}){}else{
{{ evt.switcher.id }}_down_ = 0;
}
}
Expand All @@ -501,20 +501,20 @@ if({{ evt.switcher.id }}_down_ == 0){
{%- for evt in continuousEvents %}
if({{ evt.switcher.id }}_ > 0){
if({{ evt.switcher.id }}_down_ == 0){
if({{ evt.switcher.trigger.toSLVString(powTransform) + '>=0' if evt.switcher.trigger is defined }}){
if({{ evt.switcher.trigger.toSLVString(logger, powTransform) + '>=0' if evt.switcher.trigger is defined }}){
{%- for assign in evt.assignments %}
{%- if assign.targetObj.isDynamic %}
{{ assign.targetObj.id }}_start__ = {{ assign.expr.toSLVString(powTransform) -}}
{{ assign.targetObj.id }}_start__ = {{ assign.expr.toSLVString(logger, powTransform) -}}
- ({{ assign.targetObj.id }}){{ ' * '+ assign.targetObj.compartment if assign.targetObj.instanceOf('Species') and not assign.targetObj.isAmount -}}
+ {{ assign.targetObj.id }}_start__;
{%- else %}
{{ assign.targetObj.id }} = {{ assign.expr.toSLVString(powTransform) }};
{{ assign.targetObj.id }} = {{ assign.expr.toSLVString(logger, powTransform) }};
{%- endif %}
{%- endfor %}
{{ evt.switcher.id }}_down_ = 1;
}else{}
}else{
if({{ evt.switcher.trigger.toSLVString(powTransform) + '>=0' if evt.switcher.trigger is defined }}){}else{
if({{ evt.switcher.trigger.toSLVString(logger, powTransform) + '>=0' if evt.switcher.trigger is defined }}){}else{
{{ evt.switcher.id }}_down_ = 0;
}
}
Expand Down
18 changes: 9 additions & 9 deletions src/templates/mrgsolve-model.cpp.njk
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ $GLOBAL

$PREAMBLE
{%- for record in initRecords %}
{{ "//" if record.isDynamic }}double {{ record.id }} = {{ record.assignments.start_.toCString() }};
{{ "//" if record.isDynamic }}double {{ record.id }} = {{ record.assignments.start_.toCString(logger) }};
{%- endfor %}
{%- for evt in continuousEvents %}
bool {{ evt.switcher.id }}_down_ = false;
Expand All @@ -53,7 +53,7 @@ self.mevent({{ evt.switcher.getStart() | default('0.0')}}, {{ loop.index0 + 10 }

$MAIN
{%- for variable in initRecords | filter2("isDynamic", true) %}
{{ variable.id }}{{ "_amt_" if (variable.className==="Species" and not variable.isAmount) }}_0 = ({{ variable.assignments.start_.toCString() }}){% if variable.className==="Species" and not variable.isAmount %} * {{ variable.compartment }}{% endif %};
{{ variable.id }}{{ "_amt_" if (variable.className==="Species" and not variable.isAmount) }}_0 = ({{ variable.assignments.start_.toCString(logger) }}){% if variable.className==="Species" and not variable.isAmount %} * {{ variable.compartment }}{% endif %};
{%- endfor %}

{% if continuousEvents|length + timeEvents|length > 0 -%}
Expand All @@ -65,12 +65,12 @@ if ({{ evt.switcher.id }}_ && EVID=={{ loop.index0 + 10 }}{{ ' && TIME>0.0' if n
{%- if assign.num >= 0 %} {# for synamic #}
{%- set evtId = 'evt_' + assign.target + '_' %}
mrg::evdata {{ evtId }}(TIME, 8);
{{ evtId }}.amt = {{ assign.expr.toCString({timeVariable: 'TIME'}) }};
{{ evtId }}.amt = {{ assign.expr.toCString(logger, {timeVariable: 'TIME'}) }};
{{ evtId }}.cmt = {{ assign.num + 1}};
{{ evtId }}.now = true;
self.mevector.push_back({{ evtId }});
{%- else %} {# for static #}
{{ assign.target }} = {{ assign.expr.toCString({timeVariable: 'TIME'}) }};
{{ assign.target }} = {{ assign.expr.toCString(logger, {timeVariable: 'TIME'}) }};
{%- endif %}
{%- endfor %}
{%- if evt.switcher.getPeriod() is defined %}
Expand All @@ -84,22 +84,22 @@ if ({{ evt.switcher.id }}_ && EVID=={{ loop.index0 + 10 }}{{ ' && TIME>0.0' if n
{%- endfor %}
{%- for evt in continuousEvents %}
// {{ evt.switcher.id }} @{{ evt.switcher.className }}
{%- set evtCondition = evt.switcher.trigger.toCString({timeVariable: 'TIME'}) + '>=0.0'
{%- set evtCondition = evt.switcher.trigger.toCString(logger, {timeVariable: 'TIME'}) + '>=0.0'
if evt.switcher.className == 'CSwitcher'
else evt.switcher.trigger.toCString({timeVariable: 'TIME'}) %}
else evt.switcher.trigger.toCString(logger, {timeVariable: 'TIME'}) %}
if ({{ evt.switcher.id }}_ && !{{ evt.switcher.id }}_down_ && ({{ evtCondition }}){{ ' && TIME>0.0' if not evt.switcher.atStart }}) {
{{ evt.switcher.id }}_down_ = true;

{%- for assign in evt.assignments %}
{%- if assign.num >= 0 %} {# for synamic #}
{%- set evtId = 'evt_' + assign.target + '_' %}
mrg::evdata {{ evtId }}(TIME, 8);
{{ evtId }}.amt = {{ assign.expr.toCString({timeVariable: 'TIME'}) }};
{{ evtId }}.amt = {{ assign.expr.toCString(logger, {timeVariable: 'TIME'}) }};
{{ evtId }}.cmt = {{ assign.num + 1}};
{{ evtId }}.now = true;
self.mevector.push_back({{ evtId }});
{%- else %} {# for static #}
{{ assign.target }} = {{ assign.expr.toCString({timeVariable: 'TIME'}) }};
{{ assign.target }} = {{ assign.expr.toCString(logger, {timeVariable: 'TIME'}) }};
{%- endif %}
{%- endfor %}
} else {
Expand All @@ -115,7 +115,7 @@ double {{ ts.id }} = {{ ts.slope }} * SOLVERTIME + {{ ts.intercept }};
{%- endfor %}
{%- for record in ruleRecords %}
// @{{ record.className }} '{{ record.title }}'
{{ "double " if not record.assignments.start_ }}{{ record.id }} = {{ record.assignments.ode_.toCString({timeVariable: 'SOLVERTIME'}) }};
{{ "double " if not record.assignments.start_ }}{{ record.id }} = {{ record.assignments.ode_.toCString(logger) }};
{%- endfor %}
{% for variable in dynamicRecords %}
dxdt_{{ variable.id }}{{ "_amt_" if variable.className==="Species" and not variable.isAmount }} =
Expand Down
2 changes: 1 addition & 1 deletion src/templates/slv-blocks-template.slv.njk
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ default_compartment_ = 1; // {units: UL} This is fake compartment to support com
//
//!! {{ rule.id }}
{%- endif %}
{{ rule.id }} = {{ rule.assignments.ode_.toSLVString(powTransform) }}; // @{{ rule.className }} {{ "'"+rule.title+"'" if rule.title }} {units: {{ rule.units|default('?') }}}
{{ rule.id }} = {{ rule.assignments.ode_.toSLVString(logger, powTransform) }}; // @{{ rule.className }} {{ "'"+rule.title+"'" if rule.title }} {units: {{ rule.units|default('?') }}}
{%- endfor %}
//! Differential equations, count: {{ variables|length}}
{%- for dynamic in variables %}
Expand Down
Loading

0 comments on commit 2abea22

Please sign in to comment.