openego / eTraGo

Optimization of flexibility options for transmission grids based on PyPSA
GNU Affero General Public License v3.0
32 stars 13 forks source link

Copying etrago objects fails with TypeError #645

Open khelfen opened 1 year ago

khelfen commented 1 year ago

When trying to copy.deepcopy an Etrago object it fails with TypeError: cannot pickle 'module' object. I suspect this behaviour is not desired. Full error message:

Traceback (most recent call last):
  File "/home/kilian/Documents/PythonProjects/eTraGo_fork/eTraGo/main.py", line 148, in <module>
    deepcopy(etrago)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 172, in deepcopy
    y = _reconstruct(x, memo, *rv)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 270, in _reconstruct
    state = deepcopy(state, memo)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 146, in deepcopy
    y = copier(x, memo)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 230, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 172, in deepcopy
    y = _reconstruct(x, memo, *rv)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 270, in _reconstruct
    state = deepcopy(state, memo)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 146, in deepcopy
    y = copier(x, memo)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 230, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 172, in deepcopy
    y = _reconstruct(x, memo, *rv)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 270, in _reconstruct
    state = deepcopy(state, memo)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 146, in deepcopy
    y = copier(x, memo)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 230, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 172, in deepcopy
    y = _reconstruct(x, memo, *rv)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 270, in _reconstruct
    state = deepcopy(state, memo)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 146, in deepcopy
    y = copier(x, memo)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 230, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/copy.py", line 161, in deepcopy
    rv = reductor(4)
TypeError: cannot pickle 'module' object

This SO fix with dill fails as well but gives a more specific error message as following:

Traceback (most recent call last):
  File "/home/kilian/Documents/PythonProjects/eTraGo_fork/eTraGo/main.py", line 148, in <module>
    dill.loads(dill.dumps(etrago))
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 263, in dumps
    dump(obj, file, protocol, byref, fmode, recurse, **kwds)#, strictio)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 235, in dump
    Pickler(file, protocol, **_kwds).dump(obj)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 394, in dump
    StockPickler.dump(self, obj)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 487, in dump
    self.save(obj)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 388, in save
    StockPickler.save(self, obj, save_persistent_id)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 603, in save
    self.save_reduce(obj=obj, *rv)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 717, in save_reduce
    save(state)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 388, in save
    StockPickler.save(self, obj, save_persistent_id)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 560, in save
    f(self, obj)  # Call unbound method with explicit self
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 1186, in save_module_dict
    StockPickler.save_dict(pickler, obj)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 971, in save_dict
    self._batch_setitems(obj.items())
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 997, in _batch_setitems
    save(v)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 388, in save
    StockPickler.save(self, obj, save_persistent_id)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 603, in save
    self.save_reduce(obj=obj, *rv)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 717, in save_reduce
    save(state)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 388, in save
    StockPickler.save(self, obj, save_persistent_id)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 560, in save
    f(self, obj)  # Call unbound method with explicit self
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 1186, in save_module_dict
    StockPickler.save_dict(pickler, obj)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 971, in save_dict
    self._batch_setitems(obj.items())
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 997, in _batch_setitems
    save(v)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 388, in save
    StockPickler.save(self, obj, save_persistent_id)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 603, in save
    self.save_reduce(obj=obj, *rv)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 717, in save_reduce
    save(state)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 388, in save
    StockPickler.save(self, obj, save_persistent_id)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 560, in save
    f(self, obj)  # Call unbound method with explicit self
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 1186, in save_module_dict
    StockPickler.save_dict(pickler, obj)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 971, in save_dict
    self._batch_setitems(obj.items())
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 997, in _batch_setitems
    save(v)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 388, in save
    StockPickler.save(self, obj, save_persistent_id)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 560, in save
    f(self, obj)  # Call unbound method with explicit self
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 1824, in save_function
    _save_with_postproc(pickler, (_create_function, (
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 1089, in _save_with_postproc
    pickler.save_reduce(*reduction)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 692, in save_reduce
    save(args)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 388, in save
    StockPickler.save(self, obj, save_persistent_id)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 560, in save
    f(self, obj)  # Call unbound method with explicit self
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 886, in save_tuple
    save(element)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 388, in save
    StockPickler.save(self, obj, save_persistent_id)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 603, in save
    self.save_reduce(obj=obj, *rv)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 717, in save_reduce
    save(state)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 388, in save
    StockPickler.save(self, obj, save_persistent_id)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 560, in save
    f(self, obj)  # Call unbound method with explicit self
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 1186, in save_module_dict
    StockPickler.save_dict(pickler, obj)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 971, in save_dict
    self._batch_setitems(obj.items())
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 997, in _batch_setitems
    save(v)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 388, in save
    StockPickler.save(self, obj, save_persistent_id)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 603, in save
    self.save_reduce(obj=obj, *rv)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 692, in save_reduce
    save(args)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 388, in save
    StockPickler.save(self, obj, save_persistent_id)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 560, in save
    f(self, obj)  # Call unbound method with explicit self
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 886, in save_tuple
    save(element)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/site-packages/dill/_dill.py", line 388, in save
    StockPickler.save(self, obj, save_persistent_id)
  File "/home/kilian/anaconda3/envs/eTraGo_env_dev/lib/python3.9/pickle.py", line 578, in save
    rv = reduce(self.proto)
TypeError: cannot pickle 'sqlalchemy.cprocessors.UnicodeResultProcessor' object