Re: [sympy] defining a derivative

```Dear Aaron,

first of all thank you for answering.```
```
before i start subclassing, let me ask if i can do something easier: can i
use "subs"?

right now i am failing, but there might be some obvious error in what i
do...

in any case i also tried (and failed) with your suggestion, surely due to
my lack of understanding of the sympy internals.
here goes my code

regards
Riccardo

from sympy import *

u = symbols('u')
der = symbols('der')
e = Function('e')(u)
s = Function('s')(e)

print(s)

Derivative(e,u)

print(diff(e,u))
print(diff(s,e))
print(diff(s,u)) #here i would like "der" to be replaced within the chain
rule

#list of replacements i would like to happen
aaa = { Derivative(e,u):symbols('DeDu'), Derivative(s,e):symbols('DsDe') }

print(diff(s,u).subs(aaa)) #here Derivative(s,e) is not substituted, i
would like to get "se*eu" as a result

#the reason for the failure to substitute is here ... how can i do this
correctly?
for iter in diff(s,u).atoms(Derivative):
print("iter = ",iter)
print(iter == Derivative(s,e))
if iter in aaa:
print ("found")
else:

#####################################################
### TRYING THE SUGGESTION
#####################################################
class FunctionWithDerivative(Function):
def __init__(self, x, D):
super(FunctionWithDerivative, self).__init__()
self.x = x #this would be the var the function depends on f(x)
self.D = D #this would be the output i wish for
Derivative(FunctionWithDerivative(x,D),x)

def fdiff(self, argindex=1):
"""
Return the first derivative of this function.
"""
print("**************",self.args) -------- NOT BEING CALLED!!!!!

if len(self.args) == 1:
if(self.args[0] == self.x):
return self.D
else:
return 0
else:
raise ArgumentIndexError(self, argindex)

u = symbols('u')
e = Function('e')(u)
s = FunctionWithDerivative(symbols('e'), symbols('DsDe') )

print(s)

Derivative(e,u)

print(diff(e,u))
print(diff(s,e))
print(diff(s,u)) #here i would like "der" to be replaced within the chain
rule

On Friday, October 14, 2016 at 5:27:21 PM UTC+2, Aaron Meurer wrote:
>
> If you want to define advanced things you need to subclass from
> Function rather than using symbols(cls=Function). For derivatives, you
> should define fdiff, which should return the derivative of the
> function without consideration of the chain rule. For example, search
> for "fdiff" in this file to see some examples for exp, log, and
> LambertW
> https://github.com/sympy/sympy/blob/master/sympy/functions/elementary/exponential.py.
>
>
>
> Aaron Meurer
>
> On Fri, Oct 14, 2016 at 4:53 AM, Riccardo Rossi <roug...@gmail.com
> <javascript:>> wrote:
> > Dear List,
> >
> > i am writing since i would like to define the output of the derivative
> of a
> > function, and i don't have a clue of how to achieve it
> >
> > to explain what i wish to do, let's consider the following script
> >
> > from sympy import *
> >
> > u = symbols('u')
> > der = symbols('der')
> > e = symbols('e', cls=Function)(u)
> > s = symbols('s', cls=Function)(e)
> > Derivative(e,u) = der #essentially i would like to teach to sympy to use
> a
> > symbol for the Derivative
> > ---> but here i get "SyntaxError: can't assign to function call"
> >
> > print(diff(e,u))
> > print(diff(s,e))
> > print(diff(s,u)) #here i would like "der" to be replaced within the
> chain
> > rule
> >
> > any suggestion would be very welcome...
> >
> > regards
> > Riccardo
> >
> >
> > --
> > 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+un...@googlegroups.com <javascript:>.
> > To post to this group, send email to sy...@googlegroups.com
> <javascript:>.
> > Visit this group at https://groups.google.com/group/sympy.
> > To view this discussion on the web visit
> >
>
>
> > For more options, visit https://groups.google.com/d/optout.
>

--
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