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 sympy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/1cd5f860-bc35-43cd-b069-26732bb17c0dn%40googlegroups.com.

Reply via email to