This seems to be a bug. I think I can reproduce it with:

In [9]: import pickle

In [10]: from sympy.physics.mechanics import dynamicsymbols

In [11]: q1 = dynamicsymbols('q1')

In [12]: pickle.dumps(q1)
---------------------------------------------------------------------------
PicklingError                             Traceback (most recent call last)
<ipython-input-12-6285d23b0ca4> in <module>
----> 1 pickle.dumps(q1)

PicklingError: Can't pickle q1: it's not the same object as __main__.q1

Although the final error message is slightly different. Normal Symbol
works so it is to do with dynamicsymbol in some way.

Digging further:

In [13]: q1 = Function('q1')(Symbol('t'))

In [14]: pickle.dumps(q1)
---------------------------------------------------------------------------
PicklingError                             Traceback (most recent call last)
<ipython-input-14-6285d23b0ca4> in <module>
----> 1 pickle.dumps(q1)

PicklingError: Can't pickle q1: it's not the same object as __main__.q1

In [15]: q1 = Function('q1')

In [16]: pickle.dumps(q1)
Out[16]: b'\x80\x03c__main__\nq1\nq\x00.'

That pickle for the unapplied function is too short. I think something
is wrong with pickling functions.


To fix your problem substitute the dynamicsymbols for normal symbols.


Oscar

On Wed, 14 Aug 2019 at 10:54, Ash <[email protected]> wrote:
>
> Hello,
> I have derived the equations of motion of a dynamic system symbolically. To 
> evaluate the Mass Matrix and Coriolis Vector which contain several derivative 
> terms, the program takes around 14 sec. These two are to be used for various 
> other places. I tried saving and loading using 'dill'
>
> import dill
> MassMatrix, Coriolis = get_mc()
> dill.dump(MassMatrix, open("MassMatrix", "wb"))
> # dill.dump(Coriolis, open("Coriolis", "wb"))
>
> The above results in
>
> Traceback (most recent call last):
>   File 
> "/snap/pycharm-professional/147/helpers/pydev/_pydevd_bundle/pydevd_exec2.py",
>  line 3, in Exec
>     exec(exp, global_vars, local_vars)
>   File "<input>", line 1, in <module>
>   File "/home/ar0058/Ash/venv3.6/lib/python3.6/site-packages/dill/_dill.py", 
> line 287, in dump
>     pik.dump(obj)
>   File "/usr/lib/python3.6/pickle.py", line 409, in dump
>     self.save(obj)
>   File "/usr/lib/python3.6/pickle.py", line 521, in save
>     self.save_reduce(obj=obj, *rv)
>   File "/usr/lib/python3.6/pickle.py", line 610, in save_reduce
>     save(args)
>   File "/usr/lib/python3.6/pickle.py", line 476, in save
>     f(self, obj) # Call unbound method with explicit self
>   File "/usr/lib/python3.6/pickle.py", line 736, in save_tuple
>     save(element)
>   File "/usr/lib/python3.6/pickle.py", line 521, in save
>     self.save_reduce(obj=obj, *rv)
>   File "/usr/lib/python3.6/pickle.py", line 610, in save_reduce
>     save(args)
>   File "/usr/lib/python3.6/pickle.py", line 476, in save
>     f(self, obj) # Call unbound method with explicit self
>   File "/usr/lib/python3.6/pickle.py", line 751, in save_tuple
>     save(element)
>   File "/usr/lib/python3.6/pickle.py", line 521, in save
>     self.save_reduce(obj=obj, *rv)
>   File "/usr/lib/python3.6/pickle.py", line 610, in save_reduce
>     save(args)
>   File "/usr/lib/python3.6/pickle.py", line 476, in save
>     f(self, obj) # Call unbound method with explicit self
>   File "/usr/lib/python3.6/pickle.py", line 736, in save_tuple
>     save(element)
>   File "/usr/lib/python3.6/pickle.py", line 521, in save
>     self.save_reduce(obj=obj, *rv)
>   File "/usr/lib/python3.6/pickle.py", line 610, in save_reduce
>     save(args)
>   File "/usr/lib/python3.6/pickle.py", line 476, in save
>     f(self, obj) # Call unbound method with explicit self
>   File "/usr/lib/python3.6/pickle.py", line 736, in save_tuple
>     save(element)
>   File "/usr/lib/python3.6/pickle.py", line 521, in save
>     self.save_reduce(obj=obj, *rv)
>   File "/usr/lib/python3.6/pickle.py", line 610, in save_reduce
>     save(args)
>   File "/usr/lib/python3.6/pickle.py", line 476, in save
>     f(self, obj) # Call unbound method with explicit self
>   File "/usr/lib/python3.6/pickle.py", line 751, in save_tuple
>     save(element)
>   File "/usr/lib/python3.6/pickle.py", line 521, in save
>     self.save_reduce(obj=obj, *rv)
>   File "/usr/lib/python3.6/pickle.py", line 610, in save_reduce
>     save(args)
>   File "/usr/lib/python3.6/pickle.py", line 476, in save
>     f(self, obj) # Call unbound method with explicit self
>   File "/usr/lib/python3.6/pickle.py", line 736, in save_tuple
>     save(element)
>   File "/usr/lib/python3.6/pickle.py", line 521, in save
>     self.save_reduce(obj=obj, *rv)
>   File "/usr/lib/python3.6/pickle.py", line 610, in save_reduce
>     save(args)
>   File "/usr/lib/python3.6/pickle.py", line 476, in save
>     f(self, obj) # Call unbound method with explicit self
>   File "/usr/lib/python3.6/pickle.py", line 736, in save_tuple
>     save(element)
>   File "/usr/lib/python3.6/pickle.py", line 521, in save
>     self.save_reduce(obj=obj, *rv)
>   File "/usr/lib/python3.6/pickle.py", line 610, in save_reduce
>     save(args)
>   File "/usr/lib/python3.6/pickle.py", line 476, in save
>     f(self, obj) # Call unbound method with explicit self
>   File "/usr/lib/python3.6/pickle.py", line 736, in save_tuple
>     save(element)
>   File "/usr/lib/python3.6/pickle.py", line 521, in save
>     self.save_reduce(obj=obj, *rv)
>   File "/usr/lib/python3.6/pickle.py", line 610, in save_reduce
>     save(args)
>   File "/usr/lib/python3.6/pickle.py", line 476, in save
>     f(self, obj) # Call unbound method with explicit self
>   File "/usr/lib/python3.6/pickle.py", line 736, in save_tuple
>     save(element)
>   File "/usr/lib/python3.6/pickle.py", line 521, in save
>     self.save_reduce(obj=obj, *rv)
>   File "/usr/lib/python3.6/pickle.py", line 609, in save_reduce
>     save(func)
>   File "/usr/lib/python3.6/pickle.py", line 476, in save
>     f(self, obj) # Call unbound method with explicit self
>   File "/home/ar0058/Ash/venv3.6/lib/python3.6/site-packages/dill/_dill.py", 
> line 1338, in save_type
>     StockPickler.save_global(pickler, obj)
>   File "/usr/lib/python3.6/pickle.py", line 922, in save_global
>     (obj, module_name, name))
> _pickle.PicklingError: Can't pickle q1: it's not found as __main__.q1
>
>
> Could someone suggest a way to save properly?
>
> 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 [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sympy/bc15fc9f-8b3b-42f3-824c-69b475d947ad%40googlegroups.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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/CAHVvXxQe%2BYpg-tTO-tpZbjE36AaBPYBdbUGRsXXneVGO7hXrXA%40mail.gmail.com.

Reply via email to