Re: [sympy] How to avoid automatic xi symbols appearing with diff of chained functions

2019-08-25 Thread Mathieu Lamarre
doit() was the answer thanks! (Doesn't crash for me v1.4)

Le samedi 24 août 2019 20:20:13 UTC-4, Oscar a écrit :
>
> I would say that you should use doit but I just tried that and it crashed:
>
> In [*9*]: e=Function('g')(Function('f')(x1,x2),Function('h'
> )(x1,x2)).diff(x1)   
>
>
> In [*10*]: e 
>
>
> Out[*10*]: 
>
> ⎛ ∂  ⎞│⎛ ∂   ⎞│   ⎛ 
> ∂   ⎞│ ⎛ ∂  
>
> ⎜───(f(ξ₁, x[2]))⎟│   ⋅⎜───(g(ξ₁, h(x[1], x[2])))⎟│ + 
> ⎜───(g(f(x[1], x[2]), ξ₂))⎟│⋅⎜───(h(ξ₁
>
> ⎝∂ξ₁ ⎠│ξ₁=x[1] ⎝∂ξ₁  ⎠│ξ₁=f(x[1], x[2])   
> ⎝∂ξ₂  ⎠│ξ₂=h(x[1], x[2]) ⎝∂ξ₁ 
>
>
> ⎞│   
>
> , x[2]))⎟│   
>
> ⎠│ξ₁=x[1]
>
>
> In [*11*]: e.doit()  
>
>
> Fatal Python error: Cannot recover from stack overflow.
>
>
> Thread 0x7994b000 (most recent call first):
>
>   File "/Users/enojb/.local/lib/python3.5/threading.py", line 293 in wait
>
>   File "/Users/enojb/.local/lib/python3.5/threading.py", line 549 in wait
>
>   File 
> "/Users/enojb/current/sympy/35venv/lib/python3.5/site-packages/IPython/core/history.py",
>  
> line 829 in run
>
>   File 
> "/Users/enojb/current/sympy/35venv/lib/python3.5/site-packages/IPython/core/history.py",
>  
> line 58 in needs_sqlite
>
>   File 
> "",
>  
> line 2 in run
>
>   File "/Users/enojb/.local/lib/python3.5/threading.py", line 914 in 
> _bootstrap_inner
>
>   File "/Users/enojb/.local/lib/python3.5/threading.py", line 882 in 
> _bootstrap
>
>
> Current thread 0x7fffae5cf380 (most recent call first):
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/symbol.py", line 284 
> in assumptions0
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/symbol.py", line 274 
> in _hashable_content
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/symbol.py", line 381 
> in _hashable_content
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 133 in 
> __eq__
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 343 
> in __eq__
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/containers.py", line 
> 97 in __eq__
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 134 in 
> __eq__
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/cache.py", line 94 in 
> wrapper
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 2291 in 
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 2291 in _hashable_content
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 109 in 
> __hash__
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 2286 in __hash__
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/cache.py", line 94 in 
> wrapper
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 196 in 
> __mul__
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/decorators.py", line 
> 129 in binary_op_wrapper
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/decorators.py", line 
> 91 in __sympifyit_wrapper
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 618 in _eval_derivative
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 1724 
> in _visit_eval_derivative_scalar
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 1719 
> in _accept_eval_derivative
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 1743 
> in _eval_derivative_n_times
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 1427 in __new__
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 1598 in doit
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 2242 in doit
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 1600 in doit
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 2242 in doit
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 1600 in doit
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 2242 in doit
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 1600 in doit
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 2242 in doit
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 1600 in doit
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 2242 in doit
>
> ...
>
>   File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 
> 2242 in doit
>
>   File 

Re: [sympy] How to avoid automatic xi symbols appearing with diff of chained functions

2019-08-24 Thread Oscar Benjamin
I would say that you should use doit but I just tried that and it crashed:

In [*9*]: e=Function('g')(Function('f')(x1,x2),Function('h'
)(x1,x2)).diff(x1)


In [*10*]: e


Out[*10*]:

⎛ ∂  ⎞│⎛ ∂   ⎞│   ⎛
∂   ⎞│ ⎛ ∂

⎜───(f(ξ₁, x[2]))⎟│   ⋅⎜───(g(ξ₁, h(x[1], x[2])))⎟│ +
⎜───(g(f(x[1], x[2]), ξ₂))⎟│⋅⎜───(h(ξ₁

⎝∂ξ₁ ⎠│ξ₁=x[1] ⎝∂ξ₁  ⎠│ξ₁=f(x[1], x[2])
⎝∂ξ₂  ⎠│ξ₂=h(x[1], x[2]) ⎝∂ξ₁


⎞│

, x[2]))⎟│

⎠│ξ₁=x[1]


In [*11*]: e.doit()


Fatal Python error: Cannot recover from stack overflow.


Thread 0x7994b000 (most recent call first):

  File "/Users/enojb/.local/lib/python3.5/threading.py", line 293 in wait

  File "/Users/enojb/.local/lib/python3.5/threading.py", line 549 in wait

  File
"/Users/enojb/current/sympy/35venv/lib/python3.5/site-packages/IPython/core/history.py",
line 829 in run

  File
"/Users/enojb/current/sympy/35venv/lib/python3.5/site-packages/IPython/core/history.py",
line 58 in needs_sqlite

  File
"",
line 2 in run

  File "/Users/enojb/.local/lib/python3.5/threading.py", line 914 in
_bootstrap_inner

  File "/Users/enojb/.local/lib/python3.5/threading.py", line 882 in
_bootstrap


Current thread 0x7fffae5cf380 (most recent call first):

  File "/Users/enojb/current/sympy/sympy/sympy/core/symbol.py", line 284 in
assumptions0

  File "/Users/enojb/current/sympy/sympy/sympy/core/symbol.py", line 274 in
_hashable_content

  File "/Users/enojb/current/sympy/sympy/sympy/core/symbol.py", line 381 in
_hashable_content

  File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 133 in
__eq__

  File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 343 in
__eq__

  File "/Users/enojb/current/sympy/sympy/sympy/core/containers.py", line 97
in __eq__

  File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 134 in
__eq__

  File "/Users/enojb/current/sympy/sympy/sympy/core/cache.py", line 94 in
wrapper

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2291
in 

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2291
in _hashable_content

  File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 109 in
__hash__

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2286
in __hash__

  File "/Users/enojb/current/sympy/sympy/sympy/core/cache.py", line 94 in
wrapper

  File "/Users/enojb/current/sympy/sympy/sympy/core/expr.py", line 196 in
__mul__

  File "/Users/enojb/current/sympy/sympy/sympy/core/decorators.py", line
129 in binary_op_wrapper

  File "/Users/enojb/current/sympy/sympy/sympy/core/decorators.py", line 91
in __sympifyit_wrapper

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 618
in _eval_derivative

  File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 1724 in
_visit_eval_derivative_scalar

  File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 1719 in
_accept_eval_derivative

  File "/Users/enojb/current/sympy/sympy/sympy/core/basic.py", line 1743 in
_eval_derivative_n_times

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 1427
in __new__

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 1598
in doit

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2242
in doit

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 1600
in doit

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2242
in doit

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 1600
in doit

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2242
in doit

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 1600
in doit

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2242
in doit

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 1600
in doit

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2242
in doit

...

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 2242
in doit

  File "/Users/enojb/current/sympy/sympy/sympy/core/function.py", line 1600
in doit

  ...

Abort trap: 6

On Sun, 25 Aug 2019 at 01:13, Mathieu Lamarre 
wrote:

> Simple example of multivariate chain rule:
> print(Function('g')(Function('f')(x1,x2)).diff(x1))
>
> Gives the expected:
>
> [image: diff1.PNG]
>
> Derivative(f(x1, x2), x1)*Derivative(g(f(x1, x2)), f(x1, x2))
>
>
> Adding another function h:
>
> print(Function('g')(Function('f')(x1,x2),Function('h')(x1,x2)).diff(x1))
>
> Gives the expected answer but with extra _xi_1 and _xi_2 symbols:
>
> [image: diff.PNG]
>
> Derivative(f(x1, x2), x1)*Subs(Derivative(g(_xi_1, h(x1, x2)), _xi_1), _xi_1, 
> f(x1, x2)) + Derivative(h(x1, x2), x1)*Subs(Derivative(g(f(x1, x2), _xi_2), 
> _xi_2), _xi_2, h(x1, x2))
>
>
> 

[sympy] How to avoid automatic xi symbols appearing with diff of chained functions

2019-08-24 Thread Mathieu Lamarre
Simple example of multivariate chain rule:
print(Function('g')(Function('f')(x1,x2)).diff(x1))

Gives the expected:

[image: diff1.PNG]

Derivative(f(x1, x2), x1)*Derivative(g(f(x1, x2)), f(x1, x2))


Adding another function h:

print(Function('g')(Function('f')(x1,x2),Function('h')(x1,x2)).diff(x1))

Gives the expected answer but with extra _xi_1 and _xi_2 symbols: 

[image: diff.PNG] 

Derivative(f(x1, x2), x1)*Subs(Derivative(g(_xi_1, h(x1, x2)), _xi_1), _xi_1, 
f(x1, x2)) + Derivative(h(x1, x2), x1)*Subs(Derivative(g(f(x1, x2), _xi_2), 
_xi_2), _xi_2, h(x1, x2))


This is annoying for subsequent substitutions, for instance to switch from 
the function notation to simple symbols. 
Also, for more complex equations, the numbering of the automatic xi symbols 
is hard to predict. 

Is there a way to change this behavior? i.e. do not get the Subs and _xi_%d 
above

Thanks

-- 
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/b8b84555-2132-430c-be51-b0c47d99e3bb%40googlegroups.com.