Good point Jeremy.

Feel free to change it. Editing the release notes is a completely
manual process. I'd like to make it more automatic but the first step
for that is probably moving them out of the wiki and into the repo and
making them part of the docs.

Oscar

On Wed, 24 Aug 2022 at 17:35, Jeremy Monat <jemo...@gmail.com> wrote:
>
> Thanks Oscar. Great to have the default (latest) version of the docs in the 
> new, Furo format.
>
> The release notes include
>>
>> SymPy 1.11 has not been released yet.
>
> Would you like me to update that to
>>
>> SymPy 1.11 was released on 23rd August 2022.
>
> or would you like to (or is some automation supposed to do that)?
>
> Best,
>
> Jeremy
>
>
> On Wed, Aug 24, 2022 at 11:39 AM Peter Stahlecker 
> <peter.stahlec...@gmail.com> wrote:
>>
>> Dear Oscar,
>>
>> Thanks to your explanations, I managed  to use solve_ivp when I used 
>> cse=True in  lambdify in one of my programs. ( just convert the list to an 
>> np.ndarray of the correct shape)
>> The increase in speed in the integration was remarkable:
>> From around 8.5 sec with cse=False to around 0.13 sec with cse=True, 65 
>> times faster!
>> Thanks! Peter
>>
>>
>> On Wed 24. Aug 2022 at 14:48 Peter Stahlecker <peter.stahlec...@gmail.com> 
>> wrote:
>>>
>>> Dear Oscar,
>>>
>>> my expressions into lambdify are of sm.Matrix type.
>>> With cse=False, the output of lambdify is a numpy.ndarray of the same shape 
>>> as the sm.Matrix.
>>> With cse=True, the output is is list.
>>> (I guess, this is what you said, would happen.)
>>>
>>> Does this mean, if I somehow manage to convert the lists into ndarrays of 
>>> the correct shape, the code should run with cse=True, too?
>>>
>>> Thanks, Peter
>>>
>>> On Wed 24. Aug 2022 at 14:26 Oscar Benjamin <oscar.j.benja...@gmail.com> 
>>> wrote:
>>>>
>>>> On Wed, 24 Aug 2022 at 08:55, Peter Stahlecker
>>>> <peter.stahlec...@gmail.com> wrote:
>>>> >
>>>> > I have upgraded to sympy 1.11
>>>> > I wanted to try the cse keyword.
>>>> >
>>>> > If I set cse = False, all seems to work fine.
>>>> > If I set cse = True, lambdify(..) seems to work fine, but solve_ivp(..) 
>>>> > gives and error.
>>>>
>>>> It looks like cse=True doesn't work properly when lambdifying a Matrix:
>>>>
>>>> In [3]: lambdify((x,), Matrix([[x**2, 0], [0, x**2]]), cse=False)(1)
>>>> Out[3]:
>>>> array([[1, 0],
>>>>        [0, 1]])
>>>>
>>>> In [4]: lambdify((x,), Matrix([[x**2, 0], [0, x**2]]), cse=True)(1)
>>>> Out[4]:
>>>> [array([[1, 0],
>>>>         [0, 1]])]
>>>>
>>>> Note that with cse=True the Matrix is in a list of length 1. If the
>>>> matrix doesn't have any nontrivial subexpressions then it doesn't
>>>> happen:
>>>>
>>>> In [6]: lambdify((x,), Matrix([[x, 0], [0, x]]), cse=True)(1)
>>>> Out[6]:
>>>> array([[1, 0],
>>>>        [0, 1]])
>>>>
>>>> Looking at the generated code we have:
>>>>
>>>> In [11]: print(inspect.getsource(lambdify((x,), Matrix([[x**2, 0], [0,
>>>> x**2]]), cse=True)))
>>>> def _lambdifygenerated(x):
>>>>     x0 = x**2
>>>>     return [array([[x0, 0], [0, x0]])]
>>>>
>>>> In [12]: print(inspect.getsource(lambdify((x,), Matrix([[x**2, 0], [0,
>>>> x**2]]), cse=False)))
>>>> def _lambdifygenerated(x):
>>>>     return array([[x**2, 0], [0, x**2]])
>>>>
>>>> So for some reason the generated code puts the output in a list. Looks
>>>> like this code is responsible:
>>>> https://github.com/sympy/sympy/blob/5eb59bdad2f4e1a675acb31e7f0c72c8abca708c/sympy/utilities/lambdify.py#L1114-L1126
>>>>
>>>> It seems to presume that expr (which in this case is a Matrix) is
>>>> supposed to be a list or tuple. First it tries to add a list to it and
>>>> then if that fails it tries to add a tuple and then if that fails it
>>>> just puts expr into a list (expr = [expr]). I wish I could just ban
>>>> the use of try/except in the sympy codebase because it's almost never
>>>> used in a good way.
>>>>
>>>> Basically that code will fail any time expr is not a tuple or a list e.g.:
>>>>
>>>> In [3]: lambdify(x, x**2 + y*x**2, cse=True)(1)
>>>> Out[3]: [y + 1]
>>>>
>>>> A workaround is just to extract the element from the list:
>>>>
>>>> In [4]: lambdify(x, x**2 + y*x**2, cse=True)(1)[0]
>>>> Out[4]: y + 1
>>>>
>>>> The bug comes from here:
>>>> https://github.com/sympy/sympy/pull/23538
>>>>
>>>> --
>>>> Oscar
>>>>
>>>> --
>>>> 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/CAHVvXxSoDEGZLfZ%3D0JYkdoQ%3D0Dq%3DSVP_MqnmOvp9%2Bp7Q__uxSg%40mail.gmail.com.
>>>
>>> --
>>> Best regards,
>>>
>>> Peter Stahlecker
>>
>> --
>> Best regards,
>>
>> Peter Stahlecker
>>
>> --
>> 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/CABKqA0YKmQ3RwByJMwmtXKS5rXi-SZ42tGeQrjChk%3D_UQ90Q9Q%40mail.gmail.com.
>
> --
> 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/CAO00iLhC9Np7PtbAKe4RiuyA2gCYrG5XDHbYSpf1LDnh3sjUiA%40mail.gmail.com.

-- 
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/CAHVvXxSzLNTQ2vB3EJHt83Pi1Pu9586Egv%3DhJAnTkWfwE%3DTDgA%40mail.gmail.com.

Reply via email to