When SymPy returns an expression and needs to include a parameter, this
presents some api challenges because in order for the use to use it in a
`subs` call the user must know what the variable is. So sometimes we give
the user the option to select the parameter or use a default symbol in the
expression which they may or may not need to access to.
In issue #25720 I suggest the following possibility: use Subs to contain
the expression and create a method that allows the values to be specified
in an unambiguous way:
>>> n = Dummy('n'); s = Subs(pi/2 + n*pi, n, n); s
Subs(_n*pi + pi/2, _n, _n)
Define a Subs method:
def period(self, **k):
e, x, V = list(self.args)
reps = {xi: k[xi.name] for xi in x if xi.name in k}
ek = e.xreplace(reps)
for xi in reps:
i = x.index(xi)
x.pop(i)
V.pop(i)
if not V:
return ek
return self.func(ek, x, V)
>>> period(s, n=1)
3*pi/2
The `period` (or whatever name makes sense) is not using `subs` so it would
never do more than affect the immediate subs since the Dummy is being
selected from `x` and used in the `xreplace`. So if there were another Subs
inside, it would not have a matching Dummy (as long as a new Dummy were
used when needed).
Perhaps a Param class deriving from Subs could be used so the printing
could omit the showing of the subtitution values. The `doit` method should
also probably be removed or else the ability to easily access the
parameters would be lost.
Wondering if others see benefit, issues or other solutions.
/c
--
You received this message because you are subscribed to the Google Groups
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/sympy/1cd5f860-bc35-43cd-b069-26732bb17c0dn%40googlegroups.com.