Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
finesse
finesse3
Commits
6cbb44f4
Commit
6cbb44f4
authored
May 27, 2021
by
Daniel Brown
Committed by
Sean Leavey
Jun 04, 2021
Browse files
more symbol additions for sympy conversion
parent
1915b653
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/finesse/symbols.pyx
View file @
6cbb44f4
...
...
@@ -43,6 +43,7 @@ PYFUNCTION_MAP = {
"abs"
:
operator
.
abs
,
"neg"
:
operator
.
neg
,
"pos"
:
operator
.
pos
,
"pow"
:
operator
.
pow
,
"conj"
:
np
.
conj
,
"real"
:
np
.
real
,
"imag"
:
np
.
imag
,
...
...
@@ -69,6 +70,7 @@ FUNCTIONS = {
"abs"
:
lambda
x
:
Operation
(
"abs"
,
operator
.
abs
,
x
),
"neg"
:
lambda
x
:
Operation
(
"neg"
,
operator
.
neg
,
x
),
"pos"
:
lambda
x
:
Operation
(
"pos"
,
operator
.
pos
,
x
),
"pow"
:
lambda
x
:
Operation
(
"pow"
,
operator
.
pow
,
x
),
"conj"
:
lambda
x
:
Operation
(
"conj"
,
np
.
conj
,
x
),
"real"
:
lambda
x
:
Operation
(
"real"
,
np
.
real
,
x
),
"imag"
:
lambda
x
:
Operation
(
"imag"
,
np
.
imag
,
x
),
...
...
@@ -108,7 +110,15 @@ op_repr = {
def
finesse2sympy
(
expr
,
iter_num
=
0
):
""""""
"""
Notes
-----
It might be common for this this function to throw a NotImplementedError.
This function maps, by hand, various operator and numpy functions to sympy.
If you come across this error, you'll need to update the if-statement to
include the missing operations. Over time this should get fixed for most
use cases.
"""
import
sympy
from
finesse.parameter
import
ParameterRef
iter_num
+=
1
...
...
@@ -122,6 +132,10 @@ def finesse2sympy(expr, iter_num=0):
op
=
sympy
.
Mul
elif
expr
.
op
==
operator
.
add
:
op
=
sympy
.
Add
elif
expr
.
op
==
operator
.
truediv
:
op
=
lambda
a
,
b
:
sympy
.
Mul
(
a
,
sympy
.
Pow
(
b
,
-
1
))
elif
expr
.
op
==
operator
.
pow
:
op
=
sympy
.
Pow
elif
expr
.
op
==
operator
.
sub
:
op
=
lambda
x
,
y
:
sympy
.
Add
(
x
,
-
y
)
elif
expr
.
op
==
np
.
conj
:
...
...
@@ -132,13 +146,15 @@ def finesse2sympy(expr, iter_num=0):
op
=
sympy
.
exp
elif
expr
.
op
==
np
.
sqrt
:
op
=
sympy
.
sqrt
elif
expr
.
op
==
operator
.
abs
:
op
=
sympy
.
Abs
elif
expr
.
op
==
operator
.
neg
:
op
=
lambda
x
:
sympy
.
Mul
(
-
1
,
x
)
else
:
raise
Exception
(
f
"undefined Operation
{
expr
.
op
}
in
{
expr
}
"
)
raise
NotImplementedError
(
f
"undefined Operation
{
expr
.
op
}
in
{
expr
}
"
)
return
op
(
*
sympy_args
)
else
:
raise
Exception
(
f
'
{
expr
}
undefined'
)
raise
NotImplementedError
(
f
'
{
expr
}
undefined'
)
def
sympy2finesse
(
expr
,
symbol_dict
=
{},
iter_num
=
0
):
import
sympy
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment