Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
E
EMAM2Cpp
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
12
Issues
12
List
Boards
Labels
Service Desk
Milestones
Iterations
Merge Requests
1
Merge Requests
1
Requirements
Requirements
List
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Test Cases
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issue
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
monticore
EmbeddedMontiArc
generators
EMAM2Cpp
Commits
fc0c3c1e
Commit
fc0c3c1e
authored
Jan 17, 2021
by
Malte Heithoff
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Basic Library
parent
91b6b4e6
Pipeline
#392533
failed with stage
in 1 minute and 23 seconds
Changes
30
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
23 additions
and
497 deletions
+23
-497
src/main/java/de/monticore/lang/monticar/generator/cpp/GeneratorCPP.java
...e/monticore/lang/monticar/generator/cpp/GeneratorCPP.java
+9
-6
src/main/java/de/monticore/lang/monticar/generator/cpp/GeneratorCppCli.java
...onticore/lang/monticar/generator/cpp/GeneratorCppCli.java
+9
-1
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Add.emam
...icore/lang/monticar/semantics/library/arithmetic/Add.emam
+0
-12
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Constant.emam
.../lang/monticar/semantics/library/arithmetic/Constant.emam
+0
-11
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Division.emam
.../lang/monticar/semantics/library/arithmetic/Division.emam
+0
-13
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Gain.emam
...core/lang/monticar/semantics/library/arithmetic/Gain.emam
+0
-12
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Max.emam
...icore/lang/monticar/semantics/library/arithmetic/Max.emam
+0
-16
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Min.emam
...icore/lang/monticar/semantics/library/arithmetic/Min.emam
+0
-16
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Mod.emam
...icore/lang/monticar/semantics/library/arithmetic/Mod.emam
+0
-13
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Multiplication.emam
...monticar/semantics/library/arithmetic/Multiplication.emam
+0
-12
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Saturation.emam
...ang/monticar/semantics/library/arithmetic/Saturation.emam
+0
-14
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Subtract.emam
.../lang/monticar/semantics/library/arithmetic/Subtract.emam
+0
-13
src/main/resources/de/monticore/lang/monticar/semantics/library/basicLibrary/Delay.emam
...e/lang/monticar/semantics/library/basicLibrary/Delay.emam
+0
-14
src/main/resources/de/monticore/lang/monticar/semantics/library/basicLibrary/LookUp.emam
.../lang/monticar/semantics/library/basicLibrary/LookUp.emam
+0
-11
src/main/resources/de/monticore/lang/monticar/semantics/library/differential/Derivative.emam
...g/monticar/semantics/library/differential/Derivative.emam
+0
-13
src/main/resources/de/monticore/lang/monticar/semantics/library/differential/Integrator.emam
...g/monticar/semantics/library/differential/Integrator.emam
+0
-13
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/And.emam
.../monticore/lang/monticar/semantics/library/logic/And.emam
+0
-12
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Equals.emam
...nticore/lang/monticar/semantics/library/logic/Equals.emam
+0
-13
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Greater.emam
...ticore/lang/monticar/semantics/library/logic/Greater.emam
+0
-13
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/GreaterEquals.emam
.../lang/monticar/semantics/library/logic/GreaterEquals.emam
+0
-13
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Less.emam
...monticore/lang/monticar/semantics/library/logic/Less.emam
+0
-13
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/LessEquals.emam
...ore/lang/monticar/semantics/library/logic/LessEquals.emam
+0
-13
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Not.emam
.../monticore/lang/monticar/semantics/library/logic/Not.emam
+0
-16
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Or.emam
...e/monticore/lang/monticar/semantics/library/logic/Or.emam
+0
-16
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Switch.emam
...nticore/lang/monticar/semantics/library/logic/Switch.emam
+0
-19
src/main/resources/de/monticore/lang/monticar/semantics/scripts/python/sympy/solve.py
...ore/lang/monticar/semantics/scripts/python/sympy/solve.py
+0
-23
src/main/resources/de/monticore/lang/monticar/semantics/scripts/python/sympy/solveDae.py
.../lang/monticar/semantics/scripts/python/sympy/solveDae.py
+0
-105
src/main/resources/de/monticore/lang/monticar/semantics/scripts/python/sympy/solveLinear.py
...ng/monticar/semantics/scripts/python/sympy/solveLinear.py
+0
-24
src/main/resources/de/monticore/lang/monticar/semantics/scripts/python/sympy/solveNonLinear.py
...monticar/semantics/scripts/python/sympy/solveNonLinear.py
+0
-24
src/test/java/de/monticore/lang/monticar/generator/semantics/LoopTest.java
...monticore/lang/monticar/generator/semantics/LoopTest.java
+5
-3
No files found.
src/main/java/de/monticore/lang/monticar/generator/cpp/GeneratorCPP.java
View file @
fc0c3c1e
...
...
@@ -235,6 +235,8 @@ public class GeneratorCPP implements EMAMGenerator {
// setGenerateMainClass(true);
}
addSemantics
(
taggingResolver
,
componentInstanceSymbol
);
String
lastNameWithoutArrayPart
=
""
;
if
(!
streamTestGenerationMode
)
{
for
(
EMAComponentInstanceSymbol
instanceSymbol
:
componentInstanceSymbol
.
getSubComponents
())
{
...
...
@@ -327,16 +329,10 @@ public class GeneratorCPP implements EMAMGenerator {
EMAComponentInstanceSymbol
.
KIND
).
isPresent
())
{
EMAComponentInstanceSymbol
componentInstanceSymbol
=
(
EMAComponentInstanceSymbol
)
taggingResolver
.
resolve
(
componentFullName
,
EMAComponentInstanceSymbol
.
KIND
).
get
();
ExecutionSemantics
semantics
=
new
ExecutionSemantics
(
taggingResolver
,
componentInstanceSymbol
);
semantics
.
addExecutionSemantics
();
fileContents
.
addAll
(
generateStrings
(
taggingResolver
,
componentInstanceSymbol
));
}
}
}
else
{
ExecutionSemantics
semantics
=
new
ExecutionSemantics
(
taggingResolver
,
rootModel
);
semantics
.
addExecutionSemantics
();
searchForCVEverywhere
(
componentSymbol
,
taggingResolver
);
fileContents
=
generateStrings
(
taggingResolver
,
componentSymbol
);
}
...
...
@@ -365,6 +361,13 @@ public class GeneratorCPP implements EMAMGenerator {
return
files
;
}
public
void
addSemantics
(
TaggingResolver
taggingResolver
,
EMAComponentInstanceSymbol
component
)
{
if
(
component
.
getOrderOutput
().
isEmpty
())
{
ExecutionSemantics
semantics
=
new
ExecutionSemantics
(
taggingResolver
,
component
);
semantics
.
addExecutionSemantics
();
}
}
protected
List
<
File
>
generateCMakeFiles
(
EMAComponentInstanceSymbol
componentInstanceSymbol
)
{
List
<
File
>
files
=
new
ArrayList
<>();
if
(
componentInstanceSymbol
!=
null
)
{
...
...
src/main/java/de/monticore/lang/monticar/generator/cpp/GeneratorCppCli.java
View file @
fc0c3c1e
...
...
@@ -5,6 +5,8 @@ package de.monticore.lang.monticar.generator.cpp;
import
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.instanceStructure.EMAComponentInstanceSymbol
;
import
de.monticore.lang.monticar.generator.cpp.resolver.Resolver
;
import
de.monticore.lang.monticar.generator.order.simulator.AbstractSymtab
;
import
de.monticore.lang.monticar.semantics.Constants
;
import
de.monticore.lang.monticar.semantics.util.BasicLibrary
;
import
de.monticore.lang.tagging._symboltable.TaggingResolver
;
import
de.se_rwth.commons.logging.Log
;
import
org.apache.commons.cli.CommandLine
;
...
...
@@ -303,7 +305,7 @@ public final class GeneratorCppCli {
Path
modelsDirPath
=
Paths
.
get
(
cliArgs
.
getOptionValue
(
OPTION_MODELS_PATH
.
getOpt
()));
String
rootModelName
=
cliArgs
.
getOptionValue
(
OPTION_ROOT_MODEL
.
getOpt
());
String
outputPath
=
cliArgs
.
getOptionValue
(
OPTION_OUTPUT_PATH
.
getOpt
());
TaggingResolver
symTab
=
AbstractSymtab
.
createSymTabAndTaggingResolver
(
modelsDirPath
.
toString
()
);
TaggingResolver
symTab
=
getSymTabAndTaggingResolver
(
modelsDirPath
);
Resolver
resolver
=
new
Resolver
(
symTab
);
EMAComponentInstanceSymbol
componentSymbol
=
resolveSymbol
(
resolver
,
rootModelName
);
...
...
@@ -391,6 +393,12 @@ public final class GeneratorCppCli {
}
private
static
TaggingResolver
getSymTabAndTaggingResolver
(
Path
modelsDirPath
)
{
BasicLibrary
.
extract
();
return
AbstractSymtab
.
createSymTabAndTaggingResolver
(
modelsDirPath
.
toString
(),
Constants
.
SYNTHESIZED_COMPONENTS_ROOT
,
BasicLibrary
.
BASIC_LIBRARY_ROOT
);
}
private
static
EMAComponentInstanceSymbol
resolveSymbol
(
Resolver
resolver
,
String
rootModelName
)
{
EMAComponentInstanceSymbol
componentSymbol
=
resolver
.
getExpandedComponentInstanceSymbol
(
rootModelName
).
orElse
(
null
);
if
(
componentSymbol
==
null
)
{
...
...
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Add.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
arithmetic
;
component
Add
<
T
,
N1
n
=
2
>
{
port
in
T
summand
[
n
],
out
T
sum1
;
implementation
Math
{
sum1
=
sum
(
summand
);
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Constant.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
arithmetic
;
component
Constant
<
T
>(
T
cvalue
)
{
port
out
T
value
;
implementation
Math
{
value
=
cvalue
;
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Division.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
arithmetic
;
component
Division
<
T
>
{
port
in
T
dividend
,
in
T
divisor
,
out
T
division
;
implementation
Math
{
division
*
divisor
==
dividend
;
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Gain.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
arithmetic
;
component
Gain
<
T
>(
T
gainValue
)
{
port
in
T
input
,
out
T
output
;
implementation
Math
{
output
=
input
*
gainValue
;
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Max.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
arithmetic
;
component
Max
<
T
,
N1
n
=
2
>
{
port
in
T
in1
[
n
],
out
T
maximum
;
implementation
Math
{
T
maxVal
=
in1
(
1
);
for
i
=
1
:
n
maxVal
=
max
(
maxVal
,
in1
(
i
));
end
maximum
=
maxVal
;
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Min.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
arithmetic
;
component
Min
<
T
,
N1
n
=
2
>
{
port
in
T
input
[
n
],
out
T
minimum
;
implementation
Math
{
T
minVal
=
input
(
1
);
for
i
=
1
:
n
minVal
=
min
(
minVal
,
input
(
i
));
end
minimum
=
minVal
;
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Mod.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
arithmetic
;
component
Mod
<
T
>
{
port
in
T
input1
,
in
T
input2
,
out
T
output
;
implementation
Math
{
output
==
modulo
(
input1
,
input2
);
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Multiplication.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
arithmetic
;
component
Multiplication
<
T
,
N1
n
=
2
>
{
port
in
T
factor
[
n
],
out
T
product1
;
implementation
Math
{
product1
==
product
(
factor
);
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Saturation.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
arithmetic
;
/*
The
Saturation
block
imposes
upper
and
lower
bounds
on
a
signal
.
When
the
input
signal
is
within
the
range
specified
by
the
Lower
limit
and
Upper
limit
parameters
,
the
input
signal
passes
through
unchanged
.
When
the
input
signal
is
outside
these
bounds
,
the
signal
is
clipped
to
the
upper
or
lower
bound
.
*/
component
Saturation
<
T
>
(
T
minValue
,
T
maxValue
){
port
in
T
input
,
out
T
output
;
implementation
Math
{
output
=
min
(
max
(
input
,
minValue
),
maxValue
);
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/arithmetic/Subtract.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
arithmetic
;
component
Subtract
<
T
>
{
ports
in
T
minuend
,
in
T
subtrahend
,
out
T
difference
;
implementation
Math
{
difference
=
minuend
-
subtrahend
;
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/basicLibrary/Delay.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
basicLibrary
;
non
-
df
component
Delay
<
T
>(
T
dvalue
=
0
)
{
port
in
T
input
,
out
T
output
;
implementation
Math
{
static
delayed
=
dvalue
;
output
=
dvalue
;
dvalue
=
input
;
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/basicLibrary/LookUp.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
basicLibrary
;
component
LookUp
<
T
,
N1
n
=
1
>
(
Q
^{
1
,
n
}
lookuptable
)
{
ports
in
T
input
,
out
T
output
;
implementation
Math
{
output
=
lookuptable
(
input
);
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/differential/Derivative.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
differential
;
component
Derivation
<
T
>(
T
dvalue
=
0
)
{
port
in
T
input
,
out
T
output
;
implementation
Math
{
input
(
t
=
0
)
=
dvalue
;
diff
(
input
)
==
output
;
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/differential/Integrator.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
differential
;
component
Integrator
<
T
>(
T
dvalue
=
0
)
{
port
in
T
input
,
out
T
output
;
implementation
Math
{
output
(
t
=
0
)
=
dvalue
;
diff
(
output
)
==
input
;
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/And.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
logic
;
component
And
<
N1
n
=
2
>
{
port
in
B
input
[
n
],
out
B
output
;
implementation
Math
{
output
=
and
(
input
);
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Equals.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
logic
;
component
Equals
<
T
>
{
port
in
T
input1
,
in
T
input2
,
out
B
output
;
implementation
Math
{
output
=
equal
(
input1
,
input2
);
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Greater.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
logic
;
component
Greater
<
T
>
{
port
in
T
input1
,
in
T
input2
,
out
B
output
;
implementation
Math
{
output
=
input1
>
input2
;
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/GreaterEquals.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
logic
;
component
GreaterEquals
<
T
>
{
port
in
T
input1
,
in
T
input2
,
out
B
output
;
implementation
Math
{
output
=
input1
>=
input2
;
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Less.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
logic
;
component
Less
<
T
>
{
port
in
T
input1
,
in
T
input2
,
out
B
output
;
implementation
Math
{
output
=
input1
<
input2
;
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/LessEquals.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
logic
;
component
LessEquals
<
T
>
{
port
in
T
input1
,
in
T
input2
,
out
B
output
;
implementation
Math
{
output
=
input1
<=
input2
;
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Not.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
logic
;
component
Not
<
T
>
{
port
in
T
input
,
out
T
output
;
implementation
Math
{
if
input
==
0
output
=
1
;
else
output
=
0
;
end
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Or.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
de
.
monticore
.
lang
.
monticar
.
semantics
.
library
.
logic
;
component
Or
<
T
,
N1
n
=
2
>
{
port
in
B
input
[
n
],
out
B
output
;
implementation
Math
{
T
outVal
=
input
(
1
);
for
i
=
1
:
n
outVal
=
or
(
outVal
,
input
(
i
));
end
output
=
outVal
;
}
}
src/main/resources/de/monticore/lang/monticar/semantics/library/logic/Switch.emam
deleted
100644 → 0
View file @
91b6b4e6
/*
(
c
)
https
://
github
.
com
/
MontiCore
/
monticore
*/
package
basicLibrary
;
component
Switch
<
T
=
B
>
{
//
if
no
generic
is
given
,
then
default
type
B
is
taken
port
in
T
input1
,
//
if
in
B
cond
,
//
condition
in
T
input2
,
//
else
out
T
output
;
implementation
Math
{
if
cond
output
=
input1
;
else
output
=
input2
;
end
}
}
src/main/resources/de/monticore/lang/monticar/semantics/scripts/python/sympy/solve.py
deleted
100644 → 0
View file @
91b6b4e6
import
argparse
from
sympy
import
symbols
,
sympify
,
solve
def
main
(
equations
,
symbolNames
):
symbols_
=
{}
for
symbolName
in
symbolNames
:
symbols_
[
symbolName
]
=
symbols
(
symbolName
)
equs
=
sympify
(
equations
,
locals
(),
evaluate
=
False
)
solutions
=
solve
(
equs
,
symbols_
)
i
=
0
for
sol
in
solutions
.
keys
():
print
(
sol
,
"="
,
solutions
[
sol
])
parser
=
argparse
.
ArgumentParser
(
description
=
'Solve DAE symbolic if possible'
)
parser
.
add_argument
(
'system'
,
metavar
=
'eq'
,
type
=
str
,
nargs
=
'+'
)
parser
.
add_argument
(
'--symbols'
,
metavar
=
'y'
,
type
=
str
,
nargs
=
'+'
)
args
=
parser
.
parse_args
()
main
(
args
.
system
,
args
.
symbols
)
\ No newline at end of file
src/main/resources/de/monticore/lang/monticar/semantics/scripts/python/sympy/solveDae.py
deleted
100644 → 0
View file @
91b6b4e6
import
argparse
import
re
from
sympy
import
symbols
,
Function
,
dsolve
,
sympify
,
Derivative
,
solve
def
reduceSystem
(
equs
,
ics
):
differentialEquations
=
[]
algebraicEquations
=
[]
differentialFunctions
=
[]
algebraicFunctions
=
[]
for
eq
in
equs
:
ds
=
eq
.
atoms
(
Derivative
)
if
len
(
ds
)
==
0
:
algebraicEquations
.
append
(
eq
)
else
:
differentialEquations
.
append
(
eq
)
for
d
in
ds
:
fs
=
d
.
atoms
(
Function
)
differentialFunctions
.
extend
(
fs
)
if
len
(
algebraicEquations
)
==
0
:
return
differentialEquations
for
eq
in
equs
:
fs
=
eq
.
atoms
(
Function
)
for
f
in
fs
:
if
not
f
in
differentialFunctions
and
f
not
in
algebraicFunctions
:
algebraicFunctions
.
append
(
f
)
if
len
(
algebraicFunctions
)
==
0
:
return
differentialEquations
sol
=
solve
(
algebraicEquations
,
algebraicFunctions
)
# check if solution is present
newEqus
=
[]
for
eq
in
differentialEquations
:
for
f
,
s
in
sol
.
items
():
eq
=
eq
.
subs
(
f
,
s
)
newEqus
.
append
(
eq
)
newIcs
=
{}
for
f
in
ics
.
keys
():
for
d
in
differentialFunctions
:
if
f
.
func
==
d
.
func
:
newIcs
[
f
]
=
ics
[
f
]
return
newEqus
,
newIcs
,
algebraicEquations
,
algebraicFunctions
,
differentialFunctions
def
main
(
equations
,
symbolNames
,
functionNames
,
startValues
):
symbols_
=
{}
for
symbolName
in
symbolNames
:
symbols_
[
symbolName
]
=
symbols
(
symbolName
)
functions_
=
{}
for
functionName
in
functionNames
:
functions_
[
functionName
]
=
Function
(
functionName
)
ics
=
{}
for
functionName
in
startValues
.
keys
():
function
=
functions_
[
functionName
]
ics
[
function
(
0
)]
=
startValues
[
functionName
]
equs
=
sympify
(
equations
,
locals
(),
evaluate
=
False
)
equs
,
ics
,
algebraicEquations
,
algebraicFunctions
,
differentialFunctions
=
reduceSystem
(
equs
,
ics
)
solutions
=
dsolve
(
equs
,
ics
=
ics
)
equationsToSolve
=
[]
functionsToSolve
=
[]
equationsToSolve
.
extend
(
algebraicEquations
)
equationsToSolve
.
extend
(
solutions
)
functionsToSolve
.
extend
(
algebraicFunctions
)
functionsToSolve
.
extend
(
differentialFunctions
)
sol
=
solve
(
equationsToSolve
,
functionsToSolve
)
for
solution
in
solutions
:
print
(
str
(
solution
.
args
[
0
]).
replace
(
'('
+
time
+
')'
,
''
),
"="
,
solution
.
args
[
1
])
for
f
in
algebraicFunctions
:
print
(
str
(
f
).
replace
(
'('
+
time
+
')'
,
''
),
"="
,
str
(
sol
[
f
]).
replace
(
'('
+
time
+
')'
,
''
))
parser
=
argparse
.
ArgumentParser
(
description
=
'Solve DAE symbolic if possible'
)
parser
.
add_argument
(
'system'
,
metavar
=
'eq'
,
type
=
str
,
nargs
=
'+'
)
parser
.
add_argument
(
'--functions'
,
metavar
=
'f'
,
type
=
str
,
nargs
=
'+'
)
parser
.
add_argument
(
'--y0'
,
metavar
=
'y0'
,
type
=
float
,
nargs
=
'+'
)
args
=
parser
.
parse_args
()
if
(
len
(
args
.
y0
)
>
len
(
args
.
functions
)):
raise
Exception
(
'Arguments for y0 cannot be larger than arguments for functions'
)
ics
=
{}
for
i
in
range
(
len
(
args
.
y0
)):
ics
[
args
.
functions
[
i
]]
=
args
.
y0
[
i
]
time
=
'current_Time'
system
=
[]
for
eq
in
args
.
system
:
newEq
=
eq
for
f
in
args
.
functions
:
pat
=
re
.
compile
(
r
'\b'
+
f
+
r
'\b'
)
newEq
=
pat
.
sub
(
f
+
'('
+
time
+
')'
,
newEq
)
system
.
append
(
newEq
)
main
(
system
,
[
time
],
args
.
functions
,
ics
)
\ No newline at end of file
src/main/resources/de/monticore/lang/monticar/semantics/scripts/python/sympy/solveLinear.py
deleted
100644 → 0
View file @
91b6b4e6