test_extendpickle.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/usr/bin/env python
  2. #
  3. # Author: Mike McKerns (mmckerns @caltech and @uqfoundation)
  4. # Copyright (c) 2008-2016 California Institute of Technology.
  5. # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation.
  6. # License: 3-clause BSD. The full license text is available at:
  7. # - https://github.com/uqfoundation/dill/blob/master/LICENSE
  8. import dill as pickle
  9. from io import BytesIO as StringIO
  10. def my_fn(x):
  11. return x * 17
  12. def test_extend():
  13. obj = lambda : my_fn(34)
  14. assert obj() == 578
  15. obj_io = StringIO()
  16. pickler = pickle.Pickler(obj_io)
  17. pickler.dump(obj)
  18. obj_str = obj_io.getvalue()
  19. obj2_io = StringIO(obj_str)
  20. unpickler = pickle.Unpickler(obj2_io)
  21. obj2 = unpickler.load()
  22. assert obj2() == 578
  23. def test_isdill():
  24. obj_io = StringIO()
  25. pickler = pickle.Pickler(obj_io)
  26. assert pickle._dill.is_dill(pickler) is True
  27. pickler = pickle._dill.StockPickler(obj_io)
  28. assert pickle._dill.is_dill(pickler) is False
  29. try:
  30. import multiprocess as mp
  31. pickler = mp.reduction.ForkingPickler(obj_io)
  32. assert pickle._dill.is_dill(pickler, child=True) is True
  33. assert pickle._dill.is_dill(pickler, child=False) is False
  34. except Exception:
  35. pass
  36. if __name__ == '__main__':
  37. test_extend()
  38. test_isdill()