Dear Aaron, first of all thank you for answering.

## Advertising

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: print("not found") ##################################################### ### 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 > > > https://groups.google.com/d/msgid/sympy/a4511ef2-2a10-4dbe-b6a0-01fe2fc47a05%40googlegroups.com. > > > > 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 to sympy+unsubscr...@googlegroups.com. To post to this group, send email to sympy@googlegroups.com. Visit this group at https://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/939b99f4-b75e-4f76-992e-28a92015e926%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.