Opened 12 years ago

# .subs_expr() method doesn't work for argument of D derivative operator — at Version 6

Reported by: Owned by: gmhossain major sage-8.0 symbolics kcrisman, mjo, eviatarbach, jakobkroeker N/A

In computing functional derivative, one needs to vary a functional. For example, in sage-3.4 one can do as follows

```sage: f(x) = function('f',x)
sage: df(x) = function('df',x)
sage: g = f(x).diff(x)
sage: g
diff(f(x), x, 1)
sage: g.subs_expr(f(x)==f(x)+df(x))
diff(f(x) + df(x), x, 1)
```

In new symbolics, if I do the same I get

```sage: g
D(f)(x)
sage: g.subs_expr(f(x)==f(x)+df(x))
D(f)(x)
```

From #11842, the list of what does/doesn't work:

```from sage.all import *

# 1. Fails.
x = var('x')
f = function('f', x)
g = function('g', x)
p = f
print p.substitute_function(f, g) # Outputs "f(x)"

# 2. Fails.
x = var('x')
f = function('f')
g = function('g')
p = f(x)
print p.substitute_function(f(x), g(x)) # Outputs "f(x)"

# 3. Works.
x = var('x')
f = function('f')
g = function('g')
p = f(x)
print p.substitute_function(f, g) # Outputs "g(x)"

# 4. Fails.
x = var('x')
f = function('f')
g = function('g')
p = f(1)
print p.substitute_function(f(1), g(1)) # Outputs "f(1)"

# 5. Works.
x = var('x')
f = function('f')
g = function('g')
p = f(1)
print p.substitute_function(f, g) # Outputs "g(1)"

# 6. Fails.
x = var('x')
f = function('f', x)
g = function('g', x)
p = f.diff()
print p.substitute_function(f, g) # Outputs "D(f)(x)"

# 7. Fails.
x = var('x')
f = function('f', x)
g = function('g', x)
p = f.diff()
print p.substitute_function(f(x), g(x)) # Outputs "D(f)(x)"

# 8. Works.
x = var('x')
f = function('f')
g = function('g')
p = f(x).diff()
print p.substitute_function(f, g) # Outputs "D(g)(x)"

# 9. Fails.
x = var('x')
f = function('f')
g = function('g')
p = f(x).diff()(1)
print p.substitute_function(f(x).diff(), g(x).diff()) # Outputs "D(f)(1)"

# 10. Works..
x = var('x')
f = function('f')
g = function('g')
p = f(x).diff()(1)
print p.substitute_function(f, g) # Prints D(g)(1).
```

### comment:1 Changed 11 years ago by kcrisman

• Report Upstream set to N/A

### comment:2 Changed 10 years ago by mjo

I duped this in #11842. We might be able to make use of the test cases there when this gets fixed.

### comment:5 Changed 9 years ago by mjo

One of the cases in #11842 that used to crash now works, but a lot of them still don't. I updated the list.

### comment:6 Changed 9 years ago by kcrisman

• Description modified (diff)

I feel like if that one is closed, we should have the list here, so I'm updating the description.

Note: See TracTickets for help on using tickets.