Skip to content

Commit

Permalink
check empty exports
Browse files Browse the repository at this point in the history
  • Loading branch information
Evgeny Metelkin committed Nov 13, 2023
1 parent 59d3e3a commit 3296295
Show file tree
Hide file tree
Showing 13 changed files with 57 additions and 40 deletions.
1 change: 0 additions & 1 deletion TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@

## features

- check empty exports
- default `filepath` for Export
- checking legal functions inside Expressions and functionDefinition
- `#defineFunction`: circular dependences within functions, internal functions, different exports, functionDef vs units
Expand Down
26 changes: 23 additions & 3 deletions src/core/abstract-export.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,30 @@ class AbstractExport extends Top {
type: 'text' // currently support only text
}]
*/
makeText(){
makeText() {
throw new TypeError(`No method makeText() for "${this.className}"`);
}
make(){ // Buffer
get requireConcrete() {
return false;
}
selectedNamespaces() {
let logger = this._container.logger;
// filter namespaces if set
let namespaces0 = [...this._container.namespaceStorage]
.filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName));

let namespaces1 = this.requireConcrete
? namespaces0.filter(([spaceName, ns]) => !ns.isAbstract)
: namespaces0;

if (namespaces1.length === 0) {
let msg = `Nothing was exported because there is no concrete namespaces matching spaceFilter in "${this.format}".`;
logger.warn(msg, {});
}

return namespaces1;
}
make() { // Buffer
let text = this.makeText();
let buffer = text.map((x) => {
return {
Expand All @@ -67,7 +87,7 @@ class AbstractExport extends Top {

return buffer;
}
static get validate(){
static get validate() {
return ajv.compile(schema);
}
}
Expand Down
12 changes: 6 additions & 6 deletions src/dbsolve-export/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ class DBSolveExport extends AbstractExport{

if (q.defaultTask) this.defaultTask = q.defaultTask;
}
get requireConcrete() {
return true;
}
/**
* The method creates text code to save as SLV file.
*
Expand All @@ -47,13 +50,10 @@ class DBSolveExport extends AbstractExport{
logger.warn(`"FunctionDef" object: ${functionsNames.join(', ')} are presented in platform but not supported by DBSolve export.`);
}

// filter namespaces if set
let selectedNamespaces = [...this._container.namespaceStorage]
.filter(([spaceName, space]) => new RegExp(this.spaceFilter).test(spaceName))
.filter(([spaceName, space]) => !space.isAbstract);
let selectedNamespaces = this.selectedNamespaces();

let results = selectedNamespaces.map(([spaceName, namespace]) => {
let image = this.getSLVImage(namespace);
let results = selectedNamespaces.map(([spaceName, ns]) => {
let image = this.getSLVImage(ns);
let content = this.getSLVCode(image);

return {
Expand Down
4 changes: 1 addition & 3 deletions src/dot-export/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,7 @@ class DotExport extends AbstractExport{
makeText(){
let logger = this._container.logger;

// filter namespaces if set
let selectedNamespaces = [...this._container.namespaceStorage]
.filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName));
let selectedNamespaces = this.selectedNamespaces();

let results = selectedNamespaces.map(([spaceName, ns]) => {
let image = this.getDotImage(ns);
Expand Down
1 change: 1 addition & 0 deletions src/heta-code-export/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class HetaCodeExport extends AbstractExport{
makeText(){
// let logger = this._container.logger;

// XXX: do not filter namespaces
let image = this.getHetaCodeImage(this._container);
let content = this.getHetaCodeCode(image);

Expand Down
6 changes: 2 additions & 4 deletions src/json-export/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,10 @@ class JSONExport extends AbstractExport {
}
makeText(){
// filtered namespaces
let nsArrayFiltered = [...this._container.namespaceStorage]
.filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName))
.map(([spaceName, ns]) => ns);
let nsArrayFiltered = this.selectedNamespaces();

// create qArr from NS
let qArr_ns = nsArrayFiltered.reduce((accumulator, ns) => {
let qArr_ns = nsArrayFiltered.reduce((accumulator, [spaceName, ns]) => {
let qArr_setns = ns.spaceName === 'nameless' ? [] : [ns.toQ()]; // skip default NS
let qArr_components = ns.toQArr(true, { noUnitsExpr: this.noUnitsExpr });
return accumulator.concat(qArr_setns, qArr_components);
Expand Down
7 changes: 4 additions & 3 deletions src/julia-export/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,15 @@ class JuliaExport extends AbstractExport {
static get validate(){
return ajv.compile(schema);
}
get requireConcrete() {
return true;
}
// skipVersionCode means that the version will not be printed in output
// this is required for autotests
makeText(skipVersionCode = false){
//let logger = this._container.logger;
// create image for multiple namespaces
let nsImages = [...this._container.namespaceStorage]
.filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName))
.filter(([spaceName, ns]) => !ns.isAbstract)
let nsImages = this.selectedNamespaces()
.map(([spaceName, ns]) => this.getJuliaImage(ns));

// create Content
Expand Down
7 changes: 4 additions & 3 deletions src/matlab-export/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,17 @@ class MatlabExport extends AbstractExport {
static get validate(){
return ajv.compile(schema);
}
get requireConcrete() {
return true;
}
// TODO: skipVersionCode does not work
// skipVersionCode means that the version will not be printed in output
// this is required for autotests
makeText(skipVersionCode = false){
let logger = this._container.logger;

// filter namespaces if set
let selectedNamespaces = [...this._container.namespaceStorage]
.filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName))
.filter(([spaceName, ns]) => !ns.isAbstract);
let selectedNamespaces = this.selectedNamespaces();

let results = [];

Expand Down
7 changes: 4 additions & 3 deletions src/mrgsolve-export/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,14 @@ class MrgsolveExport extends AbstractExport {
static get validate(){
return ajv.compile(schema);
}
get requireConcrete() {
return true;
}
makeText(){
let logger = this._container.logger;

// filter namespaces if set
let selectedNamespaces = [...this._container.namespaceStorage]
.filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName))
.filter(([spaceName, ns]) => !ns.isAbstract);
let selectedNamespaces = this.selectedNamespaces();

// display that function definition is not supported
let functionsNames = [...this._container.functionDefStorage.keys()];
Expand Down
3 changes: 1 addition & 2 deletions src/sbml-export/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,7 @@ class SBMLExport extends AbstractExport {
let logger = this._container.logger;

// filter namespaces if set
let selectedNamespaces = [...this._container.namespaceStorage]
.filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName));
let selectedNamespaces = this.selectedNamespaces();

let results = selectedNamespaces.map(([spaceName, ns]) => {
let image = this.getSBMLImage(ns);
Expand Down
10 changes: 5 additions & 5 deletions src/simbio-export/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,14 @@ class SimbioExport extends AbstractExport{
get format(){
return 'Simbio';
}
get requireConcrete() {
return true;
}
makeText(){
let logger = this._container.logger;

// filter namespaces if set
let selectedNamespaces = [...this._container.namespaceStorage]
.filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName))
.filter(([spaceName, ns]) => !ns.isAbstract);

let selectedNamespaces = this.selectedNamespaces();

let results = selectedNamespaces.map(([spaceName, ns]) => {
// checking unitTerm for Species
ns.selectByInstanceOf('Species')
Expand Down
7 changes: 4 additions & 3 deletions src/slv-export/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ class SLVExport extends AbstractExport{
get format(){
return 'SLV';
}
get requireConcrete() {
return true;
}
/**
* The method creates text code to save as SLV file.
*
Expand All @@ -53,9 +56,7 @@ class SLVExport extends AbstractExport{
}

// filter namespaces if set
let selectedNamespaces = [...this._container.namespaceStorage]
.filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName))
.filter(([spaceName, ns]) => !ns.isAbstract);
let selectedNamespaces = this.selectedNamespaces();

let results = selectedNamespaces.map(([spaceName, ns]) => {
let image = this.getSLVImage(ns);
Expand Down
6 changes: 2 additions & 4 deletions src/yaml-export/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,10 @@ class YAMLExport extends AbstractExport {
}
makeText(){
// filtered namespaces
let nsArrayFiltered = [...this._container.namespaceStorage]
.filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName))
.map(([spaceName, ns]) => ns);
let nsArrayFiltered = this.selectedNamespaces();

// create qArr from NS
let qArr_ns = nsArrayFiltered.reduce((accumulator, ns) => {
let qArr_ns = nsArrayFiltered.reduce((accumulator, [spaceName, ns]) => {
let qArr_setns = ns.spaceName === 'nameless' ? [] : [ns.toQ()]; // skip default NS
let qArr_components = ns.toQArr(true, { noUnitsExpr: this.noUnitsExpr });
return accumulator.concat(qArr_setns, qArr_components);
Expand Down

0 comments on commit 3296295

Please sign in to comment.